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

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

Issue 654203007: cc: Delete non-impl-side-painting animation freezing logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 ThreadProxy* proxy, 100 ThreadProxy* proxy,
101 int layer_tree_host_id, 101 int layer_tree_host_id,
102 RenderingStatsInstrumentation* rendering_stats_instrumentation) 102 RenderingStatsInstrumentation* rendering_stats_instrumentation)
103 : layer_tree_host_id(layer_tree_host_id), 103 : layer_tree_host_id(layer_tree_host_id),
104 contents_texture_manager(NULL), 104 contents_texture_manager(NULL),
105 commit_completion_event(NULL), 105 commit_completion_event(NULL),
106 completion_event_for_commit_held_on_tree_activation(NULL), 106 completion_event_for_commit_held_on_tree_activation(NULL),
107 next_frame_is_newly_committed_frame(false), 107 next_frame_is_newly_committed_frame(false),
108 inside_draw(false), 108 inside_draw(false),
109 input_throttled_until_commit(false), 109 input_throttled_until_commit(false),
110 animations_frozen_until_next_draw(false),
111 did_commit_after_animating(false), 110 did_commit_after_animating(false),
112 smoothness_priority_expiration_notifier( 111 smoothness_priority_expiration_notifier(
113 proxy->ImplThreadTaskRunner(), 112 proxy->ImplThreadTaskRunner(),
114 base::Bind(&ThreadProxy::RenewTreePriority, base::Unretained(proxy)), 113 base::Bind(&ThreadProxy::RenewTreePriority, base::Unretained(proxy)),
115 base::TimeDelta::FromMilliseconds( 114 base::TimeDelta::FromMilliseconds(
116 kSmoothnessTakesPriorityExpirationDelay * 1000)), 115 kSmoothnessTakesPriorityExpirationDelay * 1000)),
117 timing_history(rendering_stats_instrumentation), 116 timing_history(rendering_stats_instrumentation),
118 weak_factory(proxy) { 117 weak_factory(proxy) {
119 } 118 }
120 119
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 UpdateBackgroundAnimateTicking(); 180 UpdateBackgroundAnimateTicking();
182 completion->Signal(); 181 completion->Signal();
183 } 182 }
184 183
185 void ThreadProxy::UpdateBackgroundAnimateTicking() { 184 void ThreadProxy::UpdateBackgroundAnimateTicking() {
186 bool should_background_tick = 185 bool should_background_tick =
187 !impl().scheduler->WillDrawIfNeeded() && 186 !impl().scheduler->WillDrawIfNeeded() &&
188 impl().layer_tree_host_impl->active_tree()->root_layer(); 187 impl().layer_tree_host_impl->active_tree()->root_layer();
189 impl().layer_tree_host_impl->UpdateBackgroundAnimateTicking( 188 impl().layer_tree_host_impl->UpdateBackgroundAnimateTicking(
190 should_background_tick); 189 should_background_tick);
191 if (should_background_tick)
192 impl().animations_frozen_until_next_draw = false;
193 } 190 }
194 191
195 void ThreadProxy::DidLoseOutputSurface() { 192 void ThreadProxy::DidLoseOutputSurface() {
196 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurface"); 193 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurface");
197 DCHECK(IsMainThread()); 194 DCHECK(IsMainThread());
198 layer_tree_host()->DidLoseOutputSurface(); 195 layer_tree_host()->DidLoseOutputSurface();
199 196
200 { 197 {
201 DebugScopedSetMainThreadBlocked main_thread_blocked(this); 198 DebugScopedSetMainThreadBlocked main_thread_blocked(this);
202 199
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 main().commit_request_sent_to_impl_thread = true; 757 main().commit_request_sent_to_impl_thread = true;
761 758
762 layer_tree_host()->ApplyScrollAndScale( 759 layer_tree_host()->ApplyScrollAndScale(
763 begin_main_frame_state->scroll_info.get()); 760 begin_main_frame_state->scroll_info.get());
764 761
765 layer_tree_host()->WillBeginMainFrame(); 762 layer_tree_host()->WillBeginMainFrame();
766 763
767 layer_tree_host()->BeginMainFrame(begin_main_frame_state->begin_frame_args); 764 layer_tree_host()->BeginMainFrame(begin_main_frame_state->begin_frame_args);
768 layer_tree_host()->AnimateLayers( 765 layer_tree_host()->AnimateLayers(
769 begin_main_frame_state->begin_frame_args.frame_time); 766 begin_main_frame_state->begin_frame_args.frame_time);
770 blocked_main().last_monotonic_frame_begin_time =
771 begin_main_frame_state->begin_frame_args.frame_time;
772 767
773 // Unlink any backings that the impl thread has evicted, so that we know to 768 // Unlink any backings that the impl thread has evicted, so that we know to
774 // re-paint them in UpdateLayers. 769 // re-paint them in UpdateLayers.
775 if (blocked_main().contents_texture_manager()) { 770 if (blocked_main().contents_texture_manager()) {
776 blocked_main().contents_texture_manager()->UnlinkAndClearEvictedBackings(); 771 blocked_main().contents_texture_manager()->UnlinkAndClearEvictedBackings();
777 772
778 blocked_main().contents_texture_manager()->SetMaxMemoryLimitBytes( 773 blocked_main().contents_texture_manager()->SetMaxMemoryLimitBytes(
779 begin_main_frame_state->memory_allocation_limit_bytes); 774 begin_main_frame_state->memory_allocation_limit_bytes);
780 blocked_main().contents_texture_manager()->SetExternalPriorityCutoff( 775 blocked_main().contents_texture_manager()->SetExternalPriorityCutoff(
781 begin_main_frame_state->memory_allocation_priority_cutoff); 776 begin_main_frame_state->memory_allocation_priority_cutoff);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 if (did_handle) 927 if (did_handle)
933 SetInputThrottledUntilCommitOnImplThread(false); 928 SetInputThrottledUntilCommitOnImplThread(false);
934 impl().layer_tree_host_impl->BeginMainFrameAborted(did_handle); 929 impl().layer_tree_host_impl->BeginMainFrameAborted(did_handle);
935 impl().scheduler->BeginMainFrameAborted(did_handle); 930 impl().scheduler->BeginMainFrameAborted(did_handle);
936 } 931 }
937 932
938 void ThreadProxy::ScheduledActionAnimate() { 933 void ThreadProxy::ScheduledActionAnimate() {
939 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate"); 934 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate");
940 DCHECK(IsImplThread()); 935 DCHECK(IsImplThread());
941 936
942 if (!impl().animations_frozen_until_next_draw) { 937 impl().animation_time =
943 impl().animation_time = 938 impl().layer_tree_host_impl->CurrentBeginFrameArgs().frame_time;
944 impl().layer_tree_host_impl->CurrentBeginFrameArgs().frame_time;
945 }
946 impl().layer_tree_host_impl->Animate(impl().animation_time); 939 impl().layer_tree_host_impl->Animate(impl().animation_time);
947 impl().did_commit_after_animating = false; 940 impl().did_commit_after_animating = false;
948 } 941 }
949 942
950 void ThreadProxy::ScheduledActionCommit() { 943 void ThreadProxy::ScheduledActionCommit() {
951 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionCommit"); 944 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionCommit");
952 DCHECK(IsImplThread()); 945 DCHECK(IsImplThread());
953 DCHECK(IsMainThreadBlocked()); 946 DCHECK(IsMainThreadBlocked());
954 DCHECK(impl().commit_completion_event); 947 DCHECK(impl().commit_completion_event);
955 DCHECK(impl().current_resource_update_controller); 948 DCHECK(impl().current_resource_update_controller);
956 949
957 // Complete all remaining texture updates. 950 // Complete all remaining texture updates.
958 impl().current_resource_update_controller->Finalize(); 951 impl().current_resource_update_controller->Finalize();
959 impl().current_resource_update_controller = nullptr; 952 impl().current_resource_update_controller = nullptr;
960 953
961 if (impl().animations_frozen_until_next_draw) {
962 impl().animation_time = std::max(
963 impl().animation_time, blocked_main().last_monotonic_frame_begin_time);
964 }
965 impl().did_commit_after_animating = true; 954 impl().did_commit_after_animating = true;
966 955
967 blocked_main().main_thread_inside_commit = true; 956 blocked_main().main_thread_inside_commit = true;
968 impl().layer_tree_host_impl->BeginCommit(); 957 impl().layer_tree_host_impl->BeginCommit();
969 layer_tree_host()->BeginCommitOnImplThread(impl().layer_tree_host_impl.get()); 958 layer_tree_host()->BeginCommitOnImplThread(impl().layer_tree_host_impl.get());
970 layer_tree_host()->FinishCommitOnImplThread( 959 layer_tree_host()->FinishCommitOnImplThread(
971 impl().layer_tree_host_impl.get()); 960 impl().layer_tree_host_impl.get());
972 blocked_main().main_thread_inside_commit = false; 961 blocked_main().main_thread_inside_commit = false;
973 962
974 bool hold_commit = layer_tree_host()->settings().impl_side_painting && 963 bool hold_commit = layer_tree_host()->settings().impl_side_painting &&
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 result = impl().layer_tree_host_impl->PrepareToDraw(&frame); 1046 result = impl().layer_tree_host_impl->PrepareToDraw(&frame);
1058 draw_frame = forced_draw || result == DRAW_SUCCESS; 1047 draw_frame = forced_draw || result == DRAW_SUCCESS;
1059 } else { 1048 } else {
1060 result = DRAW_ABORTED_CANT_DRAW; 1049 result = DRAW_ABORTED_CANT_DRAW;
1061 } 1050 }
1062 1051
1063 if (draw_frame) { 1052 if (draw_frame) {
1064 impl().layer_tree_host_impl->DrawLayers( 1053 impl().layer_tree_host_impl->DrawLayers(
1065 &frame, impl().scheduler->LastBeginImplFrameTime()); 1054 &frame, impl().scheduler->LastBeginImplFrameTime());
1066 result = DRAW_SUCCESS; 1055 result = DRAW_SUCCESS;
1067 impl().animations_frozen_until_next_draw = false;
1068 } else if (result == DRAW_ABORTED_CHECKERBOARD_ANIMATIONS &&
1069 !impl().layer_tree_host_impl->settings().impl_side_painting) {
1070 // Without impl-side painting, the animated layer that is checkerboarding
1071 // will continue to checkerboard until the next commit. If this layer
1072 // continues to move during the commit, it may continue to checkerboard
1073 // after the commit since the region rasterized during the commit will not
1074 // match the region that is currently visible; eventually this
1075 // checkerboarding will be displayed when we force a draw. To avoid this,
1076 // we freeze animations until we successfully draw.
1077 impl().animations_frozen_until_next_draw = true;
1078 } else { 1056 } else {
1079 DCHECK_NE(DRAW_SUCCESS, result); 1057 DCHECK_NE(DRAW_SUCCESS, result);
1080 } 1058 }
1081 impl().layer_tree_host_impl->DidDrawAllLayers(frame); 1059 impl().layer_tree_host_impl->DidDrawAllLayers(frame);
1082 1060
1083 bool start_ready_animations = draw_frame; 1061 bool start_ready_animations = draw_frame;
1084 impl().layer_tree_host_impl->UpdateAnimationState(start_ready_animations); 1062 impl().layer_tree_host_impl->UpdateAnimationState(start_ready_animations);
1085 1063
1086 if (draw_frame) { 1064 if (draw_frame) {
1087 bool did_request_swap = impl().layer_tree_host_impl->SwapBuffers(frame); 1065 bool did_request_swap = impl().layer_tree_host_impl->SwapBuffers(frame);
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 1373
1396 impl().timing_history.DidActivateSyncTree(); 1374 impl().timing_history.DidActivateSyncTree();
1397 } 1375 }
1398 1376
1399 void ThreadProxy::DidManageTiles() { 1377 void ThreadProxy::DidManageTiles() {
1400 DCHECK(IsImplThread()); 1378 DCHECK(IsImplThread());
1401 impl().scheduler->DidManageTiles(); 1379 impl().scheduler->DidManageTiles();
1402 } 1380 }
1403 1381
1404 } // namespace cc 1382 } // 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