Chromium Code Reviews| Index: cc/frame_rate_counter.cc |
| diff --git a/cc/frame_rate_counter.cc b/cc/frame_rate_counter.cc |
| index a02486bd0ec026e84e0d85f985f0d12ed7f3b15d..6bff0dd112b29fff7ba9f9a1b65775addb31f1e4 100644 |
| --- a/cc/frame_rate_counter.cc |
| +++ b/cc/frame_rate_counter.cc |
| @@ -13,10 +13,6 @@ |
| 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) |
| { |
| @@ -28,6 +24,20 @@ scoped_ptr<CCFrameRateCounter> CCFrameRateCounter::create() { |
| return make_scoped_ptr(new CCFrameRateCounter()); |
| } |
| +void CCFrameRateCounter::setTimebaseAndInterval(base::TimeTicks timebase, base::TimeDelta interval) |
| +{ |
| + if (interval != m_interval) { |
| + base::TimeTicks now = base::TimeTicks::Now(); |
| + if (m_interval != base::TimeDelta()) |
| + m_vsyncCount += (now - m_intervalChangedTime + (m_interval/2)) / m_interval; |
| + m_intervalChangedTime = now; |
| + m_interval = interval; |
| + } |
| + |
| + m_frameTooFastSeconds = 0.8 * interval.InSecondsF(); |
| + m_frameTooSlowSeconds = 1.0 / 12.0; |
| +} |
| + |
| inline base::TimeDelta CCFrameRateCounter::frameInterval(int frameNumber) const |
| { |
| return m_timeStampHistory[frameIndex(frameNumber)] - |
| @@ -40,9 +50,12 @@ inline int CCFrameRateCounter::frameIndex(int frameNumber) const |
| } |
| CCFrameRateCounter::CCFrameRateCounter() |
| - : m_currentFrameNumber(1) |
| - , m_droppedFrameCount(0) |
| + : m_vsyncCount(0) |
| + , m_currentFrameNumber(1) |
| { |
| + setTimebaseAndInterval( |
| + base::TimeTicks(), base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond / 60)); |
|
reveman
2012/10/17 19:32:30
this assumes that 60FPS is the initial frame rate,
brianderson
2012/10/17 22:34:48
Done.
|
| + |
| m_timeStampHistory[0] = base::TimeTicks::Now(); |
| m_timeStampHistory[1] = m_timeStampHistory[0]; |
| for (int i = 2; i < kTimeStampHistorySize; i++) |
| @@ -59,9 +72,6 @@ void CCFrameRateCounter::markBeginningOfFrame(base::TimeTicks timestamp) |
| WebKit::Platform::current()->histogramCustomCounts("Renderer4.CompositorThreadImplDrawDelay", static_cast<int>(drawDelayMs), 1, 120, 60); |
| } |
| - if (!isBadFrameInterval(frameIntervalSeconds) && |
| - frameIntervalSeconds.InSecondsF() > kDroppedFrameTime) |
| - ++m_droppedFrameCount; |
| } |
| void CCFrameRateCounter::markEndOfFrame() |
| @@ -72,8 +82,8 @@ void CCFrameRateCounter::markEndOfFrame() |
| bool CCFrameRateCounter::isBadFrameInterval(base::TimeDelta intervalBetweenConsecutiveFrames) const |
| { |
| bool schedulerAllowsDoubleFrames = !CCProxy::hasImplThread(); |
| - bool intervalTooFast = schedulerAllowsDoubleFrames && intervalBetweenConsecutiveFrames.InSecondsF() < kFrameTooFast; |
| - bool intervalTooSlow = intervalBetweenConsecutiveFrames.InSecondsF() > kFrameTooSlow; |
| + bool intervalTooFast = schedulerAllowsDoubleFrames && intervalBetweenConsecutiveFrames.InSecondsF() < m_frameTooFastSeconds; |
| + bool intervalTooSlow = intervalBetweenConsecutiveFrames.InSecondsF() > m_frameTooSlowSeconds; |
| return intervalTooFast || intervalTooSlow; |
| } |
| @@ -131,5 +141,17 @@ base::TimeTicks CCFrameRateCounter::timeStampOfRecentFrame(int n) |
| return m_timeStampHistory[desiredIndex]; |
| } |
| +void CCFrameRateCounter::renderingStats(CCRenderingStats* stats) const |
| +{ |
| + base::TimeTicks now = base::TimeTicks::Now(); |
| + |
| + stats->vsyncCount = m_vsyncCount; |
| + if (m_interval != base::TimeDelta()) |
| + stats->vsyncCount += (now - m_intervalChangedTime + (m_interval/2)) / m_interval; |
|
reveman
2012/10/17 19:32:30
this same logic is used in setTimebaseAndInterval.
brianderson
2012/10/17 22:34:48
Done.
|
| + |
| + stats->rendererFrameCount = m_currentFrameNumber - 1; |
| + stats->droppedFrameCount = stats->vsyncCount - (m_currentFrameNumber - 1); |
|
reveman
2012/10/17 19:32:30
Looks like droppedFrameCount is unnecessary. Shoul
brianderson
2012/10/17 22:34:48
I think it would be nice to keep it as a separate
|
| +} |
| + |
| } // namespace cc |