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

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

Issue 2659123004: cc: Add scheduler support for invalidating content on impl thread. (Closed)
Patch Set: only inside deadline Created 3 years, 10 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
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 <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 } 108 }
109 109
110 bool RedrawPending() const { return needs_redraw_; } 110 bool RedrawPending() const { return needs_redraw_; }
111 bool PrepareTilesPending() const { return needs_prepare_tiles_; } 111 bool PrepareTilesPending() const { return needs_prepare_tiles_; }
112 112
113 enum Action { 113 enum Action {
114 ACTION_NONE, 114 ACTION_NONE,
115 ACTION_SEND_BEGIN_MAIN_FRAME, 115 ACTION_SEND_BEGIN_MAIN_FRAME,
116 ACTION_COMMIT, 116 ACTION_COMMIT,
117 ACTION_ACTIVATE_SYNC_TREE, 117 ACTION_ACTIVATE_SYNC_TREE,
118 ACTION_PERFORM_IMPL_SIDE_INVALIDATION,
118 ACTION_DRAW_IF_POSSIBLE, 119 ACTION_DRAW_IF_POSSIBLE,
119 ACTION_DRAW_FORCED, 120 ACTION_DRAW_FORCED,
120 ACTION_DRAW_ABORT, 121 ACTION_DRAW_ABORT,
121 ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION, 122 ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION,
122 ACTION_PREPARE_TILES, 123 ACTION_PREPARE_TILES,
123 ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK, 124 ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK,
124 }; 125 };
125 static const char* ActionToString(Action action); 126 static const char* ActionToString(Action action);
126 127
127 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> AsValue() const; 128 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> AsValue() const;
128 void AsValueInto(base::trace_event::TracedValue* dict) const; 129 void AsValueInto(base::trace_event::TracedValue* dict) const;
129 130
130 Action NextAction() const; 131 Action NextAction() const;
131 void WillSendBeginMainFrame(); 132 void WillSendBeginMainFrame();
132 void WillCommit(bool commit_had_no_updates); 133 void WillCommit(bool commit_had_no_updates);
133 void WillActivate(); 134 void WillActivate();
134 void WillDraw(); 135 void WillDraw();
135 void WillBeginCompositorFrameSinkCreation(); 136 void WillBeginCompositorFrameSinkCreation();
136 void WillPrepareTiles(); 137 void WillPrepareTiles();
137 void WillInvalidateCompositorFrameSink(); 138 void WillInvalidateCompositorFrameSink();
139 void WillPerformImplSideInvalidation();
138 140
139 void DidDraw(DrawResult draw_result); 141 void DidDraw(DrawResult draw_result);
140 142
141 void AbortDraw(); 143 void AbortDraw();
142 144
143 // Indicates whether the impl thread needs a BeginImplFrame callback in order 145 // Indicates whether the impl thread needs a BeginImplFrame callback in order
144 // to make progress. 146 // to make progress.
145 bool BeginFrameNeeded() const; 147 bool BeginFrameNeeded() const;
146 148
147 // Indicates that the system has entered and left a BeginImplFrame callback. 149 // Indicates that the system has entered and left a BeginImplFrame callback.
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 244
243 // Indicates that scheduled BeginMainFrame is started. 245 // Indicates that scheduled BeginMainFrame is started.
244 void NotifyBeginMainFrameStarted(); 246 void NotifyBeginMainFrameStarted();
245 247
246 // Indicates that the pending tree is ready for activation. 248 // Indicates that the pending tree is ready for activation.
247 void NotifyReadyToActivate(); 249 void NotifyReadyToActivate();
248 250
249 // Indicates the active tree's visible tiles are ready to be drawn. 251 // Indicates the active tree's visible tiles are ready to be drawn.
250 void NotifyReadyToDraw(); 252 void NotifyReadyToDraw();
251 253
254 void SetNeedsImplSideInvalidation();
255
252 bool has_pending_tree() const { return has_pending_tree_; } 256 bool has_pending_tree() const { return has_pending_tree_; }
253 bool active_tree_needs_first_draw() const { 257 bool active_tree_needs_first_draw() const {
254 return active_tree_needs_first_draw_; 258 return active_tree_needs_first_draw_;
255 } 259 }
256 260
257 void DidPrepareTiles(); 261 void DidPrepareTiles();
258 void DidLoseCompositorFrameSink(); 262 void DidLoseCompositorFrameSink();
259 void DidCreateAndInitializeCompositorFrameSink(); 263 void DidCreateAndInitializeCompositorFrameSink();
260 bool HasInitializedCompositorFrameSink() const; 264 bool HasInitializedCompositorFrameSink() const;
261 265
262 // True if we need to abort draws to make forward progress. 266 // True if we need to abort draws to make forward progress.
263 bool PendingDrawsShouldBeAborted() const; 267 bool PendingDrawsShouldBeAborted() const;
264 268
265 bool CouldSendBeginMainFrame() const; 269 bool CouldSendBeginMainFrame() const;
266 270
267 void SetDeferCommits(bool defer_commits); 271 void SetDeferCommits(bool defer_commits);
268 272
269 void SetVideoNeedsBeginFrames(bool video_needs_begin_frames); 273 void SetVideoNeedsBeginFrames(bool video_needs_begin_frames);
270 bool video_needs_begin_frames() const { return video_needs_begin_frames_; } 274 bool video_needs_begin_frames() const { return video_needs_begin_frames_; }
271 275
272 bool did_submit_in_last_frame() const { return did_submit_in_last_frame_; } 276 bool did_submit_in_last_frame() const { return did_submit_in_last_frame_; }
273 277
278 bool needs_impl_side_invalidation() const {
279 return needs_impl_side_invalidation_;
280 }
281 bool previous_pending_tree_was_impl_side() const {
282 return previous_pending_tree_was_impl_side_;
283 }
284
274 protected: 285 protected:
275 bool BeginFrameRequiredForAction() const; 286 bool BeginFrameRequiredForAction() const;
276 bool BeginFrameNeededForVideo() const; 287 bool BeginFrameNeededForVideo() const;
277 bool ProactiveBeginFrameWanted() const; 288 bool ProactiveBeginFrameWanted() const;
278 289
290 bool ShouldPerformImplSideInvalidation() const;
291 bool CouldCreatePendingTree() const;
292
279 bool ShouldTriggerBeginImplFrameDeadlineImmediately() const; 293 bool ShouldTriggerBeginImplFrameDeadlineImmediately() const;
280 294
281 // True if we need to force activations to make forward progress. 295 // True if we need to force activations to make forward progress.
282 // TODO(sunnyps): Rename this to ShouldAbortCurrentFrame or similar. 296 // TODO(sunnyps): Rename this to ShouldAbortCurrentFrame or similar.
283 bool PendingActivationsShouldBeForced() const; 297 bool PendingActivationsShouldBeForced() const;
284 298
285 bool ShouldBeginCompositorFrameSinkCreation() const; 299 bool ShouldBeginCompositorFrameSinkCreation() const;
286 bool ShouldDraw() const; 300 bool ShouldDraw() const;
287 bool ShouldActivatePendingTree() const; 301 bool ShouldActivatePendingTree() const;
288 bool ShouldSendBeginMainFrame() const; 302 bool ShouldSendBeginMainFrame() const;
289 bool ShouldCommit() const; 303 bool ShouldCommit() const;
290 bool ShouldPrepareTiles() const; 304 bool ShouldPrepareTiles() const;
291 bool ShouldInvalidateCompositorFrameSink() const; 305 bool ShouldInvalidateCompositorFrameSink() const;
292 306
293 void WillDrawInternal(); 307 void WillDrawInternal();
308 void WillPerformImplSideInvalidationInternal();
294 void DidDrawInternal(DrawResult draw_result); 309 void DidDrawInternal(DrawResult draw_result);
295 310
296 const SchedulerSettings settings_; 311 const SchedulerSettings settings_;
297 312
298 CompositorFrameSinkState compositor_frame_sink_state_; 313 CompositorFrameSinkState compositor_frame_sink_state_;
299 BeginImplFrameState begin_impl_frame_state_; 314 BeginImplFrameState begin_impl_frame_state_;
300 BeginMainFrameState begin_main_frame_state_; 315 BeginMainFrameState begin_main_frame_state_;
301 ForcedRedrawOnTimeoutState forced_redraw_state_; 316 ForcedRedrawOnTimeoutState forced_redraw_state_;
302 317
303 // These are used for tracing only. 318 // These are used for tracing only.
304 int commit_count_; 319 int commit_count_;
305 int current_frame_number_; 320 int current_frame_number_;
306 int last_frame_number_submit_performed_; 321 int last_frame_number_submit_performed_;
307 int last_frame_number_draw_performed_; 322 int last_frame_number_draw_performed_;
308 int last_frame_number_begin_main_frame_sent_; 323 int last_frame_number_begin_main_frame_sent_;
309 int last_frame_number_invalidate_compositor_frame_sink_performed_; 324 int last_frame_number_invalidate_compositor_frame_sink_performed_;
310 325
311 // These are used to ensure that an action only happens once per frame, 326 // These are used to ensure that an action only happens once per frame,
312 // deadline, etc. 327 // deadline, etc.
313 bool draw_funnel_; 328 bool draw_funnel_;
314 bool send_begin_main_frame_funnel_; 329 bool send_begin_main_frame_funnel_;
315 bool invalidate_compositor_frame_sink_funnel_; 330 bool invalidate_compositor_frame_sink_funnel_;
331 bool impl_side_invalidation_funnel_;
316 // prepare_tiles_funnel_ is "filled" each time PrepareTiles is called 332 // prepare_tiles_funnel_ is "filled" each time PrepareTiles is called
317 // and "drained" on each BeginImplFrame. If the funnel gets too full, 333 // and "drained" on each BeginImplFrame. If the funnel gets too full,
318 // we start throttling ACTION_PREPARE_TILES such that we average one 334 // we start throttling ACTION_PREPARE_TILES such that we average one
319 // PrepareTiles per BeginImplFrame. 335 // PrepareTiles per BeginImplFrame.
320 int prepare_tiles_funnel_; 336 int prepare_tiles_funnel_;
321 337
322 int consecutive_checkerboard_animations_; 338 int consecutive_checkerboard_animations_;
323 int pending_submit_frames_; 339 int pending_submit_frames_;
324 int submit_frames_with_current_compositor_frame_sink_; 340 int submit_frames_with_current_compositor_frame_sink_;
325 bool needs_redraw_; 341 bool needs_redraw_;
(...skipping 12 matching lines...) Expand all
338 ScrollHandlerState scroll_handler_state_; 354 ScrollHandlerState scroll_handler_state_;
339 bool critical_begin_main_frame_to_activate_is_fast_; 355 bool critical_begin_main_frame_to_activate_is_fast_;
340 bool main_thread_missed_last_deadline_; 356 bool main_thread_missed_last_deadline_;
341 bool skip_next_begin_main_frame_to_reduce_latency_; 357 bool skip_next_begin_main_frame_to_reduce_latency_;
342 bool defer_commits_; 358 bool defer_commits_;
343 bool video_needs_begin_frames_; 359 bool video_needs_begin_frames_;
344 bool last_commit_had_no_updates_; 360 bool last_commit_had_no_updates_;
345 bool wait_for_ready_to_draw_; 361 bool wait_for_ready_to_draw_;
346 bool did_draw_in_last_frame_; 362 bool did_draw_in_last_frame_;
347 bool did_submit_in_last_frame_; 363 bool did_submit_in_last_frame_;
364 bool needs_impl_side_invalidation_;
365
366 bool previous_pending_tree_was_impl_side_;
Khushal 2017/02/22 18:56:41 Added this after I ran into a DCHECK when trying t
367 bool current_pending_tree_is_impl_side_;
348 368
349 private: 369 private:
350 DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine); 370 DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine);
351 }; 371 };
352 372
353 } // namespace cc 373 } // namespace cc
354 374
355 #endif // CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_ 375 #endif // CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698