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

Unified Diff: cc/scheduler/scheduler_state_machine.cc

Issue 1014993002: [exp] cc: Introduce cc::CompositorMutator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 189387cf12856f1fc348c605a976d1422aaf705c..ca943f3c0af7be3ce90174b0f835d989de3884e9 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -23,6 +23,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings)
commit_count_(0),
current_frame_number_(0),
last_frame_number_animate_performed_(-1),
+ last_frame_number_custom_mutate_performed_(-1),
last_frame_number_swap_performed_(-1),
last_frame_number_swap_requested_(-1),
last_frame_number_begin_main_frame_sent_(-1),
@@ -126,6 +127,8 @@ const char* SchedulerStateMachine::ActionToString(Action action) {
return "ACTION_NONE";
case ACTION_ANIMATE:
return "ACTION_ANIMATE";
+ case ACTION_CUSTOM_MUTATE:
+ return "ACTION_CUSTOM_MUTATE";
case ACTION_SEND_BEGIN_MAIN_FRAME:
return "ACTION_SEND_BEGIN_MAIN_FRAME";
case ACTION_COMMIT:
@@ -199,6 +202,8 @@ void SchedulerStateMachine::AsValueInto(base::trace_event::TracedValue* state,
state->SetInteger("last_frame_number_animate_performed",
last_frame_number_animate_performed_);
+ state->SetInteger("last_frame_number_custom_mutate_performed",
+ last_frame_number_custom_mutate_performed_);
state->SetInteger("last_frame_number_swap_performed",
last_frame_number_swap_performed_);
state->SetInteger("last_frame_number_swap_requested",
@@ -256,6 +261,10 @@ bool SchedulerStateMachine::HasAnimatedThisFrame() const {
return last_frame_number_animate_performed_ == current_frame_number_;
}
+bool SchedulerStateMachine::HasCustomMutatedThisFrame() const {
+ return last_frame_number_custom_mutate_performed_ == current_frame_number_;
+}
+
bool SchedulerStateMachine::HasSentBeginMainFrameThisFrame() const {
return current_frame_number_ ==
last_frame_number_begin_main_frame_sent_;
@@ -405,6 +414,21 @@ bool SchedulerStateMachine::ShouldAnimate() const {
return needs_redraw_ || needs_animate_;
}
+bool SchedulerStateMachine::ShouldCustomMutate() const {
+ // Don't mutate if we are waiting on the first commit after a surface.
+ if (output_surface_state_ != OUTPUT_SURFACE_ACTIVE)
+ return false;
+
+ if (HasCustomMutatedThisFrame() || !needs_custom_mutate_)
+ return false;
+
+ if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING &&
+ begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE)
+ return false;
+
+ return true;
+}
+
bool SchedulerStateMachine::CouldSendBeginMainFrame() const {
if (!needs_commit_)
return false;
@@ -511,6 +535,8 @@ SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const {
return ACTION_COMMIT;
if (ShouldAnimate())
return ACTION_ANIMATE;
+ if (ShouldCustomMutate())
+ return ACTION_CUSTOM_MUTATE;
if (ShouldDraw()) {
if (PendingDrawsShouldBeAborted())
return ACTION_DRAW_AND_SWAP_ABORT;
@@ -546,6 +572,11 @@ void SchedulerStateMachine::UpdateState(Action action) {
SetNeedsRedraw();
return;
+ case ACTION_CUSTOM_MUTATE:
+ last_frame_number_custom_mutate_performed_ = current_frame_number_;
+ needs_custom_mutate_ = false;
+ return;
+
case ACTION_SEND_BEGIN_MAIN_FRAME:
DCHECK(!has_pending_tree_ ||
settings_.main_frame_before_activation_enabled);
@@ -962,6 +993,10 @@ void SchedulerStateMachine::SetNeedsAnimate() {
needs_animate_ = true;
}
+void SchedulerStateMachine::SetNeedsCustomMutate() {
+ needs_custom_mutate_ = true;
+}
+
void SchedulerStateMachine::SetNeedsPrepareTiles() {
if (!needs_prepare_tiles_) {
TRACE_EVENT0("cc", "SchedulerStateMachine::SetNeedsPrepareTiles");

Powered by Google App Engine
This is Rietveld 408576698