| 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } | 79 } |
| 80 NOTREACHED(); | 80 NOTREACHED(); |
| 81 return "???"; | 81 return "???"; |
| 82 } | 82 } |
| 83 | 83 |
| 84 const char* SchedulerStateMachine::BeginImplFrameStateToString( | 84 const char* SchedulerStateMachine::BeginImplFrameStateToString( |
| 85 BeginImplFrameState state) { | 85 BeginImplFrameState state) { |
| 86 switch (state) { | 86 switch (state) { |
| 87 case BEGIN_IMPL_FRAME_STATE_IDLE: | 87 case BEGIN_IMPL_FRAME_STATE_IDLE: |
| 88 return "BEGIN_IMPL_FRAME_STATE_IDLE"; | 88 return "BEGIN_IMPL_FRAME_STATE_IDLE"; |
| 89 case BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING: | |
| 90 return "BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING"; | |
| 91 case BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME: | 89 case BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME: |
| 92 return "BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME"; | 90 return "BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME"; |
| 93 case BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE: | 91 case BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE: |
| 94 return "BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE"; | 92 return "BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE"; |
| 95 } | 93 } |
| 96 NOTREACHED(); | 94 NOTREACHED(); |
| 97 return "???"; | 95 return "???"; |
| 98 } | 96 } |
| 99 | 97 |
| 100 const char* SchedulerStateMachine::BeginImplFrameDeadlineModeToString( | 98 const char* SchedulerStateMachine::BeginImplFrameDeadlineModeToString( |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 bool SchedulerStateMachine::ShouldInvalidateOutputSurface() const { | 528 bool SchedulerStateMachine::ShouldInvalidateOutputSurface() const { |
| 531 // Do not invalidate too many times in a frame. | 529 // Do not invalidate too many times in a frame. |
| 532 if (invalidate_output_surface_funnel_) | 530 if (invalidate_output_surface_funnel_) |
| 533 return false; | 531 return false; |
| 534 | 532 |
| 535 // Only the synchronous compositor requires invalidations. | 533 // Only the synchronous compositor requires invalidations. |
| 536 if (!settings_.using_synchronous_renderer_compositor) | 534 if (!settings_.using_synchronous_renderer_compositor) |
| 537 return false; | 535 return false; |
| 538 | 536 |
| 539 // Invalidations are only performed inside a BeginFrame. | 537 // Invalidations are only performed inside a BeginFrame. |
| 540 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) | 538 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME) |
| 541 return false; | 539 return false; |
| 542 | 540 |
| 543 // TODO(sunnyps): needs_prepare_tiles_ is needed here because PrepareTiles is | 541 // TODO(sunnyps): needs_prepare_tiles_ is needed here because PrepareTiles is |
| 544 // called only inside the deadline / draw phase. We could remove this if we | 542 // called only inside the deadline / draw phase. We could remove this if we |
| 545 // allowed PrepareTiles to happen in OnBeginImplFrame. | 543 // allowed PrepareTiles to happen in OnBeginImplFrame. |
| 546 return needs_redraw_ || needs_prepare_tiles_; | 544 return needs_redraw_ || needs_prepare_tiles_; |
| 547 } | 545 } |
| 548 | 546 |
| 549 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { | 547 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { |
| 550 if (ShouldActivatePendingTree()) | 548 if (ShouldActivatePendingTree()) |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 | 851 |
| 854 // If the last commit was aborted because of early out (no updates), we should | 852 // If the last commit was aborted because of early out (no updates), we should |
| 855 // still want a begin frame in case there is a commit coming again. | 853 // still want a begin frame in case there is a commit coming again. |
| 856 if (last_commit_had_no_updates_) | 854 if (last_commit_had_no_updates_) |
| 857 return true; | 855 return true; |
| 858 | 856 |
| 859 return false; | 857 return false; |
| 860 } | 858 } |
| 861 | 859 |
| 862 void SchedulerStateMachine::OnBeginImplFrame() { | 860 void SchedulerStateMachine::OnBeginImplFrame() { |
| 863 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING; | 861 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME; |
| 864 current_frame_number_++; | 862 current_frame_number_++; |
| 865 | 863 |
| 866 last_commit_had_no_updates_ = false; | 864 last_commit_had_no_updates_ = false; |
| 867 did_draw_in_last_frame_ = false; | 865 did_draw_in_last_frame_ = false; |
| 868 did_swap_in_last_frame_ = false; | 866 did_swap_in_last_frame_ = false; |
| 869 needs_one_begin_impl_frame_ = false; | 867 needs_one_begin_impl_frame_ = false; |
| 870 | 868 |
| 871 // Clear funnels for any actions we perform during the frame. | 869 // Clear funnels for any actions we perform during the frame. |
| 872 send_begin_main_frame_funnel_ = false; | 870 send_begin_main_frame_funnel_ = false; |
| 873 invalidate_output_surface_funnel_ = false; | 871 invalidate_output_surface_funnel_ = false; |
| 874 | 872 |
| 875 // "Drain" the PrepareTiles funnel. | 873 // "Drain" the PrepareTiles funnel. |
| 876 if (prepare_tiles_funnel_ > 0) | 874 if (prepare_tiles_funnel_ > 0) |
| 877 prepare_tiles_funnel_--; | 875 prepare_tiles_funnel_--; |
| 878 } | 876 } |
| 879 | 877 |
| 880 void SchedulerStateMachine::OnBeginImplFrameDeadlinePending() { | |
| 881 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME; | |
| 882 } | |
| 883 | |
| 884 void SchedulerStateMachine::OnBeginImplFrameDeadline() { | 878 void SchedulerStateMachine::OnBeginImplFrameDeadline() { |
| 885 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE; | 879 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE; |
| 886 | 880 |
| 887 // Clear funnels for any actions we perform during the deadline. | 881 // Clear funnels for any actions we perform during the deadline. |
| 888 draw_funnel_ = false; | 882 draw_funnel_ = false; |
| 889 | 883 |
| 890 // Allow one PrepareTiles per draw for synchronous compositor. | 884 // Allow one PrepareTiles per draw for synchronous compositor. |
| 891 if (settings_.using_synchronous_renderer_compositor) { | 885 if (settings_.using_synchronous_renderer_compositor) { |
| 892 if (prepare_tiles_funnel_ > 0) | 886 if (prepare_tiles_funnel_ > 0) |
| 893 prepare_tiles_funnel_--; | 887 prepare_tiles_funnel_--; |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1152 case OUTPUT_SURFACE_ACTIVE: | 1146 case OUTPUT_SURFACE_ACTIVE: |
| 1153 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: | 1147 case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: |
| 1154 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: | 1148 case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: |
| 1155 return true; | 1149 return true; |
| 1156 } | 1150 } |
| 1157 NOTREACHED(); | 1151 NOTREACHED(); |
| 1158 return false; | 1152 return false; |
| 1159 } | 1153 } |
| 1160 | 1154 |
| 1161 } // namespace cc | 1155 } // namespace cc |
| OLD | NEW |