Display FPS in the media panel where we have tight control over dirtying

and repainting.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2501 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2003-04-29 18:15:10 +00:00
parent 83cdc0b0fb
commit b2cbd63be2
+53 -4
View File
@@ -1,9 +1,12 @@
//
// $Id: MediaPanel.java,v 1.32 2003/04/15 00:39:20 mdb Exp $
// $Id: MediaPanel.java,v 1.33 2003/04/29 18:15:10 mdb Exp $
package com.threerings.media;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Rectangle;
@@ -16,8 +19,10 @@ import javax.swing.event.AncestorEvent;
import java.util.Arrays;
import com.samskivert.swing.Label;
import com.samskivert.swing.event.AncestorAdapter;
import com.samskivert.util.IntListUtil;
import com.samskivert.util.RuntimeAdjust;
import com.samskivert.util.StringUtil;
import com.threerings.media.animation.Animation;
@@ -49,8 +54,7 @@ import com.threerings.media.sprite.SpriteManager;
* paused while the animated panel is hidden.
*/
public class MediaPanel extends JComponent
implements FrameParticipant, MediaConstants,
FrameManager.PerformanceProvider
implements FrameParticipant, MediaConstants
{
/**
* Constructs a media panel.
@@ -130,7 +134,6 @@ public class MediaPanel extends JComponent
// documentation inherited from interface
public void getPerformanceStatus (StringBuffer buf)
{
buf.append("MP:").append(_dirtyPerTick);
}
/**
@@ -199,6 +202,34 @@ public class MediaPanel extends JComponent
_animmgr.tick(tickStamp);
_spritemgr.tick(tickStamp);
// if performance debugging is enabled,
if (_perfDebug.getValue()) {
if (_perfLabel == null) {
_perfLabel = new Label(
"", Label.OUTLINE, Color.white, Color.black,
new Font("Arial", Font.PLAIN, 10));
_perfRect = new Rectangle(5, 5, 0, 0);
}
StringBuffer perf = new StringBuffer();
perf.append("[FPS: ");
perf.append(_framemgr.getPerfTicks()).append("/");
perf.append(_framemgr.getPerfTries());
perf.append(" MP:").append(_dirtyPerTick).append("]");
_perfLabel.setText(perf.toString());
Graphics2D gfx = (Graphics2D)getGraphics();
_perfLabel.layout(gfx);
gfx.dispose();
// make sure the region we dirty contains the old and the new
// text (which we ensure by never letting the rect shrink)
Dimension psize = _perfLabel.getSize();
_perfRect.width = Math.max(_perfRect.width, psize.width);
_perfRect.height = Math.max(_perfRect.height, psize.height);
dirtyScreenRect(new Rectangle(_perfRect));
}
// let derived classes do their business
didTick(tickStamp);
@@ -299,6 +330,12 @@ public class MediaPanel extends JComponent
Rectangle[] dirty = _remgr.getDirtyRegions();
_dirty[_tick] = dirty.length;
paint(gfx, dirty);
// render our performance debugging if it's enabled
if (_perfLabel != null && _perfDebug.getValue()) {
gfx.setClip(null);
_perfLabel.render(gfx, _perfRect.x, _perfRect.y);
}
}
/**
@@ -463,4 +500,16 @@ public class MediaPanel extends JComponent
/** Used to keep metrics. */
protected float _dirtyPerTick;
/** Used to render performance metrics. */
protected Label _perfLabel;
/** Used to render performance metrics. */
protected Rectangle _perfRect;
/** A debug hook that toggles FPS rendering. */
protected static RuntimeAdjust.BooleanAdjust _perfDebug =
new RuntimeAdjust.BooleanAdjust(
"Toggles frames per second and dirty regions per tick rendering.",
"narya.media.fps_display", MediaPrefs.config, false);
}