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

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

Issue 1010663002: CC Animations: Redirect all compositor animation requests to AnimationHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@introduce
Patch Set: Rebase. 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 unified diff | Download patch
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/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 pinch_gesture_active_(false), 223 pinch_gesture_active_(false),
224 pinch_gesture_end_should_clear_scrolling_layer_(false), 224 pinch_gesture_end_should_clear_scrolling_layer_(false),
225 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), 225 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())),
226 paint_time_counter_(PaintTimeCounter::Create()), 226 paint_time_counter_(PaintTimeCounter::Create()),
227 memory_history_(MemoryHistory::Create()), 227 memory_history_(MemoryHistory::Create()),
228 debug_rect_history_(DebugRectHistory::Create()), 228 debug_rect_history_(DebugRectHistory::Create()),
229 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())), 229 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())),
230 max_memory_needed_bytes_(0), 230 max_memory_needed_bytes_(0),
231 device_scale_factor_(1.f), 231 device_scale_factor_(1.f),
232 resourceless_software_draw_(false), 232 resourceless_software_draw_(false),
233 animation_registrar_(AnimationRegistrar::Create()), 233 animation_registrar_(),
234 rendering_stats_instrumentation_(rendering_stats_instrumentation), 234 rendering_stats_instrumentation_(rendering_stats_instrumentation),
235 micro_benchmark_controller_(this), 235 micro_benchmark_controller_(this),
236 shared_bitmap_manager_(shared_bitmap_manager), 236 shared_bitmap_manager_(shared_bitmap_manager),
237 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 237 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
238 task_graph_runner_(task_graph_runner), 238 task_graph_runner_(task_graph_runner),
239 id_(id), 239 id_(id),
240 requires_high_res_to_draw_(false), 240 requires_high_res_to_draw_(false),
241 is_likely_to_require_a_draw_(false), 241 is_likely_to_require_a_draw_(false),
242 frame_timing_tracker_(FrameTimingTracker::Create(this)) { 242 frame_timing_tracker_(FrameTimingTracker::Create(this)) {
243 if (settings.use_compositor_animation_timelines) { 243 if (settings.use_compositor_animation_timelines) {
244 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL); 244 if (settings.accelerated_animation_enabled) {
245 animation_host_->SetMutatorHostClient(this); 245 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL);
246 animation_host_->SetMutatorHostClient(this);
247 animation_host_->SetSupportsScrollAnimations(
248 proxy_->SupportsImplScrolling());
249 }
250 } else {
251 animation_registrar_ = AnimationRegistrar::Create();
252 animation_registrar_->set_supports_scroll_animations(
253 proxy_->SupportsImplScrolling());
246 } 254 }
247 255
248 DCHECK(proxy_->IsImplThread()); 256 DCHECK(proxy_->IsImplThread());
249 DCHECK_IMPLIES(settings.use_one_copy, !settings.use_zero_copy); 257 DCHECK_IMPLIES(settings.use_one_copy, !settings.use_zero_copy);
250 DCHECK_IMPLIES(settings.use_zero_copy, !settings.use_one_copy); 258 DCHECK_IMPLIES(settings.use_zero_copy, !settings.use_one_copy);
251 DidVisibilityChange(this, visible_); 259 DidVisibilityChange(this, visible_);
252 animation_registrar_->set_supports_scroll_animations(
253 proxy_->SupportsImplScrolling());
254 260
255 SetDebugState(settings.initial_debug_state); 261 SetDebugState(settings.initial_debug_state);
256 262
257 // LTHI always has an active tree. 263 // LTHI always has an active tree.
258 active_tree_ = 264 active_tree_ =
259 LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(), 265 LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(),
260 new SyncedTopControls, new SyncedElasticOverscroll); 266 new SyncedTopControls, new SyncedElasticOverscroll);
261 267
262 viewport_ = Viewport::Create(this); 268 viewport_ = Viewport::Create(this);
263 269
(...skipping 23 matching lines...) Expand all
287 // made a contract with our animation controllers that the registrar 293 // made a contract with our animation controllers that the registrar
288 // will outlive them, and we must make good. 294 // will outlive them, and we must make good.
289 if (recycle_tree_) 295 if (recycle_tree_)
290 recycle_tree_->Shutdown(); 296 recycle_tree_->Shutdown();
291 if (pending_tree_) 297 if (pending_tree_)
292 pending_tree_->Shutdown(); 298 pending_tree_->Shutdown();
293 active_tree_->Shutdown(); 299 active_tree_->Shutdown();
294 recycle_tree_ = nullptr; 300 recycle_tree_ = nullptr;
295 pending_tree_ = nullptr; 301 pending_tree_ = nullptr;
296 active_tree_ = nullptr; 302 active_tree_ = nullptr;
303
304 if (animation_host_) {
305 animation_host_->ClearTimelines();
306 animation_host_->SetMutatorHostClient(nullptr);
307 }
308
297 DestroyTileManager(); 309 DestroyTileManager();
298 } 310 }
299 311
300 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { 312 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) {
301 // If the begin frame data was handled, then scroll and scale set was applied 313 // If the begin frame data was handled, then scroll and scale set was applied
302 // by the main thread, so the active tree needs to be updated as if these sent 314 // by the main thread, so the active tree needs to be updated as if these sent
303 // values were applied and committed. 315 // values were applied and committed.
304 if (CommitEarlyOutHandledCommit(reason)) 316 if (CommitEarlyOutHandledCommit(reason))
305 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); 317 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit();
306 } 318 }
(...skipping 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 // contents of its texture are updated as the last thing before the frame is 1568 // contents of its texture are updated as the last thing before the frame is
1557 // drawn. 1569 // drawn.
1558 if (active_tree_->hud_layer()) { 1570 if (active_tree_->hud_layer()) {
1559 TRACE_EVENT0("cc", "DrawLayers.UpdateHudTexture"); 1571 TRACE_EVENT0("cc", "DrawLayers.UpdateHudTexture");
1560 active_tree_->hud_layer()->UpdateHudTexture(draw_mode, 1572 active_tree_->hud_layer()->UpdateHudTexture(draw_mode,
1561 resource_provider_.get()); 1573 resource_provider_.get());
1562 } 1574 }
1563 1575
1564 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) { 1576 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) {
1565 bool disable_picture_quad_image_filtering = 1577 bool disable_picture_quad_image_filtering =
1566 IsActivelyScrolling() || animation_registrar_->needs_animate_layers(); 1578 IsActivelyScrolling() ||
1579 (animation_host_ ? animation_host_->NeedsAnimateLayers()
1580 : animation_registrar_->needs_animate_layers());
1567 1581
1568 scoped_ptr<SoftwareRenderer> temp_software_renderer = 1582 scoped_ptr<SoftwareRenderer> temp_software_renderer =
1569 SoftwareRenderer::Create(this, &settings_.renderer_settings, 1583 SoftwareRenderer::Create(this, &settings_.renderer_settings,
1570 output_surface_.get(), NULL); 1584 output_surface_.get(), NULL);
1571 temp_software_renderer->DrawFrame(&frame->render_passes, 1585 temp_software_renderer->DrawFrame(&frame->render_passes,
1572 device_scale_factor_, 1586 device_scale_factor_,
1573 DeviceViewport(), 1587 DeviceViewport(),
1574 DeviceClip(), 1588 DeviceClip(),
1575 disable_picture_quad_image_filtering); 1589 disable_picture_quad_image_filtering);
1576 } else { 1590 } else {
(...skipping 1519 matching lines...) Expand 10 before | Expand all | Expand 10 after
3096 for (auto& it : controllers_copy) 3110 for (auto& it : controllers_copy)
3097 it->Animate(monotonic_time); 3111 it->Animate(monotonic_time);
3098 3112
3099 SetNeedsAnimate(); 3113 SetNeedsAnimate();
3100 } 3114 }
3101 3115
3102 void LayerTreeHostImpl::AnimateLayers(base::TimeTicks monotonic_time) { 3116 void LayerTreeHostImpl::AnimateLayers(base::TimeTicks monotonic_time) {
3103 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer()) 3117 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
3104 return; 3118 return;
3105 3119
3106 if (animation_registrar_->AnimateLayers(monotonic_time)) 3120 if (animation_host_) {
3107 SetNeedsAnimate(); 3121 if (animation_host_->AnimateLayers(monotonic_time))
3122 SetNeedsAnimate();
3123 } else {
3124 if (animation_registrar_->AnimateLayers(monotonic_time))
3125 SetNeedsAnimate();
3126 }
3108 } 3127 }
3109 3128
3110 void LayerTreeHostImpl::UpdateAnimationState(bool start_ready_animations) { 3129 void LayerTreeHostImpl::UpdateAnimationState(bool start_ready_animations) {
3111 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer()) 3130 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
3112 return; 3131 return;
3113 3132
3114 scoped_ptr<AnimationEventsVector> events = 3133 bool has_active_animations = false;
3115 animation_registrar_->CreateEvents(); 3134 scoped_ptr<AnimationEventsVector> events;
3116 const bool has_active_animations = animation_registrar_->UpdateAnimationState( 3135
3117 start_ready_animations, events.get()); 3136 if (animation_host_) {
3137 events = animation_host_->CreateEvents();
3138 has_active_animations = animation_host_->UpdateAnimationState(
3139 start_ready_animations, events.get());
3140 } else {
3141 events = animation_registrar_->CreateEvents();
3142 has_active_animations = animation_registrar_->UpdateAnimationState(
3143 start_ready_animations, events.get());
3144 }
3118 3145
3119 if (!events->empty()) 3146 if (!events->empty())
3120 client_->PostAnimationEventsToMainThreadOnImplThread(events.Pass()); 3147 client_->PostAnimationEventsToMainThreadOnImplThread(events.Pass());
3121 3148
3122 if (has_active_animations) 3149 if (has_active_animations)
3123 SetNeedsAnimate(); 3150 SetNeedsAnimate();
3124 } 3151 }
3125 3152
3126 void LayerTreeHostImpl::ActivateAnimations() { 3153 void LayerTreeHostImpl::ActivateAnimations() {
3127 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer()) 3154 if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
3128 return; 3155 return;
3129 3156
3130 if (animation_registrar_->ActivateAnimations()) 3157 if (animation_host_) {
3131 SetNeedsAnimate(); 3158 if (animation_host_->ActivateAnimations())
3159 SetNeedsAnimate();
3160 } else {
3161 if (animation_registrar_->ActivateAnimations())
3162 SetNeedsAnimate();
3163 }
3132 } 3164 }
3133 3165
3134 std::string LayerTreeHostImpl::LayerTreeAsJson() const { 3166 std::string LayerTreeHostImpl::LayerTreeAsJson() const {
3135 std::string str; 3167 std::string str;
3136 if (active_tree_->root_layer()) { 3168 if (active_tree_->root_layer()) {
3137 scoped_ptr<base::Value> json(active_tree_->root_layer()->LayerTreeAsJson()); 3169 scoped_ptr<base::Value> json(active_tree_->root_layer()->LayerTreeAsJson());
3138 base::JSONWriter::WriteWithOptions( 3170 base::JSONWriter::WriteWithOptions(
3139 *json, base::JSONWriter::OPTIONS_PRETTY_PRINT, &str); 3171 *json, base::JSONWriter::OPTIONS_PRETTY_PRINT, &str);
3140 } 3172 }
3141 return str; 3173 return str;
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
3554 const gfx::ScrollOffset& scroll_offset) { 3586 const gfx::ScrollOffset& scroll_offset) {
3555 if (tree_type == LayerTreeType::ACTIVE) { 3587 if (tree_type == LayerTreeType::ACTIVE) {
3556 SetTreeLayerScrollOffsetMutated(layer_id, active_tree(), scroll_offset); 3588 SetTreeLayerScrollOffsetMutated(layer_id, active_tree(), scroll_offset);
3557 } else { 3589 } else {
3558 SetTreeLayerScrollOffsetMutated(layer_id, pending_tree(), scroll_offset); 3590 SetTreeLayerScrollOffsetMutated(layer_id, pending_tree(), scroll_offset);
3559 SetTreeLayerScrollOffsetMutated(layer_id, recycle_tree(), scroll_offset); 3591 SetTreeLayerScrollOffsetMutated(layer_id, recycle_tree(), scroll_offset);
3560 } 3592 }
3561 } 3593 }
3562 3594
3563 } // namespace cc 3595 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_common.cc ('k') | cc/trees/layer_tree_host_unittest_animation_timelines.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698