Index: cc/frame_rate_controller.cc |
=================================================================== |
--- cc/frame_rate_controller.cc (revision 175415) |
+++ cc/frame_rate_controller.cc (working copy) |
@@ -10,6 +10,14 @@ |
#include "cc/time_source.h" |
#include "cc/thread.h" |
+namespace { |
+ |
+// This will be the maximum number of pending frames unless |
+// FrameRateController::setMaxFramesPending is called. |
+const int defaultMaxFramesPending = 2; |
+ |
+} // namespace |
+ |
namespace cc { |
class FrameRateControllerTimeSourceAdapter : public TimeSourceClient { |
@@ -33,7 +41,7 @@ |
FrameRateController::FrameRateController(scoped_refptr<TimeSource> timer) |
: m_client(0) |
, m_numFramesPending(0) |
- , m_maxFramesPending(0) |
+ , m_maxFramesPending(defaultMaxFramesPending) |
, m_timeSource(timer) |
, m_active(false) |
, m_swapBuffersCompleteSupported(true) |
@@ -48,7 +56,7 @@ |
FrameRateController::FrameRateController(Thread* thread) |
: m_client(0) |
, m_numFramesPending(0) |
- , m_maxFramesPending(0) |
+ , m_maxFramesPending(defaultMaxFramesPending) |
, m_active(false) |
, m_swapBuffersCompleteSupported(true) |
, m_isTimeSourceThrottling(false) |
@@ -82,7 +90,7 @@ |
void FrameRateController::setMaxFramesPending(int maxFramesPending) |
{ |
- DCHECK(maxFramesPending >= 0); |
+ DCHECK(maxFramesPending > 0); |
m_maxFramesPending = maxFramesPending; |
} |
@@ -102,13 +110,13 @@ |
DCHECK(m_active); |
// Check if we have too many frames in flight. |
- bool throttled = m_maxFramesPending && m_numFramesPending >= m_maxFramesPending; |
+ bool throttled = m_numFramesPending >= m_maxFramesPending; |
TRACE_COUNTER_ID1("cc", "ThrottledVSyncInterval", m_thread, throttled); |
if (m_client) |
m_client->vsyncTick(throttled); |
- if (m_swapBuffersCompleteSupported && !m_isTimeSourceThrottling && !throttled) |
+ if (m_swapBuffersCompleteSupported && !m_isTimeSourceThrottling && m_numFramesPending < m_maxFramesPending) |
postManualTick(); |
} |