diff options
Diffstat (limited to 'cc/scheduler/scheduler_state_machine.cc')
-rw-r--r-- | cc/scheduler/scheduler_state_machine.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc index 0fd0f57..4d9e5e9 100644 --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc @@ -26,6 +26,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) last_frame_number_swap_performed_(-1), last_frame_number_begin_main_frame_sent_(-1), last_frame_number_update_visible_tiles_was_called_(-1), + last_frame_number_manage_tiles_called_(-1), consecutive_failed_draws_(0), needs_redraw_(false), needs_manage_tiles_(false), @@ -493,6 +494,12 @@ bool SchedulerStateMachine::ShouldCommit() const { } bool SchedulerStateMachine::ShouldManageTiles() const { + // ManageTiles only really needs to be called immediately after commit + // and then periodically after that. Limiting to once per frame prevents + // post-commit and post-draw ManageTiles on the same frame. + if (last_frame_number_manage_tiles_called_ == current_frame_number_) + return false; + // Limiting to once per-frame is not enough, since we only want to // manage tiles _after_ draws. Polling for draw triggers and // begin-frame are mutually exclusive, so we limit to these two cases. @@ -1018,6 +1025,11 @@ void SchedulerStateMachine::BeginMainFrameAborted(bool did_handle) { } } +void SchedulerStateMachine::DidManageTiles() { + needs_manage_tiles_ = false; + last_frame_number_manage_tiles_called_ = current_frame_number_; +} + void SchedulerStateMachine::DidLoseOutputSurface() { if (output_surface_state_ == OUTPUT_SURFACE_LOST || output_surface_state_ == OUTPUT_SURFACE_CREATING) |