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

Side by Side Diff: cc/CCScheduler.cpp

Issue 10913261: cc: Remove awareness of incremental updates from state machine. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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
« no previous file with comments | « cc/CCScheduler.h ('k') | cc/CCSchedulerStateMachine.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "config.h" 5 #include "config.h"
6 6
7 #include "CCScheduler.h" 7 #include "CCScheduler.h"
8 8
9 #include "TraceEvent.h" 9 #include "TraceEvent.h"
10 10
11 namespace WebCore { 11 namespace WebCore {
12 12
13 CCScheduler::CCScheduler(CCSchedulerClient* client, PassOwnPtr<CCFrameRateContro ller> frameRateController) 13 CCScheduler::CCScheduler(CCSchedulerClient* client, PassOwnPtr<CCFrameRateContro ller> frameRateController)
14 : m_client(client) 14 : m_client(client)
15 , m_frameRateController(frameRateController) 15 , m_frameRateController(frameRateController)
16 , m_hasMoreResourceUpdates(false) 16 , m_updateResourcesCompletePending(false)
17 , m_updateMoreResourcesPending(false)
18 { 17 {
19 ASSERT(m_client); 18 ASSERT(m_client);
20 m_frameRateController->setClient(this); 19 m_frameRateController->setClient(this);
21 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); 20 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded());
22 } 21 }
23 22
24 CCScheduler::~CCScheduler() 23 CCScheduler::~CCScheduler()
25 { 24 {
26 m_frameRateController->setActive(false); 25 m_frameRateController->setActive(false);
27 } 26 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 73
75 void CCScheduler::setMainThreadNeedsLayerTextures() 74 void CCScheduler::setMainThreadNeedsLayerTextures()
76 { 75 {
77 m_stateMachine.setMainThreadNeedsLayerTextures(); 76 m_stateMachine.setMainThreadNeedsLayerTextures();
78 processScheduledActions(); 77 processScheduledActions();
79 } 78 }
80 79
81 void CCScheduler::beginFrameComplete(bool hasResourceUpdates) 80 void CCScheduler::beginFrameComplete(bool hasResourceUpdates)
82 { 81 {
83 TRACE_EVENT0("cc", "CCScheduler::beginFrameComplete"); 82 TRACE_EVENT0("cc", "CCScheduler::beginFrameComplete");
84 m_hasMoreResourceUpdates = hasResourceUpdates; 83 m_stateMachine.beginFrameComplete(hasResourceUpdates);
85 m_stateMachine.beginFrameComplete();
86 processScheduledActions(); 84 processScheduledActions();
87 } 85 }
88 86
89 void CCScheduler::beginFrameAborted() 87 void CCScheduler::beginFrameAborted()
90 { 88 {
91 TRACE_EVENT0("cc", "CCScheduler::beginFrameAborted"); 89 TRACE_EVENT0("cc", "CCScheduler::beginFrameAborted");
92 m_stateMachine.beginFrameAborted(); 90 m_stateMachine.beginFrameAborted();
93 processScheduledActions(); 91 processScheduledActions();
94 } 92 }
95 93
(...skipping 28 matching lines...) Expand all
124 processScheduledActions(); 122 processScheduledActions();
125 } 123 }
126 124
127 void CCScheduler::setTimebaseAndInterval(double timebase, double intervalSeconds ) 125 void CCScheduler::setTimebaseAndInterval(double timebase, double intervalSeconds )
128 { 126 {
129 m_frameRateController->setTimebaseAndInterval(timebase, intervalSeconds); 127 m_frameRateController->setTimebaseAndInterval(timebase, intervalSeconds);
130 } 128 }
131 129
132 void CCScheduler::vsyncTick() 130 void CCScheduler::vsyncTick()
133 { 131 {
134 if (m_updateMoreResourcesPending) {
135 m_updateMoreResourcesPending = false;
136 ASSERT(m_hasMoreResourceUpdates);
137 m_stateMachine.beginUpdateMoreResourcesComplete(true);
138 }
139 TRACE_EVENT0("cc", "CCScheduler::vsyncTick"); 132 TRACE_EVENT0("cc", "CCScheduler::vsyncTick");
140
141 m_stateMachine.didEnterVSync(); 133 m_stateMachine.didEnterVSync();
142 processScheduledActions(); 134 processScheduledActions();
143 m_stateMachine.didLeaveVSync(); 135 m_stateMachine.didLeaveVSync();
136
137 // Allow resource updates until next vsync tick.
138 if (m_updateResourcesCompletePending)
139 m_client->scheduledActionUpdateMoreResources(m_frameRateController->next TickTimeIfActivated());
144 } 140 }
145 141
146 void CCScheduler::updateResourcesComplete() 142 void CCScheduler::updateResourcesComplete()
147 { 143 {
148 TRACE_EVENT0("cc", "CCScheduler::updateResourcesComplete"); 144 TRACE_EVENT0("cc", "CCScheduler::updateResourcesComplete");
149 if (m_updateMoreResourcesPending) { 145 m_stateMachine.updateResourcesComplete();
150 m_updateMoreResourcesPending = false; 146 m_updateResourcesCompletePending = false;
151 m_stateMachine.beginUpdateMoreResourcesComplete(false);
152 }
153 m_hasMoreResourceUpdates = false;
154 processScheduledActions(); 147 processScheduledActions();
155 } 148 }
156 149
157 void CCScheduler::processScheduledActions() 150 void CCScheduler::processScheduledActions()
158 { 151 {
159 // Early out so we don't spam TRACE_EVENTS with useless processScheduledActi ons. 152 // Early out so we don't spam TRACE_EVENTS with useless processScheduledActi ons.
160 if (m_stateMachine.nextAction() == CCSchedulerStateMachine::ACTION_NONE) { 153 if (m_stateMachine.nextAction() == CCSchedulerStateMachine::ACTION_NONE) {
161 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); 154 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded());
162 return; 155 return;
163 } 156 }
164 157
165 // This function can re-enter itself. For example, draw may call 158 // This function can re-enter itself. For example, draw may call
166 // setNeedsCommit. Proceeed with caution. 159 // setNeedsCommit. Proceeed with caution.
167 CCSchedulerStateMachine::Action action; 160 CCSchedulerStateMachine::Action action;
168 do { 161 do {
169 action = m_stateMachine.nextAction(); 162 action = m_stateMachine.nextAction();
170 m_stateMachine.updateState(action); 163 m_stateMachine.updateState(action);
171 TRACE_EVENT1("cc", "CCScheduler::processScheduledActions()", "action", a ction); 164 TRACE_EVENT1("cc", "CCScheduler::processScheduledActions()", "action", a ction);
172 165
173 switch (action) { 166 switch (action) {
174 case CCSchedulerStateMachine::ACTION_NONE: 167 case CCSchedulerStateMachine::ACTION_NONE:
175 break; 168 break;
176 case CCSchedulerStateMachine::ACTION_BEGIN_FRAME: 169 case CCSchedulerStateMachine::ACTION_BEGIN_FRAME:
177 m_client->scheduledActionBeginFrame(); 170 m_client->scheduledActionBeginFrame();
178 break; 171 break;
179 case CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES: 172 case CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_RESOURCES:
180 if (m_hasMoreResourceUpdates) { 173 ASSERT(!m_updateResourcesCompletePending);
181 m_client->scheduledActionUpdateMoreResources(m_frameRateControll er->nextTickTimeIfActivated()); 174 m_client->scheduledActionUpdateMoreResources(m_frameRateController-> nextTickTimeIfActivated());
182 m_updateMoreResourcesPending = true; 175 m_updateResourcesCompletePending = true;
183 } else
184 m_stateMachine.beginUpdateMoreResourcesComplete(false);
185 break; 176 break;
186 case CCSchedulerStateMachine::ACTION_COMMIT: 177 case CCSchedulerStateMachine::ACTION_COMMIT:
187 m_client->scheduledActionCommit(); 178 m_client->scheduledActionCommit();
188 break; 179 break;
189 case CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE: { 180 case CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE: {
190 CCScheduledActionDrawAndSwapResult result = m_client->scheduledActio nDrawAndSwapIfPossible(); 181 CCScheduledActionDrawAndSwapResult result = m_client->scheduledActio nDrawAndSwapIfPossible();
191 m_stateMachine.didDrawIfPossibleCompleted(result.didDraw); 182 m_stateMachine.didDrawIfPossibleCompleted(result.didDraw);
192 if (result.didSwap) 183 if (result.didSwap)
193 m_frameRateController->didBeginFrame(); 184 m_frameRateController->didBeginFrame();
194 break; 185 break;
(...skipping 10 matching lines...) Expand all
205 m_client->scheduledActionAcquireLayerTexturesForMainThread(); 196 m_client->scheduledActionAcquireLayerTexturesForMainThread();
206 break; 197 break;
207 } 198 }
208 } while (action != CCSchedulerStateMachine::ACTION_NONE); 199 } while (action != CCSchedulerStateMachine::ACTION_NONE);
209 200
210 // Activate or deactivate the frame rate controller. 201 // Activate or deactivate the frame rate controller.
211 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); 202 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded());
212 } 203 }
213 204
214 } 205 }
OLDNEW
« no previous file with comments | « cc/CCScheduler.h ('k') | cc/CCSchedulerStateMachine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698