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

Side by Side Diff: cc/frame_rate_controller.cc

Issue 11747002: cc: Set the max frames pending from the thread proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/frame_rate_controller.h" 5 #include "cc/frame_rate_controller.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "cc/delay_based_time_source.h" 9 #include "cc/delay_based_time_source.h"
10 #include "cc/time_source.h" 10 #include "cc/time_source.h"
11 #include "cc/thread.h" 11 #include "cc/thread.h"
12 12
13 namespace {
14
15 // This will be the maximum number of pending frames unless
16 // FrameRateController::setMaxFramesPending is called.
17 const int defaultMaxFramesPending = 2;
18
19 } // namespace
20
21 namespace cc { 13 namespace cc {
22 14
23 class FrameRateControllerTimeSourceAdapter : public TimeSourceClient { 15 class FrameRateControllerTimeSourceAdapter : public TimeSourceClient {
24 public: 16 public:
25 static scoped_ptr<FrameRateControllerTimeSourceAdapter> create(FrameRateCont roller* frameRateController) { 17 static scoped_ptr<FrameRateControllerTimeSourceAdapter> create(FrameRateCont roller* frameRateController) {
26 return make_scoped_ptr(new FrameRateControllerTimeSourceAdapter(frameRat eController)); 18 return make_scoped_ptr(new FrameRateControllerTimeSourceAdapter(frameRat eController));
27 } 19 }
28 virtual ~FrameRateControllerTimeSourceAdapter() {} 20 virtual ~FrameRateControllerTimeSourceAdapter() {}
29 21
30 virtual void onTimerTick() OVERRIDE { 22 virtual void onTimerTick() OVERRIDE {
31 m_frameRateController->onTimerTick(); 23 m_frameRateController->onTimerTick();
32 } 24 }
33 25
34 private: 26 private:
35 explicit FrameRateControllerTimeSourceAdapter(FrameRateController* frameRate Controller) 27 explicit FrameRateControllerTimeSourceAdapter(FrameRateController* frameRate Controller)
36 : m_frameRateController(frameRateController) {} 28 : m_frameRateController(frameRateController) {}
37 29
38 FrameRateController* m_frameRateController; 30 FrameRateController* m_frameRateController;
39 }; 31 };
40 32
41 FrameRateController::FrameRateController(scoped_refptr<TimeSource> timer) 33 FrameRateController::FrameRateController(scoped_refptr<TimeSource> timer)
42 : m_client(0) 34 : m_client(0)
43 , m_numFramesPending(0) 35 , m_numFramesPending(0)
44 , m_maxFramesPending(defaultMaxFramesPending) 36 , m_maxFramesPending(0)
45 , m_timeSource(timer) 37 , m_timeSource(timer)
46 , m_active(false) 38 , m_active(false)
47 , m_swapBuffersCompleteSupported(true) 39 , m_swapBuffersCompleteSupported(true)
48 , m_isTimeSourceThrottling(true) 40 , m_isTimeSourceThrottling(true)
49 , m_thread(0) 41 , m_thread(0)
50 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 42 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this))
51 { 43 {
52 m_timeSourceClientAdapter = FrameRateControllerTimeSourceAdapter::create(thi s); 44 m_timeSourceClientAdapter = FrameRateControllerTimeSourceAdapter::create(thi s);
53 m_timeSource->setClient(m_timeSourceClientAdapter.get()); 45 m_timeSource->setClient(m_timeSourceClientAdapter.get());
54 } 46 }
55 47
56 FrameRateController::FrameRateController(Thread* thread) 48 FrameRateController::FrameRateController(Thread* thread)
57 : m_client(0) 49 : m_client(0)
58 , m_numFramesPending(0) 50 , m_numFramesPending(0)
59 , m_maxFramesPending(defaultMaxFramesPending) 51 , m_maxFramesPending(0)
60 , m_active(false) 52 , m_active(false)
61 , m_swapBuffersCompleteSupported(true) 53 , m_swapBuffersCompleteSupported(true)
62 , m_isTimeSourceThrottling(false) 54 , m_isTimeSourceThrottling(false)
63 , m_thread(thread) 55 , m_thread(thread)
64 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) 56 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this))
65 { 57 {
66 } 58 }
67 59
68 FrameRateController::~FrameRateController() 60 FrameRateController::~FrameRateController()
69 { 61 {
(...skipping 13 matching lines...) Expand all
83 else { 75 else {
84 if (active) 76 if (active)
85 postManualTick(); 77 postManualTick();
86 else 78 else
87 m_weakFactory.InvalidateWeakPtrs(); 79 m_weakFactory.InvalidateWeakPtrs();
88 } 80 }
89 } 81 }
90 82
91 void FrameRateController::setMaxFramesPending(int maxFramesPending) 83 void FrameRateController::setMaxFramesPending(int maxFramesPending)
92 { 84 {
93 DCHECK(maxFramesPending > 0); 85 DCHECK(maxFramesPending >= 0);
94 m_maxFramesPending = maxFramesPending; 86 m_maxFramesPending = maxFramesPending;
95 } 87 }
96 88
97 void FrameRateController::setTimebaseAndInterval(base::TimeTicks timebase, base: :TimeDelta interval) 89 void FrameRateController::setTimebaseAndInterval(base::TimeTicks timebase, base: :TimeDelta interval)
98 { 90 {
99 if (m_isTimeSourceThrottling) 91 if (m_isTimeSourceThrottling)
100 m_timeSource->setTimebaseAndInterval(timebase, interval); 92 m_timeSource->setTimebaseAndInterval(timebase, interval);
101 } 93 }
102 94
103 void FrameRateController::setSwapBuffersCompleteSupported(bool supported) 95 void FrameRateController::setSwapBuffersCompleteSupported(bool supported)
104 { 96 {
105 m_swapBuffersCompleteSupported = supported; 97 m_swapBuffersCompleteSupported = supported;
106 } 98 }
107 99
108 void FrameRateController::onTimerTick() 100 void FrameRateController::onTimerTick()
109 { 101 {
110 DCHECK(m_active); 102 DCHECK(m_active);
111 103
112 // Check if we have too many frames in flight. 104 // Check if we have too many frames in flight.
113 bool throttled = m_numFramesPending >= m_maxFramesPending; 105 bool throttled = m_maxFramesPending && m_numFramesPending >= m_maxFramesPend ing;
114 TRACE_COUNTER_ID1("cc", "ThrottledVSyncInterval", m_thread, throttled); 106 TRACE_COUNTER_ID1("cc", "ThrottledVSyncInterval", m_thread, throttled);
115 107
116 if (m_client) 108 if (m_client)
117 m_client->vsyncTick(throttled); 109 m_client->vsyncTick(throttled);
118 110
119 if (m_swapBuffersCompleteSupported && !m_isTimeSourceThrottling && m_numFram esPending < m_maxFramesPending) 111 if (m_swapBuffersCompleteSupported && !m_isTimeSourceThrottling && (!m_maxFr amesPending || m_numFramesPending < m_maxFramesPending))
enne (OOO) 2013/01/04 21:42:05 How about reusing throttled, i.e. "&& !throttled"?
danakj 2013/01/04 21:44:45 Ya good plan.
danakj 2013/01/04 22:24:07 Done.
120 postManualTick(); 112 postManualTick();
121 } 113 }
122 114
123 void FrameRateController::postManualTick() 115 void FrameRateController::postManualTick()
124 { 116 {
125 if (m_active) 117 if (m_active)
126 m_thread->postTask(base::Bind(&FrameRateController::manualTick, m_weakFa ctory.GetWeakPtr())); 118 m_thread->postTask(base::Bind(&FrameRateController::manualTick, m_weakFa ctory.GetWeakPtr()));
127 } 119 }
128 120
129 void FrameRateController::manualTick() 121 void FrameRateController::manualTick()
(...skipping 25 matching lines...) Expand all
155 147
156 base::TimeTicks FrameRateController::nextTickTime() 148 base::TimeTicks FrameRateController::nextTickTime()
157 { 149 {
158 if (m_isTimeSourceThrottling) 150 if (m_isTimeSourceThrottling)
159 return m_timeSource->nextTickTime(); 151 return m_timeSource->nextTickTime();
160 152
161 return base::TimeTicks(); 153 return base::TimeTicks();
162 } 154 }
163 155
164 } // namespace cc 156 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698