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

Unified 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, 6 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
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 4533bab6ef97b18e202f01d4d3e963642c23196c..d4030045d152c8e58e7158f0a6782c1634c591fa 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -230,7 +230,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
max_memory_needed_bytes_(0),
device_scale_factor_(1.f),
resourceless_software_draw_(false),
- animation_registrar_(AnimationRegistrar::Create()),
+ animation_registrar_(),
rendering_stats_instrumentation_(rendering_stats_instrumentation),
micro_benchmark_controller_(this),
shared_bitmap_manager_(shared_bitmap_manager),
@@ -241,16 +241,22 @@ LayerTreeHostImpl::LayerTreeHostImpl(
is_likely_to_require_a_draw_(false),
frame_timing_tracker_(FrameTimingTracker::Create(this)) {
if (settings.use_compositor_animation_timelines) {
- animation_host_ = AnimationHost::Create(ThreadInstance::IMPL);
- animation_host_->SetMutatorHostClient(this);
+ if (settings.accelerated_animation_enabled) {
+ animation_host_ = AnimationHost::Create(ThreadInstance::IMPL);
+ animation_host_->SetMutatorHostClient(this);
+ animation_host_->SetSupportsScrollAnimations(
+ proxy_->SupportsImplScrolling());
+ }
+ } else {
+ animation_registrar_ = AnimationRegistrar::Create();
+ animation_registrar_->set_supports_scroll_animations(
+ proxy_->SupportsImplScrolling());
}
DCHECK(proxy_->IsImplThread());
DCHECK_IMPLIES(settings.use_one_copy, !settings.use_zero_copy);
DCHECK_IMPLIES(settings.use_zero_copy, !settings.use_one_copy);
DidVisibilityChange(this, visible_);
- animation_registrar_->set_supports_scroll_animations(
- proxy_->SupportsImplScrolling());
SetDebugState(settings.initial_debug_state);
@@ -294,6 +300,12 @@ LayerTreeHostImpl::~LayerTreeHostImpl() {
recycle_tree_ = nullptr;
pending_tree_ = nullptr;
active_tree_ = nullptr;
+
+ if (animation_host_) {
+ animation_host_->ClearTimelines();
+ animation_host_->SetMutatorHostClient(nullptr);
+ }
+
DestroyTileManager();
}
@@ -1563,7 +1575,9 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame) {
if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) {
bool disable_picture_quad_image_filtering =
- IsActivelyScrolling() || animation_registrar_->needs_animate_layers();
+ IsActivelyScrolling() ||
+ (animation_host_ ? animation_host_->NeedsAnimateLayers()
+ : animation_registrar_->needs_animate_layers());
scoped_ptr<SoftwareRenderer> temp_software_renderer =
SoftwareRenderer::Create(this, &settings_.renderer_settings,
@@ -3103,18 +3117,31 @@ void LayerTreeHostImpl::AnimateLayers(base::TimeTicks monotonic_time) {
if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
return;
- if (animation_registrar_->AnimateLayers(monotonic_time))
- SetNeedsAnimate();
+ if (animation_host_) {
+ if (animation_host_->AnimateLayers(monotonic_time))
+ SetNeedsAnimate();
+ } else {
+ if (animation_registrar_->AnimateLayers(monotonic_time))
+ SetNeedsAnimate();
+ }
}
void LayerTreeHostImpl::UpdateAnimationState(bool start_ready_animations) {
if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
return;
- scoped_ptr<AnimationEventsVector> events =
- animation_registrar_->CreateEvents();
- const bool has_active_animations = animation_registrar_->UpdateAnimationState(
- start_ready_animations, events.get());
+ bool has_active_animations = false;
+ scoped_ptr<AnimationEventsVector> events;
+
+ if (animation_host_) {
+ events = animation_host_->CreateEvents();
+ has_active_animations = animation_host_->UpdateAnimationState(
+ start_ready_animations, events.get());
+ } else {
+ events = animation_registrar_->CreateEvents();
+ has_active_animations = animation_registrar_->UpdateAnimationState(
+ start_ready_animations, events.get());
+ }
if (!events->empty())
client_->PostAnimationEventsToMainThreadOnImplThread(events.Pass());
@@ -3127,8 +3154,13 @@ void LayerTreeHostImpl::ActivateAnimations() {
if (!settings_.accelerated_animation_enabled || !active_tree_->root_layer())
return;
- if (animation_registrar_->ActivateAnimations())
- SetNeedsAnimate();
+ if (animation_host_) {
+ if (animation_host_->ActivateAnimations())
+ SetNeedsAnimate();
+ } else {
+ if (animation_registrar_->ActivateAnimations())
+ SetNeedsAnimate();
+ }
}
std::string LayerTreeHostImpl::LayerTreeAsJson() const {
« 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