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( |