OLD | NEW |
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 |
(...skipping 19 matching lines...) Expand all Loading... |
30 m_stateMachine.setCanBeginFrame(can); | 30 m_stateMachine.setCanBeginFrame(can); |
31 processScheduledActions(); | 31 processScheduledActions(); |
32 } | 32 } |
33 | 33 |
34 void CCScheduler::setVisible(bool visible) | 34 void CCScheduler::setVisible(bool visible) |
35 { | 35 { |
36 m_stateMachine.setVisible(visible); | 36 m_stateMachine.setVisible(visible); |
37 processScheduledActions(); | 37 processScheduledActions(); |
38 } | 38 } |
39 | 39 |
| 40 void CCScheduler::setCanDraw(bool canDraw) |
| 41 { |
| 42 m_stateMachine.setCanDraw(canDraw); |
| 43 |
| 44 // Defer processScheduleActions so we don't recurse and commit/draw |
| 45 // multiple frames. We can call processScheduledActions directly |
| 46 // once it is no longer re-entrant. |
| 47 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); |
| 48 } |
| 49 |
40 void CCScheduler::setNeedsCommit() | 50 void CCScheduler::setNeedsCommit() |
41 { | 51 { |
42 m_stateMachine.setNeedsCommit(); | 52 m_stateMachine.setNeedsCommit(); |
43 processScheduledActions(); | 53 processScheduledActions(); |
44 } | 54 } |
45 | 55 |
46 void CCScheduler::setNeedsForcedCommit() | 56 void CCScheduler::setNeedsForcedCommit() |
47 { | 57 { |
48 m_stateMachine.setNeedsForcedCommit(); | 58 m_stateMachine.setNeedsForcedCommit(); |
49 processScheduledActions(); | 59 processScheduledActions(); |
(...skipping 29 matching lines...) Expand all Loading... |
79 TRACE_EVENT0("cc", "CCScheduler::beginFrameAborted"); | 89 TRACE_EVENT0("cc", "CCScheduler::beginFrameAborted"); |
80 m_stateMachine.beginFrameAborted(); | 90 m_stateMachine.beginFrameAborted(); |
81 processScheduledActions(); | 91 processScheduledActions(); |
82 } | 92 } |
83 | 93 |
84 void CCScheduler::setMaxFramesPending(int maxFramesPending) | 94 void CCScheduler::setMaxFramesPending(int maxFramesPending) |
85 { | 95 { |
86 m_frameRateController->setMaxFramesPending(maxFramesPending); | 96 m_frameRateController->setMaxFramesPending(maxFramesPending); |
87 } | 97 } |
88 | 98 |
| 99 void CCScheduler::setSwapBuffersCompleteSupported(bool supported) |
| 100 { |
| 101 m_frameRateController->setSwapBuffersCompleteSupported(supported); |
| 102 } |
| 103 |
89 void CCScheduler::didSwapBuffersComplete() | 104 void CCScheduler::didSwapBuffersComplete() |
90 { | 105 { |
91 TRACE_EVENT0("cc", "CCScheduler::didSwapBuffersComplete"); | 106 TRACE_EVENT0("cc", "CCScheduler::didSwapBuffersComplete"); |
92 m_frameRateController->didFinishFrame(); | 107 m_frameRateController->didFinishFrame(); |
93 } | 108 } |
94 | 109 |
95 void CCScheduler::didLoseContext() | 110 void CCScheduler::didLoseContext() |
96 { | 111 { |
97 TRACE_EVENT0("cc", "CCScheduler::didLoseContext"); | 112 TRACE_EVENT0("cc", "CCScheduler::didLoseContext"); |
98 m_frameRateController->didAbortAllPendingFrames(); | 113 m_frameRateController->didAbortAllPendingFrames(); |
(...skipping 19 matching lines...) Expand all Loading... |
118 m_updateMoreResourcesPending = false; | 133 m_updateMoreResourcesPending = false; |
119 m_stateMachine.beginUpdateMoreResourcesComplete(m_client->hasMoreResourc
eUpdates()); | 134 m_stateMachine.beginUpdateMoreResourcesComplete(m_client->hasMoreResourc
eUpdates()); |
120 } | 135 } |
121 TRACE_EVENT0("cc", "CCScheduler::vsyncTick"); | 136 TRACE_EVENT0("cc", "CCScheduler::vsyncTick"); |
122 | 137 |
123 m_stateMachine.didEnterVSync(); | 138 m_stateMachine.didEnterVSync(); |
124 processScheduledActions(); | 139 processScheduledActions(); |
125 m_stateMachine.didLeaveVSync(); | 140 m_stateMachine.didLeaveVSync(); |
126 } | 141 } |
127 | 142 |
128 CCSchedulerStateMachine::Action CCScheduler::nextAction() | |
129 { | |
130 m_stateMachine.setCanDraw(m_client->canDraw()); | |
131 return m_stateMachine.nextAction(); | |
132 } | |
133 | |
134 void CCScheduler::processScheduledActions() | 143 void CCScheduler::processScheduledActions() |
135 { | 144 { |
136 // Early out so we don't spam TRACE_EVENTS with useless processScheduledActi
ons. | 145 // Early out so we don't spam TRACE_EVENTS with useless processScheduledActi
ons. |
137 if (nextAction() == CCSchedulerStateMachine::ACTION_NONE) { | 146 if (m_stateMachine.nextAction() == CCSchedulerStateMachine::ACTION_NONE) { |
138 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); | 147 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); |
139 return; | 148 return; |
140 } | 149 } |
141 | 150 |
142 // This function can re-enter itself. For example, draw may call | 151 // This function can re-enter itself. For example, draw may call |
143 // setNeedsCommit. Proceeed with caution. | 152 // setNeedsCommit. Proceeed with caution. |
144 CCSchedulerStateMachine::Action action; | 153 CCSchedulerStateMachine::Action action; |
145 do { | 154 do { |
146 action = nextAction(); | 155 action = m_stateMachine.nextAction(); |
147 m_stateMachine.updateState(action); | 156 m_stateMachine.updateState(action); |
148 TRACE_EVENT1("cc", "CCScheduler::processScheduledActions()", "action", a
ction); | 157 TRACE_EVENT1("cc", "CCScheduler::processScheduledActions()", "action", a
ction); |
149 | 158 |
150 switch (action) { | 159 switch (action) { |
151 case CCSchedulerStateMachine::ACTION_NONE: | 160 case CCSchedulerStateMachine::ACTION_NONE: |
152 break; | 161 break; |
153 case CCSchedulerStateMachine::ACTION_BEGIN_FRAME: | 162 case CCSchedulerStateMachine::ACTION_BEGIN_FRAME: |
154 m_client->scheduledActionBeginFrame(); | 163 m_client->scheduledActionBeginFrame(); |
155 break; | 164 break; |
156 case CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES: | 165 case CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES: |
(...skipping 25 matching lines...) Expand all Loading... |
182 m_client->scheduledActionAcquireLayerTexturesForMainThread(); | 191 m_client->scheduledActionAcquireLayerTexturesForMainThread(); |
183 break; | 192 break; |
184 } | 193 } |
185 } while (action != CCSchedulerStateMachine::ACTION_NONE); | 194 } while (action != CCSchedulerStateMachine::ACTION_NONE); |
186 | 195 |
187 // Activate or deactivate the frame rate controller. | 196 // Activate or deactivate the frame rate controller. |
188 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); | 197 m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded()); |
189 } | 198 } |
190 | 199 |
191 } | 200 } |
OLD | NEW |