Chromium Code Reviews| 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 "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 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 606 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; | 606 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; |
| 607 } | 607 } |
| 608 } | 608 } |
| 609 | 609 |
| 610 // Update state if there's no updates heading for the active tree, but we need | 610 // Update state if there's no updates heading for the active tree, but we need |
| 611 // to do a forced draw. | 611 // to do a forced draw. |
| 612 if (commit_has_no_updates && | 612 if (commit_has_no_updates && |
| 613 forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) { | 613 forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) { |
| 614 DCHECK(!has_pending_tree_); | 614 DCHECK(!has_pending_tree_); |
| 615 needs_redraw_ = true; | 615 needs_redraw_ = true; |
| 616 active_tree_needs_first_draw_ = true; | |
|
sunnyps
2016/02/20 00:27:00
Why was this removed?
brianderson
2016/02/20 00:49:45
Added it back in for this patch.
| |
| 617 } | 616 } |
| 618 | 617 |
| 619 // This post-commit work is common to both completed and aborted commits. | 618 // This post-commit work is common to both completed and aborted commits. |
| 620 pending_tree_is_ready_for_activation_ = false; | 619 pending_tree_is_ready_for_activation_ = false; |
| 621 | 620 |
| 622 last_commit_had_no_updates_ = commit_has_no_updates; | 621 last_commit_had_no_updates_ = commit_has_no_updates; |
| 623 } | 622 } |
| 624 | 623 |
| 625 void SchedulerStateMachine::WillActivate() { | 624 void SchedulerStateMachine::WillActivate() { |
| 626 if (begin_main_frame_state_ == | 625 if (begin_main_frame_state_ == |
| 627 BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION) { | 626 BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION) { |
| 628 begin_main_frame_state_ = settings_.commit_to_active_tree | 627 begin_main_frame_state_ = settings_.commit_to_active_tree |
| 629 ? BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW | 628 ? BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW |
| 630 : BEGIN_MAIN_FRAME_STATE_IDLE; | 629 : BEGIN_MAIN_FRAME_STATE_IDLE; |
| 631 } | 630 } |
| 632 | 631 |
| 633 if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION) | 632 if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION) |
| 634 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; | 633 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; |
| 635 | 634 |
| 636 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION) | 635 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION) |
| 637 forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_DRAW; | 636 forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_DRAW; |
| 638 | 637 |
| 639 has_pending_tree_ = false; | 638 has_pending_tree_ = false; |
| 640 pending_tree_is_ready_for_activation_ = false; | 639 pending_tree_is_ready_for_activation_ = false; |
| 641 active_tree_needs_first_draw_ = true; | 640 active_tree_needs_first_draw_ = true; |
| 642 needs_redraw_ = true; | 641 needs_redraw_ = true; |
| 643 } | 642 } |
| 644 | 643 |
| 645 void SchedulerStateMachine::WillDrawInternal() { | 644 void SchedulerStateMachine::WillDrawInternal() { |
| 645 // If a new active tree is pending after the one we are about to draw, | |
| 646 // the main thread is in a high latency mode. | |
| 647 // main_thread_missed_last_deadline_ is here in addition to | |
| 648 // OnBeginImplFrameIdle for cases where the scheduler aborts draws outside | |
| 649 // of the deadline. | |
| 650 main_thread_missed_last_deadline_ = CommitPending() || has_pending_tree_; | |
| 651 | |
| 646 // We need to reset needs_redraw_ before we draw since the | 652 // We need to reset needs_redraw_ before we draw since the |
| 647 // draw itself might request another draw. | 653 // draw itself might request another draw. |
| 648 needs_redraw_ = false; | 654 needs_redraw_ = false; |
| 649 | 655 |
| 650 draw_funnel_ = true; | 656 draw_funnel_ = true; |
| 651 active_tree_needs_first_draw_ = false; | 657 active_tree_needs_first_draw_ = false; |
| 652 did_draw_in_last_frame_ = true; | 658 did_draw_in_last_frame_ = true; |
| 653 last_frame_number_draw_performed_ = current_frame_number_; | 659 last_frame_number_draw_performed_ = current_frame_number_; |
| 654 | 660 |
| 655 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) | 661 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1136 case OUTPUT_SURFACE_ACTIVE: | 1142 case OUTPUT_SURFACE_ACTIVE: |
| 1137 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: | 1143 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: |
| 1138 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: | 1144 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: |
| 1139 return true; | 1145 return true; |
| 1140 } | 1146 } |
| 1141 NOTREACHED(); | 1147 NOTREACHED(); |
| 1142 return false; | 1148 return false; |
| 1143 } | 1149 } |
| 1144 | 1150 |
| 1145 } // namespace cc | 1151 } // namespace cc |
| OLD | NEW |