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

Unified Diff: cc/scheduler/scheduler_state_machine.cc

Issue 1229573004: cc: Simplify and rename MainThreadIsInHighLatency logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ignoreFirstDraws4
Patch Set: Update naming and conventions Created 5 years, 5 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
« no previous file with comments | « cc/scheduler/scheduler_state_machine.h ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/scheduler_state_machine.cc
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index ad27328ec4bd2e967426b4eeade1bb3e6fecfa15..f7e4b24bf5aface96a3237157683a72a04e57ebf 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -47,6 +47,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings)
active_tree_needs_first_draw_(false),
did_create_and_initialize_first_output_surface_(false),
impl_latency_takes_priority_(false),
+ main_thread_missed_last_deadline_(false),
skip_next_begin_main_frame_to_reduce_latency_(false),
continuous_painting_(false),
children_need_begin_frames_(false),
@@ -237,8 +238,8 @@ void SchedulerStateMachine::AsValueInto(
did_create_and_initialize_first_output_surface_);
state->SetBoolean("impl_latency_takes_priority",
impl_latency_takes_priority_);
- state->SetBoolean("main_thread_is_in_high_latency_mode",
- MainThreadIsInHighLatencyMode());
+ state->SetBoolean("main_thread_missed_last_deadline",
+ main_thread_missed_last_deadline_);
state->SetBoolean("skip_next_begin_main_frame_to_reduce_latency",
skip_next_begin_main_frame_to_reduce_latency_);
state->SetBoolean("continuous_painting", continuous_painting_);
@@ -879,6 +880,11 @@ void SchedulerStateMachine::OnBeginImplFrameIdle() {
begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_IDLE;
skip_next_begin_main_frame_to_reduce_latency_ = false;
+
+ // If a new or undrawn active tree is pending after the deadline,
+ // then the main thread is in a high latency mode.
+ main_thread_missed_last_deadline_ =
+ CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_;
}
SchedulerStateMachine::BeginImplFrameDeadlineMode
@@ -939,52 +945,23 @@ bool SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately()
return false;
}
-bool SchedulerStateMachine::MainThreadIsInHighLatencyMode() const {
- // If a commit is pending before the previous commit has been drawn, we
- // are definitely in a high latency mode.
- if (CommitPending() && (active_tree_needs_first_draw_ || has_pending_tree_))
- return true;
-
- // If we just sent a BeginMainFrame and haven't hit the deadline yet, the main
- // thread is in a low latency mode.
- if (send_begin_main_frame_funnel_ &&
- (begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING ||
- begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME))
- return false;
-
- // If there's a commit in progress it must either be from the previous frame
- // or it started after the impl thread's deadline. In either case the main
- // thread is in high latency mode.
- if (CommitPending())
- return true;
-
- // Similarly, if there's a pending tree the main thread is in high latency
- // mode, because either
- // it's from the previous frame
- // or
- // we're currently drawing the active tree and the pending tree will thus
- // only be drawn in the next frame.
- if (has_pending_tree_)
- return true;
-
- if (begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) {
- // Even if there's a new active tree to draw at the deadline or we've just
- // swapped it, it may have been triggered by a previous BeginImplFrame, in
- // which case the main thread is in a high latency mode.
- return (active_tree_needs_first_draw_ || did_perform_swap_in_last_draw_) &&
- !send_begin_main_frame_funnel_;
- }
-
- // If the active tree needs its first draw in any other state, we know the
- // main thread is in a high latency mode.
- return active_tree_needs_first_draw_;
+bool SchedulerStateMachine::main_thread_missed_last_deadline() const {
+ return main_thread_missed_last_deadline_;
}
bool SchedulerStateMachine::SwapThrottled() const {
return pending_swaps_ >= max_pending_swaps_;
}
-void SchedulerStateMachine::SetVisible(bool visible) { visible_ = visible; }
+void SchedulerStateMachine::SetVisible(bool visible) {
+ if (visible_ == visible)
+ return;
+
+ if (visible)
+ main_thread_missed_last_deadline_ = false;
+
+ visible_ = visible;
+}
void SchedulerStateMachine::SetCanDraw(bool can_draw) { can_draw_ = can_draw; }
@@ -1145,6 +1122,7 @@ void SchedulerStateMachine::DidCreateAndInitializeOutputSurface() {
did_create_and_initialize_first_output_surface_ = true;
pending_swaps_ = 0;
swaps_with_current_output_surface_ = 0;
+ main_thread_missed_last_deadline_ = false;
sunnyps 2015/07/13 20:03:09 It looks like we need to set main_thread_missed_la
}
void SchedulerStateMachine::NotifyBeginMainFrameStarted() {
« no previous file with comments | « cc/scheduler/scheduler_state_machine.h ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698