EnableFramerateCounter, Setting your Framerate correctly
Debug tool
I posted about EnableFramerateCounter before -- it is a simple little debugging setting that you can use when trying to figure out:
- Which of these designs hurts my framerate more?
- If I add this module in, does it hurt my framerate?
To figure these out, you can:
- Set the plugin's desired framerate at 1000 (silverlightObject.settings.MaxFrameRate ORSilverlight.CreateObjectEx ({properties:{framerate:'framerate'}}) )
- Turn on the EnableFramerateCounter, which should show up in the status bar (IE/Firefox --> View --> Status Bar).
Desired Framerates
Make sure to reset the framerate to the suggested framerates for your app: Media apps @60fps or RIA/Control apps @20fps before launching your app to the public.
When trying to figure out the desired framerate of an animation or control-heavy app, use real people (not developers/designers) to gauge whether increasing the fps above 20fps makes sense. If you set your framerate at an unnecessarily high value, it will throttle the computer's cycles -- and could result in a jerkier effect than if you just had a lower framerate. So where 60fps might be slick and easy for your devbox, it could be a pain for your customer's machine -- so only use what you need.
The desired framerate of plugin hosting media is always 60fps -- this gives the media pipeline the most number of ticks to figure out the optimal timing of presenting a frame. Silverlight will decode at the framerate of the encoded video (this usually is <32fps), and we present the frames in sync with the audio. To summarize roughly, if the platform doesn't receive a tick in sync with the audio, then the platform will decode the frame, and then just throw it away. If you don't understand this, just trust me and use framerate=60.
Technically, you could set the framerate dynamically -- I haven't tried this, but it might be a useful thing to try out if your app has both media and heavy controls/animations.
Debugging Settings
So here are the debugging settings that I use (not all at once, of course)
Sys.Silverlight.createObjectEx({
source: "xaml/Scene.xaml",
parentElement: document.getElementById("SilverlightControlHost"),
id: "SilverlightControl",
properties: {
width: "500", height: "500",
isWindowless: false,
background: "FF000000",
framerate: "10000" },
events: { onLoad:onLoadHandler} });
function onLoadHandler() {
agControl = document.getElementById("SilverlightControl");
/* To see the framerate displayed in the browser status bar */
agControl.settings.EnableFrameRateCounter = true;
/* To see the redraw regions*/
agControl.settings.EnableRedrawRegions= true;
}
I accidentally dumped the sugar canister into my tea, time to go home.
Seema
Comments
- Anonymous
November 07, 2008
PingBack from http://mstechnews.info/2008/11/enableframeratecounter-setting-your-framerate-correctly-and-a-debug-bug/