Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2426)

Unified Diff: cc/frame_rate_counter.cc

Issue 11272042: improvements of the FPS counter in the HUDLayer (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/frame_rate_counter.cc
diff --git a/cc/frame_rate_counter.cc b/cc/frame_rate_counter.cc
index 7ff1edc54fa50d017b88288979e018526c94c2d6..58a2cebfee287f0ba2c1a76025a2495b56d79240 100644
--- a/cc/frame_rate_counter.cc
+++ b/cc/frame_rate_counter.cc
@@ -83,11 +83,13 @@ bool FrameRateCounter::isBadFrame(int frameNumber) const
void FrameRateCounter::getAverageFPSAndStandardDeviation(double& averageFPS, double& standardDeviation) const
egraether 2012/10/26 00:06:52 I refactored this method, because it was hard to r
{
- int frame = m_currentFrameNumber - 1;
- averageFPS = 0;
- int averageFPSCount = 0;
+ int frameNumber = m_currentFrameNumber - 1;
+ int frameCount = 0;
double fpsVarianceNumerator = 0;
+ averageFPS = 0;
+ standardDeviation = 0;
+
// Walk backwards through the samples looking for a run of good frame
// timings from which to compute the mean and standard deviation.
//
@@ -98,32 +100,29 @@ void FrameRateCounter::getAverageFPSAndStandardDeviation(double& averageFPS, dou
// too much for short lived animations.
//
// isBadFrame encapsulates the frame too slow/frame too fast logic.
- while (1) {
- if (!isBadFrame(frame)) {
- averageFPSCount++;
- base::TimeDelta secForLastFrame = m_timeStampHistory[frameIndex(frame)] -
- m_timeStampHistory[frameIndex(frame - 1)];
- double x = 1.0 / secForLastFrame.InSecondsF();
+
+ // Go through all available historical data.
+ while (frameIndex(frameNumber) != frameIndex(m_currentFrameNumber) && frameNumber >= 0) {
+ base::TimeDelta delta = frameInterval(frameNumber);
+
+ if (!isBadFrameInterval(delta)) {
+ frameCount++;
+ double x = 1.0 / delta.InSecondsF();
double deltaFromAverage = x - averageFPS;
// Change with caution - numerics. http://en.wikipedia.org/wiki/Standard_deviation
- averageFPS = averageFPS + deltaFromAverage / averageFPSCount;
- fpsVarianceNumerator = fpsVarianceNumerator + deltaFromAverage * (x - averageFPS);
- }
- if (averageFPSCount && isBadFrame(frame)) {
+ averageFPS += deltaFromAverage / frameCount;
+ fpsVarianceNumerator += deltaFromAverage * (x - averageFPS);
+ } else if (frameCount)
// We've gathered a run of good samples, so stop.
break;
- }
- --frame;
- if (frameIndex(frame) == frameIndex(m_currentFrameNumber) || frame < 0) {
- // We've gone through all available historical data, so stop.
- break;
- }
+ frameNumber--;
}
- standardDeviation = sqrt(fpsVarianceNumerator / averageFPSCount);
+ if (frameCount)
egraether 2012/10/26 00:06:52 This is a fix for a divide by zero error. It made
+ standardDeviation = sqrt(fpsVarianceNumerator / frameCount);
}
-base::TimeTicks FrameRateCounter::timeStampOfRecentFrame(int n)
+base::TimeTicks FrameRateCounter::timeStampOfRecentFrame(int n) const
{
DCHECK(n >= 0);
DCHECK(n < kTimeStampHistorySize);

Powered by Google App Engine
This is Rietveld 408576698