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

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

Issue 2339633003: Reland of cc: Remove frame queuing from the scheduler. (Closed)
Patch Set: expire missed frames in renderer only Created 4 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
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/scheduler/scheduler_state_machine.h" 5 #include "cc/scheduler/scheduler_state_machine.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 358
359 // Do not queue too many swaps. 359 // Do not queue too many swaps.
360 if (SwapThrottled()) 360 if (SwapThrottled())
361 return false; 361 return false;
362 362
363 // Except for the cases above, do not draw outside of the BeginImplFrame 363 // Except for the cases above, do not draw outside of the BeginImplFrame
364 // deadline. 364 // deadline.
365 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) 365 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE)
366 return false; 366 return false;
367 367
368 if (wait_for_ready_to_draw_)
369 return false;
370
368 // Only handle forced redraws due to timeouts on the regular deadline. 371 // Only handle forced redraws due to timeouts on the regular deadline.
369 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) 372 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW)
370 return true; 373 return true;
371 374
372 return needs_redraw_; 375 return needs_redraw_;
373 } 376 }
374 377
375 bool SchedulerStateMachine::ShouldActivatePendingTree() const { 378 bool SchedulerStateMachine::ShouldActivatePendingTree() const {
376 // There is nothing to activate. 379 // There is nothing to activate.
377 if (!has_pending_tree_) 380 if (!has_pending_tree_)
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 bool SchedulerStateMachine::ShouldCommit() const { 478 bool SchedulerStateMachine::ShouldCommit() const {
476 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT) 479 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT)
477 return false; 480 return false;
478 481
479 // We must not finish the commit until the pending tree is free. 482 // We must not finish the commit until the pending tree is free.
480 if (has_pending_tree_) { 483 if (has_pending_tree_) {
481 DCHECK(settings_.main_frame_before_activation_enabled); 484 DCHECK(settings_.main_frame_before_activation_enabled);
482 return false; 485 return false;
483 } 486 }
484 487
488 // Active tree resources might still be in use until the Display draws.
489 if (settings_.commit_to_active_tree && SwapThrottled())
490 return false;
491
485 // If we only have an active tree, it is incorrect to replace it 492 // If we only have an active tree, it is incorrect to replace it
486 // before we've drawn it. 493 // before we've drawn it.
487 DCHECK(!settings_.commit_to_active_tree || !active_tree_needs_first_draw_); 494 DCHECK(!settings_.commit_to_active_tree || !active_tree_needs_first_draw_);
488 495
489 return true; 496 return true;
490 } 497 }
491 498
492 bool SchedulerStateMachine::ShouldPrepareTiles() const { 499 bool SchedulerStateMachine::ShouldPrepareTiles() const {
493 // PrepareTiles only really needs to be called immediately after commit 500 // PrepareTiles only really needs to be called immediately after commit
494 // and then periodically after that. Use a funnel to make sure we average 501 // and then periodically after that. Use a funnel to make sure we average
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 } 1025 }
1019 1026
1020 void SchedulerStateMachine::SetNeedsOneBeginImplFrame() { 1027 void SchedulerStateMachine::SetNeedsOneBeginImplFrame() {
1021 needs_one_begin_impl_frame_ = true; 1028 needs_one_begin_impl_frame_ = true;
1022 } 1029 }
1023 1030
1024 void SchedulerStateMachine::NotifyReadyToCommit() { 1031 void SchedulerStateMachine::NotifyReadyToCommit() {
1025 DCHECK_EQ(begin_main_frame_state_, BEGIN_MAIN_FRAME_STATE_STARTED) 1032 DCHECK_EQ(begin_main_frame_state_, BEGIN_MAIN_FRAME_STATE_STARTED)
1026 << AsValue()->ToString(); 1033 << AsValue()->ToString();
1027 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT; 1034 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT;
1028 // In commit_to_active_tree mode, commit should happen right after
1029 // BeginFrame, meaning when this function is called, next action should be
1030 // commit.
1031 if (settings_.commit_to_active_tree)
1032 DCHECK(ShouldCommit());
1033 } 1035 }
1034 1036
1035 void SchedulerStateMachine::BeginMainFrameAborted(CommitEarlyOutReason reason) { 1037 void SchedulerStateMachine::BeginMainFrameAborted(CommitEarlyOutReason reason) {
1036 DCHECK_EQ(begin_main_frame_state_, BEGIN_MAIN_FRAME_STATE_STARTED); 1038 DCHECK_EQ(begin_main_frame_state_, BEGIN_MAIN_FRAME_STATE_STARTED);
1037 1039
1038 // If the main thread aborted, it doesn't matter if the main thread missed 1040 // If the main thread aborted, it doesn't matter if the main thread missed
1039 // the last deadline since it didn't have an update anyway. 1041 // the last deadline since it didn't have an update anyway.
1040 main_thread_missed_last_deadline_ = false; 1042 main_thread_missed_last_deadline_ = false;
1041 1043
1042 switch (reason) { 1044 switch (reason) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 case OUTPUT_SURFACE_ACTIVE: 1108 case OUTPUT_SURFACE_ACTIVE:
1107 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: 1109 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT:
1108 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: 1110 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION:
1109 return true; 1111 return true;
1110 } 1112 }
1111 NOTREACHED(); 1113 NOTREACHED();
1112 return false; 1114 return false;
1113 } 1115 }
1114 1116
1115 } // namespace cc 1117 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698