| Index: cc/scheduler/scheduler_state_machine.cc
|
| diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
|
| index 2fbeca2d8a992d87cd118a09a78eeb5db8b61d3b..04bc61f666d1a4f03da2eb56923f3c1d677359b7 100644
|
| --- a/cc/scheduler/scheduler_state_machine.cc
|
| +++ b/cc/scheduler/scheduler_state_machine.cc
|
| @@ -35,6 +35,8 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings)
|
| consecutive_checkerboard_animations_(0),
|
| max_pending_swaps_(1),
|
| pending_swaps_(0),
|
| + swaps_are_likely_high_latency_(false),
|
| + swap_throttled_in_last_deadline_(false),
|
| needs_redraw_(false),
|
| needs_animate_(false),
|
| needs_prepare_tiles_(false),
|
| @@ -818,6 +820,10 @@ bool SchedulerStateMachine::ProactiveBeginFrameWanted() const {
|
| return false;
|
| }
|
|
|
| +void SchedulerStateMachine::DidSkipBeginImplFrameToReduceLatency() {
|
| + swaps_are_likely_high_latency_ = false;
|
| +}
|
| +
|
| void SchedulerStateMachine::OnBeginImplFrame() {
|
| begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING;
|
| current_frame_number_++;
|
| @@ -850,6 +856,10 @@ void SchedulerStateMachine::OnBeginImplFrameDeadline() {
|
|
|
| // Clear funnels for any actions we perform during the deadline.
|
| request_swap_funnel_ = false;
|
| +
|
| + swap_throttled_in_last_deadline_ = pending_swaps_ >= max_pending_swaps_;
|
| + swaps_are_likely_high_latency_ =
|
| + swaps_are_likely_high_latency_ || swap_throttled_in_last_deadline_;
|
| }
|
|
|
| void SchedulerStateMachine::OnBeginImplFrameIdle() {
|
| @@ -882,7 +892,6 @@ SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const {
|
|
|
| bool SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately()
|
| const {
|
| - // TODO(brianderson): This should take into account multiple commit sources.
|
| if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME)
|
| return false;
|
|
|
| @@ -993,6 +1002,10 @@ void SchedulerStateMachine::DidSwapBuffers() {
|
| void SchedulerStateMachine::DidSwapBuffersComplete() {
|
| DCHECK_GT(pending_swaps_, 0);
|
| pending_swaps_--;
|
| +
|
| + swaps_are_likely_high_latency_ =
|
| + begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME ||
|
| + swap_throttled_in_last_deadline_;
|
| }
|
|
|
| void SchedulerStateMachine::SetImplLatencyTakesPriority(
|
|
|