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

Side by Side Diff: cc/trees/thread_proxy.cc

Issue 595973002: Moving background animation ticking from LayerTreeHostImpl into the Scheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scheduler-timesource-refactor
Patch Set: Small fixes. Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/thread_proxy.h" 5 #include "cc/trees/thread_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 &completion, 169 &completion,
170 visible)); 170 visible));
171 completion.Wait(); 171 completion.Wait();
172 } 172 }
173 173
174 void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion, 174 void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion,
175 bool visible) { 175 bool visible) {
176 TRACE_EVENT0("cc", "ThreadProxy::SetVisibleOnImplThread"); 176 TRACE_EVENT0("cc", "ThreadProxy::SetVisibleOnImplThread");
177 impl().layer_tree_host_impl->SetVisible(visible); 177 impl().layer_tree_host_impl->SetVisible(visible);
178 impl().scheduler->SetVisible(visible); 178 impl().scheduler->SetVisible(visible);
179 UpdateBackgroundAnimateTicking();
180 completion->Signal(); 179 completion->Signal();
181 } 180 }
182 181
183 void ThreadProxy::UpdateBackgroundAnimateTicking() {
184 bool should_background_tick =
185 !impl().scheduler->WillDrawIfNeeded() &&
186 impl().layer_tree_host_impl->active_tree()->root_layer();
187 impl().layer_tree_host_impl->UpdateBackgroundAnimateTicking(
188 should_background_tick);
189 }
190
191 void ThreadProxy::DidLoseOutputSurface() { 182 void ThreadProxy::DidLoseOutputSurface() {
192 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurface"); 183 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurface");
193 DCHECK(IsMainThread()); 184 DCHECK(IsMainThread());
194 layer_tree_host()->DidLoseOutputSurface(); 185 layer_tree_host()->DidLoseOutputSurface();
195 186
196 { 187 {
197 DebugScopedSetMainThreadBlocked main_thread_blocked(this); 188 DebugScopedSetMainThreadBlocked main_thread_blocked(this);
198 189
199 // Return lost resources to their owners immediately. 190 // Return lost resources to their owners immediately.
200 BlockingTaskRunner::CapturePostTasks blocked( 191 BlockingTaskRunner::CapturePostTasks blocked(
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 342
352 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) { 343 void ThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) {
353 impl().layer_tree_host_impl->WillBeginImplFrame(args); 344 impl().layer_tree_host_impl->WillBeginImplFrame(args);
354 } 345 }
355 346
356 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) { 347 void ThreadProxy::OnCanDrawStateChanged(bool can_draw) {
357 TRACE_EVENT1( 348 TRACE_EVENT1(
358 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw); 349 "cc", "ThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw);
359 DCHECK(IsImplThread()); 350 DCHECK(IsImplThread());
360 impl().scheduler->SetCanDraw(can_draw); 351 impl().scheduler->SetCanDraw(can_draw);
361 UpdateBackgroundAnimateTicking();
362 } 352 }
363 353
364 void ThreadProxy::NotifyReadyToActivate() { 354 void ThreadProxy::NotifyReadyToActivate() {
365 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate"); 355 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate");
366 impl().scheduler->NotifyReadyToActivate(); 356 impl().scheduler->NotifyReadyToActivate();
367 } 357 }
368 358
369 void ThreadProxy::SetNeedsCommitOnImplThread() { 359 void ThreadProxy::SetNeedsCommitOnImplThread() {
370 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread"); 360 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread");
371 DCHECK(IsImplThread()); 361 DCHECK(IsImplThread());
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 if (did_handle) 910 if (did_handle)
921 SetInputThrottledUntilCommitOnImplThread(false); 911 SetInputThrottledUntilCommitOnImplThread(false);
922 impl().layer_tree_host_impl->BeginMainFrameAborted(did_handle); 912 impl().layer_tree_host_impl->BeginMainFrameAborted(did_handle);
923 impl().scheduler->BeginMainFrameAborted(did_handle); 913 impl().scheduler->BeginMainFrameAborted(did_handle);
924 } 914 }
925 915
926 void ThreadProxy::ScheduledActionAnimate() { 916 void ThreadProxy::ScheduledActionAnimate() {
927 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate"); 917 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate");
928 DCHECK(IsImplThread()); 918 DCHECK(IsImplThread());
929 919
920 // Don't animate if there is no root layer.
921 // TODO(mithro): Both Animate and UpdateAnimationState already have a
922 // "!active_tree_->root_layer()" check?
923 if (!impl().layer_tree_host_impl->active_tree()->root_layer()) {
924 return;
925 }
926
930 impl().animation_time = 927 impl().animation_time =
931 impl().layer_tree_host_impl->CurrentBeginFrameArgs().frame_time; 928 impl().layer_tree_host_impl->CurrentBeginFrameArgs().frame_time;
932 impl().layer_tree_host_impl->Animate(impl().animation_time); 929 impl().layer_tree_host_impl->Animate(impl().animation_time);
930
931 // If animations are not visible, update the state now as
932 // ScheduledActionDrawAndSwapIfPossible will never be called.
933 if (!impl().layer_tree_host_impl->AnimationsAreVisible()) {
934 impl().layer_tree_host_impl->UpdateAnimationState(true);
935 }
933 } 936 }
934 937
935 void ThreadProxy::ScheduledActionCommit() { 938 void ThreadProxy::ScheduledActionCommit() {
936 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionCommit"); 939 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionCommit");
937 DCHECK(IsImplThread()); 940 DCHECK(IsImplThread());
938 DCHECK(IsMainThreadBlocked()); 941 DCHECK(IsMainThreadBlocked());
939 DCHECK(impl().commit_completion_event); 942 DCHECK(impl().commit_completion_event);
940 DCHECK(impl().current_resource_update_controller); 943 DCHECK(impl().current_resource_update_controller);
941 944
942 // Complete all remaining texture updates. 945 // Complete all remaining texture updates.
(...skipping 23 matching lines...) Expand all
966 impl().commit_completion_event->Signal(); 969 impl().commit_completion_event->Signal();
967 impl().commit_completion_event = NULL; 970 impl().commit_completion_event = NULL;
968 } 971 }
969 972
970 // Delay this step until afer the main thread has been released as it's 973 // Delay this step until afer the main thread has been released as it's
971 // often a good bit of work to update the tree and prepare the new frame. 974 // often a good bit of work to update the tree and prepare the new frame.
972 impl().layer_tree_host_impl->CommitComplete(); 975 impl().layer_tree_host_impl->CommitComplete();
973 976
974 SetInputThrottledUntilCommitOnImplThread(false); 977 SetInputThrottledUntilCommitOnImplThread(false);
975 978
976 UpdateBackgroundAnimateTicking();
977
978 impl().next_frame_is_newly_committed_frame = true; 979 impl().next_frame_is_newly_committed_frame = true;
979 980
980 impl().timing_history.DidCommit(); 981 impl().timing_history.DidCommit();
981 } 982 }
982 983
983 void ThreadProxy::ScheduledActionUpdateVisibleTiles() { 984 void ThreadProxy::ScheduledActionUpdateVisibleTiles() {
984 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionUpdateVisibleTiles"); 985 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionUpdateVisibleTiles");
985 DCHECK(IsImplThread()); 986 DCHECK(IsImplThread());
986 impl().layer_tree_host_impl->UpdateVisibleTiles(); 987 impl().layer_tree_host_impl->UpdateVisibleTiles();
987 } 988 }
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 DCHECK(IsImplThread()); 1346 DCHECK(IsImplThread());
1346 1347
1347 if (impl().completion_event_for_commit_held_on_tree_activation) { 1348 if (impl().completion_event_for_commit_held_on_tree_activation) {
1348 TRACE_EVENT_INSTANT0( 1349 TRACE_EVENT_INSTANT0(
1349 "cc", "ReleaseCommitbyActivation", TRACE_EVENT_SCOPE_THREAD); 1350 "cc", "ReleaseCommitbyActivation", TRACE_EVENT_SCOPE_THREAD);
1350 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting); 1351 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting);
1351 impl().completion_event_for_commit_held_on_tree_activation->Signal(); 1352 impl().completion_event_for_commit_held_on_tree_activation->Signal();
1352 impl().completion_event_for_commit_held_on_tree_activation = NULL; 1353 impl().completion_event_for_commit_held_on_tree_activation = NULL;
1353 } 1354 }
1354 1355
1355 UpdateBackgroundAnimateTicking();
1356
1357 impl().timing_history.DidActivateSyncTree(); 1356 impl().timing_history.DidActivateSyncTree();
1358 } 1357 }
1359 1358
1360 void ThreadProxy::DidManageTiles() { 1359 void ThreadProxy::DidManageTiles() {
1361 DCHECK(IsImplThread()); 1360 DCHECK(IsImplThread());
1362 impl().scheduler->DidManageTiles(); 1361 impl().scheduler->DidManageTiles();
1363 } 1362 }
1364 1363
1365 } // namespace cc 1364 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698