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

Side by Side Diff: cc/scheduler/scheduler_state_machine.h

Issue 1131633003: cc: Use multiple PrepareTiles approaches Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 7 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
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/scheduler/scheduler_state_machine.cc » ('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 #ifndef CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_ 5 #ifndef CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
6 #define CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_ 6 #define CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, 60 BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME,
61 BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, 61 BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE,
62 }; 62 };
63 static const char* BeginImplFrameStateToString(BeginImplFrameState state); 63 static const char* BeginImplFrameStateToString(BeginImplFrameState state);
64 64
65 enum BeginImplFrameDeadlineMode { 65 enum BeginImplFrameDeadlineMode {
66 BEGIN_IMPL_FRAME_DEADLINE_MODE_NONE, 66 BEGIN_IMPL_FRAME_DEADLINE_MODE_NONE,
67 BEGIN_IMPL_FRAME_DEADLINE_MODE_IMMEDIATE, 67 BEGIN_IMPL_FRAME_DEADLINE_MODE_IMMEDIATE,
68 BEGIN_IMPL_FRAME_DEADLINE_MODE_REGULAR, 68 BEGIN_IMPL_FRAME_DEADLINE_MODE_REGULAR,
69 BEGIN_IMPL_FRAME_DEADLINE_MODE_LATE, 69 BEGIN_IMPL_FRAME_DEADLINE_MODE_LATE,
70 BEGIN_IMPL_FRAME_DEADLINE_MODE_TRY_TO_AVOID_CHECKERBOARD,
70 BEGIN_IMPL_FRAME_DEADLINE_MODE_BLOCKED_ON_READY_TO_DRAW, 71 BEGIN_IMPL_FRAME_DEADLINE_MODE_BLOCKED_ON_READY_TO_DRAW,
71 }; 72 };
72 static const char* BeginImplFrameDeadlineModeToString( 73 static const char* BeginImplFrameDeadlineModeToString(
73 BeginImplFrameDeadlineMode mode); 74 BeginImplFrameDeadlineMode mode);
74 75
75 enum CommitState { 76 enum CommitState {
76 COMMIT_STATE_IDLE, 77 COMMIT_STATE_IDLE,
77 COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 78 COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
78 COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED, 79 COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED,
79 COMMIT_STATE_READY_TO_COMMIT, 80 COMMIT_STATE_READY_TO_COMMIT,
80 COMMIT_STATE_WAITING_FOR_ACTIVATION, 81 COMMIT_STATE_WAITING_FOR_ACTIVATION,
81 COMMIT_STATE_WAITING_FOR_DRAW, 82 COMMIT_STATE_WAITING_FOR_DRAW,
82 }; 83 };
83 static const char* CommitStateToString(CommitState state); 84 static const char* CommitStateToString(CommitState state);
84 85
85 enum ForcedRedrawOnTimeoutState { 86 enum PrepareTilesApproach {
86 FORCED_REDRAW_STATE_IDLE, 87 // PREPARE_TILES_APPROACH_PRIORITIZE_LATENCY calls PrepareTiles after
87 FORCED_REDRAW_STATE_WAITING_FOR_COMMIT, 88 // every commit and after draws if there wasn't a commit for that frame.
88 FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION, 89 // NotifyReadyToActivate and NotifyReadyToDraw are NOT trustworthy, but
89 FORCED_REDRAW_STATE_WAITING_FOR_DRAW, 90 // can be used as hints.
91 // The scheduler only calls DrawAndSwapIfPossible with this approach.
92 // We transition to PREPARE_TILES_APPROACH_ACCURATE_ACTIVE_WORK whenever
93 // DrawAndSwapIfPossible aborts due to checkerboards.
94 PREPARE_TILES_APPROACH_PRIORITIZE_LATENCY,
95 // PREPARE_TILES_APPROACH_ACCURATE_ACTIVE_WORK only calls PrepareTiles at
96 // the start of a frame so new active tree work starts ASAP, but the
97 // pending tree work doesn't.
98 // NotifyReadyToActivate and NotifyReadyToDraw are trustworthy.
99 // The scheduler only calls DrawAndSwapForced with this approach.
100 // We transition to PREPARE_TILES_APPROACH_PRIORITIZE_LATENCY upon
101 // either going idle or recovering main-thread latency.
102 PREPARE_TILES_APPROACH_ACCURATE_ACTIVE_WORK,
90 }; 103 };
91 static const char* ForcedRedrawOnTimeoutStateToString( 104 static const char* PrepareTilesApproachToString(
92 ForcedRedrawOnTimeoutState state); 105 PrepareTilesApproach approach);
106
107 enum PrepareTilesReason {
108 PREPARE_TILES_NOT_NEEDED,
109 PREPARE_TILES_REQUESTED,
110 PREPARE_TILES_NEEDED_FOR_COMMIT,
111 PREPARE_TILES_NEEDED_FOR_ABORTED_DRAW,
112 PREPARE_TILES_NEEDED_TO_EVICT_TILES,
113 };
114 static const char* PrepareTilesReasonToString(PrepareTilesReason reason);
93 115
94 bool CommitPending() const { 116 bool CommitPending() const {
95 return commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 117 return commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
96 commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED || 118 commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED ||
97 commit_state_ == COMMIT_STATE_READY_TO_COMMIT; 119 commit_state_ == COMMIT_STATE_READY_TO_COMMIT;
98 } 120 }
99 CommitState commit_state() const { return commit_state_; } 121 CommitState commit_state() const { return commit_state_; }
100 122
101 bool RedrawPending() const { return needs_redraw_; } 123 bool RedrawPending() const { return needs_redraw_; }
102 bool PrepareTilesPending() const { return needs_prepare_tiles_; } 124 bool PrepareTilesPending() const {
125 return prepare_tiles_reason_ != PREPARE_TILES_NOT_NEEDED;
126 }
103 127
104 enum Action { 128 enum Action {
105 ACTION_NONE, 129 ACTION_NONE,
106 ACTION_ANIMATE, 130 ACTION_ANIMATE,
107 ACTION_SEND_BEGIN_MAIN_FRAME, 131 ACTION_SEND_BEGIN_MAIN_FRAME,
108 ACTION_COMMIT, 132 ACTION_COMMIT,
109 ACTION_ACTIVATE_SYNC_TREE, 133 ACTION_ACTIVATE_SYNC_TREE,
110 ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 134 ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
111 ACTION_DRAW_AND_SWAP_FORCED, 135 ACTION_DRAW_AND_SWAP_FORCED,
112 ACTION_DRAW_AND_SWAP_ABORT, 136 ACTION_DRAW_AND_SWAP_ABORT,
113 ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 137 ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
114 ACTION_PREPARE_TILES, 138 ACTION_PREPARE_TILES,
115 ACTION_INVALIDATE_OUTPUT_SURFACE, 139 ACTION_INVALIDATE_OUTPUT_SURFACE,
116 }; 140 };
117 static const char* ActionToString(Action action); 141 static const char* ActionToString(Action action);
118 142
119 scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsValue() const; 143 scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsValue() const;
120 void AsValueInto(base::trace_event::TracedValue* dict) const; 144 void AsValueInto(base::trace_event::TracedValue* dict) const;
121 145
122 Action NextAction() const; 146 Action NextAction() const;
123 void UpdateState(Action action); 147 void WillAction(Action action);
148 void DidAction(Action action);
124 149
125 // Indicates whether the impl thread needs a BeginImplFrame callback in order 150 // Indicates whether the impl thread needs a BeginImplFrame callback in order
126 // to make progress. 151 // to make progress.
127 bool BeginFrameNeeded() const; 152 bool BeginFrameNeeded() const;
128 153
154 // Indicates that the Scheduler should retry the BeginImplFrame or the
155 // deadline because the draw aborted due to checkerboards.
156 bool retry_begin_impl_frame() const { return retry_begin_impl_frame_; }
157 bool retry_begin_impl_frame_deadline() const {
158 return retry_begin_impl_frame_deadline_;
159 }
160 void ResetRetryBeginImplFrame() {
161 retry_begin_impl_frame_ = false;
162 retry_begin_impl_frame_deadline_ = false;
163 }
164
165 // This reflects the actual state of the BeginFrameSource, not just whether
166 // the SchedulerStateMachine wants BeginFrames at this instance.
167 void NotifyBeginFrameSourceActive(bool active);
168
129 // Indicates that the system has entered and left a BeginImplFrame callback. 169 // Indicates that the system has entered and left a BeginImplFrame callback.
130 // The scheduler will not draw more than once in a given BeginImplFrame 170 // The scheduler will not draw more than once in a given BeginImplFrame
131 // callback nor send more than one BeginMainFrame message. 171 // callback nor send more than one BeginMainFrame message.
132 void OnBeginImplFrame(); 172 void OnBeginImplFrame();
133 void OnBeginImplFrameDeadlinePending(); 173 void OnBeginImplFrameDeadlinePending();
134 // Indicates that the scheduler has entered the draw phase. The scheduler 174 // Indicates that the scheduler has entered the draw phase. The scheduler
135 // will not draw more than once in a single draw phase. 175 // will not draw more than once in a single draw phase.
136 // TODO(sunnyps): Rename OnBeginImplFrameDeadline to OnDraw or similar. 176 // TODO(sunnyps): Rename OnBeginImplFrameDeadline to OnDraw or similar.
137 void OnBeginImplFrameDeadline(); 177 void OnBeginImplFrameDeadline();
138 void OnBeginImplFrameIdle(); 178 void OnBeginImplFrameIdle();
(...skipping 13 matching lines...) Expand all
152 // Indicates that a redraw is required, either due to the impl tree changing 192 // Indicates that a redraw is required, either due to the impl tree changing
153 // or the screen being damaged and simply needing redisplay. 193 // or the screen being damaged and simply needing redisplay.
154 void SetNeedsRedraw(); 194 void SetNeedsRedraw();
155 bool needs_redraw() const { return needs_redraw_; } 195 bool needs_redraw() const { return needs_redraw_; }
156 196
157 void SetNeedsAnimate(); 197 void SetNeedsAnimate();
158 bool needs_animate() const { return needs_animate_; } 198 bool needs_animate() const { return needs_animate_; }
159 199
160 // Indicates that prepare-tiles is required. This guarantees another 200 // Indicates that prepare-tiles is required. This guarantees another
161 // PrepareTiles will occur shortly (even if no redraw is required). 201 // PrepareTiles will occur shortly (even if no redraw is required).
162 void SetNeedsPrepareTiles(); 202 void SetNeedsPrepareTiles(bool for_commit);
163 203
164 // Make deadline wait for ReadyToDraw signal. 204 // Make deadline wait for ReadyToDraw signal.
165 void SetWaitForReadyToDraw(); 205 void SetWaitForReadyToDraw();
166 206
167 // Sets how many swaps can be pending to the OutputSurface. 207 // Sets how many swaps can be pending to the OutputSurface.
168 void SetMaxSwapsPending(int max); 208 void SetMaxSwapsPending(int max);
169 209
170 // If the scheduler attempted to draw and swap, this provides feedback 210 // If the scheduler attempted to draw and swap, this provides feedback
171 // regarding whether or not the swap actually occured. We might skip the 211 // regarding whether or not the swap actually occured. We might skip the
172 // swap when there is not damage, for example. 212 // swap when there is not damage, for example.
173 void DidSwapBuffers(); 213 void DidSwapBuffers();
174 214
175 // Indicates whether a redraw is required because we are currently rendering 215 // Indicates whether a redraw is required because we are currently rendering
176 // with a low resolution or checkerboarded tile. 216 // with a low resolution or checkerboarded tile.
177 void SetSwapUsedIncompleteTile(bool used_incomplete_tile); 217 void SetSwapUsedIncompleteTile(bool used_incomplete_tile);
178 218
179 // Notification from the OutputSurface that a swap has been consumed. 219 // Notification from the OutputSurface that a swap has been consumed.
180 void DidSwapBuffersComplete(); 220 void DidSwapBuffersComplete();
181 221
182 // Indicates whether to prioritize impl thread latency (i.e., animation 222 // Indicates whether to prioritize impl thread latency (i.e., animation
183 // smoothness) over new content activation. 223 // smoothness) over new content activation.
184 void SetImplLatencyTakesPriority(bool impl_latency_takes_priority); 224 void SetImplLatencyTakesPriority(bool impl_latency_takes_priority);
185 bool impl_latency_takes_priority() const { 225 bool impl_latency_takes_priority() const {
186 return impl_latency_takes_priority_; 226 return impl_latency_takes_priority_;
187 } 227 }
188 228
189 // Indicates whether ACTION_DRAW_AND_SWAP_IF_POSSIBLE drew to the screen. 229 // Indicates whether a draw request succeeded or not.
190 void DidDrawIfPossibleCompleted(DrawResult result); 230 void SetDrawResult(DrawResult result);
191 231
192 // Indicates that a new commit flow needs to be performed, either to pull 232 // Indicates that a new commit flow needs to be performed, either to pull
193 // updates from the main thread to the impl, or to push deltas from the impl 233 // updates from the main thread to the impl, or to push deltas from the impl
194 // thread to main. 234 // thread to main.
195 void SetNeedsCommit(); 235 void SetNeedsCommit();
196 236
197 // Call this only in response to receiving an ACTION_SEND_BEGIN_MAIN_FRAME 237 // Call this only in response to receiving an ACTION_SEND_BEGIN_MAIN_FRAME
198 // from NextAction. 238 // from NextAction.
199 // Indicates that all painting is complete. 239 // Indicates that all painting is complete.
200 void NotifyReadyToCommit(); 240 void NotifyReadyToCommit();
(...skipping 16 matching lines...) Expand all
217 257
218 // Indicates that scheduled BeginMainFrame is started. 258 // Indicates that scheduled BeginMainFrame is started.
219 void NotifyBeginMainFrameStarted(); 259 void NotifyBeginMainFrameStarted();
220 260
221 // Indicates that the pending tree is ready for activation. 261 // Indicates that the pending tree is ready for activation.
222 void NotifyReadyToActivate(); 262 void NotifyReadyToActivate();
223 263
224 // Indicates the active tree's visible tiles are ready to be drawn. 264 // Indicates the active tree's visible tiles are ready to be drawn.
225 void NotifyReadyToDraw(); 265 void NotifyReadyToDraw();
226 266
267 // Indicates we shouldn't draw the active tree until we won't checkerboard.
268 void SetRequiresHighResToDraw(bool required);
269
227 bool has_pending_tree() const { return has_pending_tree_; } 270 bool has_pending_tree() const { return has_pending_tree_; }
228 bool active_tree_needs_first_draw() const { 271 bool active_tree_needs_first_draw() const {
229 return active_tree_needs_first_draw_; 272 return active_tree_needs_first_draw_;
230 } 273 }
231 274
232 void DidPrepareTiles();
233 void DidLoseOutputSurface(); 275 void DidLoseOutputSurface();
234 void DidCreateAndInitializeOutputSurface(); 276 void DidCreateAndInitializeOutputSurface();
235 bool HasInitializedOutputSurface() const; 277 bool HasInitializedOutputSurface() const;
236 278
237 // True if we need to abort draws to make forward progress. 279 // True if we need to abort draws to make forward progress.
238 bool PendingDrawsShouldBeAborted() const; 280 bool PendingDrawsShouldBeAborted() const;
239 281
240 void SetContinuousPainting(bool continuous_painting) { 282 void SetContinuousPainting(bool continuous_painting) {
241 continuous_painting_ = continuous_painting; 283 continuous_painting_ = continuous_painting;
242 } 284 }
(...skipping 30 matching lines...) Expand all
273 315
274 bool ShouldAnimate() const; 316 bool ShouldAnimate() const;
275 bool ShouldBeginOutputSurfaceCreation() const; 317 bool ShouldBeginOutputSurfaceCreation() const;
276 bool ShouldDraw() const; 318 bool ShouldDraw() const;
277 bool ShouldActivatePendingTree() const; 319 bool ShouldActivatePendingTree() const;
278 bool ShouldSendBeginMainFrame() const; 320 bool ShouldSendBeginMainFrame() const;
279 bool ShouldCommit() const; 321 bool ShouldCommit() const;
280 bool ShouldPrepareTiles() const; 322 bool ShouldPrepareTiles() const;
281 bool ShouldInvalidateOutputSurface() const; 323 bool ShouldInvalidateOutputSurface() const;
282 324
283 void UpdateStateOnAnimate(); 325 void WillCommit();
284 void UpdateStateOnSendBeginMainFrame(); 326
285 void UpdateStateOnCommit(bool commit_had_no_updates); 327 void WillAnimate();
286 void UpdateStateOnActivation(); 328 void WillSendBeginMainFrame();
287 void UpdateStateOnDraw(bool did_request_swap); 329 void DidCommit(bool commit_had_no_updates);
288 void UpdateStateOnBeginOutputSurfaceCreation(); 330 void WillActivateSyncTree();
289 void UpdateStateOnPrepareTiles(); 331 void DidDraw(bool did_request_swap);
290 void UpdateStateOnInvalidateOutputSurface(); 332 void WillBeginOutputSurfaceCreation();
333 void DidPrepareTiles();
334 void WillInvalidateOutputSurface();
291 335
292 const SchedulerSettings settings_; 336 const SchedulerSettings settings_;
293 337
294 OutputSurfaceState output_surface_state_; 338 OutputSurfaceState output_surface_state_;
295 BeginImplFrameState begin_impl_frame_state_; 339 BeginImplFrameState begin_impl_frame_state_;
296 CommitState commit_state_; 340 CommitState commit_state_;
297 ForcedRedrawOnTimeoutState forced_redraw_state_; 341 PrepareTilesApproach prepare_tiles_approach_;
342 PrepareTilesReason prepare_tiles_reason_;
298 343
299 // These are used for tracing only. 344 // These are used for tracing only.
300 int commit_count_; 345 int commit_count_;
301 int current_frame_number_; 346 int current_frame_number_;
302 int last_frame_number_animate_performed_; 347 int last_frame_number_animate_performed_;
303 int last_frame_number_swap_performed_; 348 int last_frame_number_swap_performed_;
304 int last_frame_number_swap_requested_; 349 int last_frame_number_swap_requested_;
305 int last_frame_number_begin_main_frame_sent_; 350 int last_frame_number_begin_main_frame_sent_;
306 int last_frame_number_invalidate_output_surface_performed_; 351 int last_frame_number_invalidate_output_surface_performed_;
307 352
308 // These are used to ensure that an action only happens once per frame, 353 // These are used to ensure that an action only happens once per frame,
309 // deadline, etc. 354 // deadline, etc.
310 bool animate_funnel_; 355 bool animate_funnel_;
311 bool request_swap_funnel_; 356 bool request_swap_funnel_;
312 bool send_begin_main_frame_funnel_; 357 bool send_begin_main_frame_funnel_;
313 bool invalidate_output_surface_funnel_; 358 bool invalidate_output_surface_funnel_;
359 // TODO(brianderson): Update the comment below.
314 // prepare_tiles_funnel_ is "filled" each time PrepareTiles is called 360 // prepare_tiles_funnel_ is "filled" each time PrepareTiles is called
315 // and "drained" on each BeginImplFrame. If the funnel gets too full, 361 // and "drained" on each BeginImplFrame. If the funnel gets too full,
316 // we start throttling ACTION_PREPARE_TILES such that we average one 362 // we start throttling ACTION_PREPARE_TILES such that we average one
317 // PrepareTiles per BeginImplFrame. 363 // PrepareTiles per BeginImplFrame.
318 int prepare_tiles_funnel_; 364 int prepare_tiles_funnel_;
319 365
320 int consecutive_checkerboard_animations_;
321 int max_pending_swaps_; 366 int max_pending_swaps_;
322 int pending_swaps_; 367 int pending_swaps_;
323 bool needs_redraw_; 368 bool needs_redraw_;
369 DrawResult last_draw_result_;
370 bool retry_begin_impl_frame_;
371 bool retry_begin_impl_frame_deadline_;
324 bool needs_animate_; 372 bool needs_animate_;
325 bool needs_prepare_tiles_;
326 bool needs_commit_; 373 bool needs_commit_;
327 bool visible_; 374 bool visible_;
328 bool can_start_; 375 bool can_start_;
329 bool can_draw_; 376 bool can_draw_;
330 bool has_pending_tree_; 377 bool has_pending_tree_;
331 bool pending_tree_is_ready_for_activation_; 378 bool pending_tree_is_ready_for_activation_;
379 bool requires_high_res_to_draw_;
332 bool active_tree_needs_first_draw_; 380 bool active_tree_needs_first_draw_;
381 bool active_tree_ready_to_draw_;
333 bool did_create_and_initialize_first_output_surface_; 382 bool did_create_and_initialize_first_output_surface_;
334 bool impl_latency_takes_priority_; 383 bool impl_latency_takes_priority_;
335 bool skip_next_begin_main_frame_to_reduce_latency_; 384 bool skip_next_begin_main_frame_to_reduce_latency_;
336 bool skip_begin_main_frame_to_reduce_latency_; 385 bool skip_begin_main_frame_to_reduce_latency_;
337 bool continuous_painting_; 386 bool continuous_painting_;
338 bool children_need_begin_frames_; 387 bool children_need_begin_frames_;
339 bool defer_commits_; 388 bool defer_commits_;
340 bool video_needs_begin_frames_; 389 bool video_needs_begin_frames_;
341 bool last_commit_had_no_updates_; 390 bool last_commit_had_no_updates_;
342 bool wait_for_active_tree_ready_to_draw_; 391 bool wait_for_active_tree_ready_to_draw_;
343 bool did_request_swap_in_last_frame_; 392 bool did_request_swap_in_last_frame_;
344 bool did_perform_swap_in_last_draw_; 393 bool did_perform_swap_in_last_draw_;
345 394
346 private: 395 private:
347 DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine); 396 DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine);
348 }; 397 };
349 398
350 } // namespace cc 399 } // namespace cc
351 400
352 #endif // CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_ 401 #endif // CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/scheduler/scheduler_state_machine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698