Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index d8f9440227d4b858b6190b63fe3baab87aa513c9..391748dd70805cf21f9610b56c716dc8b5c7a1d1 100644 |
--- a/cc/scheduler/scheduler.cc |
+++ b/cc/scheduler/scheduler.cc |
@@ -66,6 +66,11 @@ void Scheduler::Stop() { |
stopped_ = true; |
} |
+void Scheduler::SetNeedsImplSideInvalidation() { |
+ state_machine_.SetNeedsImplSideInvalidation(); |
+ ProcessScheduledActions(); |
+} |
+ |
base::TimeTicks Scheduler::Now() const { |
base::TimeTicks now = base::TimeTicks::Now(); |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"), |
@@ -545,7 +550,8 @@ void Scheduler::OnBeginImplFrameDeadline() { |
void Scheduler::DrawIfPossible() { |
bool drawing_with_new_active_tree = |
- state_machine_.active_tree_needs_first_draw(); |
+ state_machine_.active_tree_needs_first_draw() && |
+ !state_machine_.previous_pending_tree_was_impl_side(); |
brianderson
2017/02/22 19:31:20
Is there any way to avoid setting active_tree_need
Khushal
2017/02/22 20:19:29
I think we would want to set |active_tree_needs_fi
brianderson
2017/02/22 22:58:08
I think overwriting the active tree in this case m
Khushal
2017/02/22 23:20:24
"When a commit comes in while there's still a pend
brianderson
2017/02/22 23:42:33
I see. I completely misunderstood the merge mechan
|
bool main_thread_missed_last_deadline = |
state_machine_.main_thread_missed_last_deadline(); |
compositor_timing_history_->WillDraw(); |
@@ -559,7 +565,8 @@ void Scheduler::DrawIfPossible() { |
void Scheduler::DrawForced() { |
bool drawing_with_new_active_tree = |
- state_machine_.active_tree_needs_first_draw(); |
+ state_machine_.active_tree_needs_first_draw() && |
+ !state_machine_.previous_pending_tree_was_impl_side(); |
bool main_thread_missed_last_deadline = |
state_machine_.main_thread_missed_last_deadline(); |
compositor_timing_history_->WillDraw(); |
@@ -620,6 +627,10 @@ void Scheduler::ProcessScheduledActions() { |
client_->ScheduledActionActivateSyncTree(); |
compositor_timing_history_->DidActivate(); |
break; |
+ case SchedulerStateMachine::ACTION_PERFORM_IMPL_SIDE_INVALIDATION: |
+ state_machine_.WillPerformImplSideInvalidation(); |
+ client_->ScheduledActionPerformImplSideInvalidation(); |
+ break; |
case SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE: |
DrawIfPossible(); |
break; |