Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2417)

Unified Diff: cc/scheduler/scheduler_state_machine.cc

Issue 1133673004: cc: Heuristic for Renderer latency recovery (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..20c50753b48de08a81a1de631336b2bc2154e458 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,13 @@ bool SchedulerStateMachine::ProactiveBeginFrameWanted() const {
return false;
}
+void SchedulerStateMachine::DidSkipBeginImplFrameToReduceLatency() {
+ // If there are no swap ack's pending to update swaps_are_likely_high_latency
+ // later, reset it now.
+ if (!pending_swaps_)
+ 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 +859,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 +895,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 +1005,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 ||
sunnyps 2015/05/12 00:36:25 I don't understand what the frame state has to do
brianderson 2015/05/12 19:25:17 Regarding frame state: The code is hard to follow.
+ swap_throttled_in_last_deadline_;
}
void SchedulerStateMachine::SetImplLatencyTakesPriority(

Powered by Google App Engine
This is Rietveld 408576698