Index: cc/CCFrameRateCounter.cpp |
diff --git a/cc/CCFrameRateCounter.cpp b/cc/CCFrameRateCounter.cpp |
deleted file mode 100644 |
index 80074edee6abd0e6b17aefc997d0a8931bbb8357..0000000000000000000000000000000000000000 |
--- a/cc/CCFrameRateCounter.cpp |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "config.h" |
- |
-#if USE(ACCELERATED_COMPOSITING) |
-#include "CCFrameRateCounter.h" |
- |
-#include <cmath> |
- |
-#include "CCProxy.h" |
-#include <public/Platform.h> |
-#include <wtf/CurrentTime.h> |
- |
-namespace cc { |
- |
-const double CCFrameRateCounter::kFrameTooFast = 1.0 / 70.0; // measured in seconds |
-const double CCFrameRateCounter::kFrameTooSlow = 1.0 / 12.0; |
-const double CCFrameRateCounter::kDroppedFrameTime = 1.0 / 50.0; |
- |
-// safeMod works on -1, returning m-1 in that case. |
-static inline int safeMod(int number, int modulus) |
-{ |
- return (number + modulus) % modulus; |
-} |
- |
-inline double CCFrameRateCounter::frameInterval(int frameNumber) const |
-{ |
- return m_timeStampHistory[frameIndex(frameNumber)] - |
- m_timeStampHistory[frameIndex(frameNumber - 1)]; |
-} |
- |
-inline int CCFrameRateCounter::frameIndex(int frameNumber) const |
-{ |
- return safeMod(frameNumber, kTimeStampHistorySize); |
-} |
- |
-CCFrameRateCounter::CCFrameRateCounter() |
- : m_currentFrameNumber(1) |
- , m_droppedFrameCount(0) |
-{ |
- m_timeStampHistory[0] = currentTime(); |
- m_timeStampHistory[1] = m_timeStampHistory[0]; |
- for (int i = 2; i < kTimeStampHistorySize; i++) |
- m_timeStampHistory[i] = 0; |
-} |
- |
-void CCFrameRateCounter::markBeginningOfFrame(double timestamp) |
-{ |
- m_timeStampHistory[frameIndex(m_currentFrameNumber)] = timestamp; |
- double frameIntervalSeconds = frameInterval(m_currentFrameNumber); |
- |
- if (CCProxy::hasImplThread() && m_currentFrameNumber > 0) { |
- double drawDelayMs = frameIntervalSeconds * 1000.0; |
- WebKit::Platform::current()->histogramCustomCounts("Renderer4.CompositorThreadImplDrawDelay", static_cast<int>(drawDelayMs), 1, 120, 60); |
- } |
- |
- if (!isBadFrameInterval(frameIntervalSeconds) && frameIntervalSeconds > kDroppedFrameTime) |
- ++m_droppedFrameCount; |
-} |
- |
-void CCFrameRateCounter::markEndOfFrame() |
-{ |
- m_currentFrameNumber += 1; |
-} |
- |
-bool CCFrameRateCounter::isBadFrameInterval(double intervalBetweenConsecutiveFrames) const |
-{ |
- bool schedulerAllowsDoubleFrames = !CCProxy::hasImplThread(); |
- bool intervalTooFast = schedulerAllowsDoubleFrames && intervalBetweenConsecutiveFrames < kFrameTooFast; |
- bool intervalTooSlow = intervalBetweenConsecutiveFrames > kFrameTooSlow; |
- return intervalTooFast || intervalTooSlow; |
-} |
- |
-bool CCFrameRateCounter::isBadFrame(int frameNumber) const |
-{ |
- return isBadFrameInterval(frameInterval(frameNumber)); |
-} |
- |
-void CCFrameRateCounter::getAverageFPSAndStandardDeviation(double& averageFPS, double& standardDeviation) const |
-{ |
- int frame = m_currentFrameNumber - 1; |
- averageFPS = 0; |
- int averageFPSCount = 0; |
- double fpsVarianceNumerator = 0; |
- |
- // Walk backwards through the samples looking for a run of good frame |
- // timings from which to compute the mean and standard deviation. |
- // |
- // Slow frames occur just because the user is inactive, and should be |
- // ignored. Fast frames are ignored if the scheduler is in single-thread |
- // mode in order to represent the true frame rate in spite of the fact that |
- // the first few swapbuffers happen instantly which skews the statistics |
- // too much for short lived animations. |
- // |
- // isBadFrame encapsulates the frame too slow/frame too fast logic. |
- while (1) { |
- if (!isBadFrame(frame)) { |
- averageFPSCount++; |
- double secForLastFrame = m_timeStampHistory[frameIndex(frame)] - |
- m_timeStampHistory[frameIndex(frame - 1)]; |
- double x = 1.0 / secForLastFrame; |
- 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)) { |
- // 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; |
- } |
- } |
- |
- standardDeviation = sqrt(fpsVarianceNumerator / averageFPSCount); |
-} |
- |
-double CCFrameRateCounter::timeStampOfRecentFrame(int n) |
-{ |
- ASSERT(n >= 0 && n < kTimeStampHistorySize); |
- int desiredIndex = (frameIndex(m_currentFrameNumber) + n) % kTimeStampHistorySize; |
- return m_timeStampHistory[desiredIndex]; |
-} |
- |
-} // namespace cc |
- |
-#endif // USE(ACCELERATED_COMPOSITING) |