Index: cc/trees/layer_tree_host.cc |
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc |
index 890d304093193bfd10af96d234cb6c9f81299176..e735c2a28bce9433d97cdc8c774f4add87174019 100644 |
--- a/cc/trees/layer_tree_host.cc |
+++ b/cc/trees/layer_tree_host.cc |
@@ -17,6 +17,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/trace_event/trace_event.h" |
#include "base/trace_event/trace_event_argument.h" |
+#include "cc/animation/animation_host.h" |
#include "cc/animation/animation_registrar.h" |
#include "cc/animation/layer_animation_controller.h" |
#include "cc/base/math_util.h" |
@@ -133,6 +134,11 @@ LayerTreeHost::LayerTreeHost( |
animation_registrar_ = AnimationRegistrar::Create(); |
rendering_stats_instrumentation_->set_record_rendering_stats( |
debug_state_.RecordRenderingStats()); |
+ |
+ if (settings_.use_compositor_animation_timelines) { |
+ animation_host_ = AnimationHost::Create(false); |
+ animation_host_->SetLayerTreeMutatorsClient(this); |
+ } |
} |
void LayerTreeHost::InitializeThreaded( |
@@ -174,6 +180,9 @@ void LayerTreeHost::InitializeProxy(scoped_ptr<Proxy> proxy) { |
LayerTreeHost::~LayerTreeHost() { |
TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); |
+ if (animation_host_) |
+ animation_host_->SetLayerTreeMutatorsClient(nullptr); |
+ |
if (root_layer_.get()) |
root_layer_->SetLayerTreeHost(NULL); |
@@ -367,6 +376,11 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { |
{ |
TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); |
TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer()); |
+ |
+ if (animation_host_) { |
+ DCHECK(host_impl->animation_host()); |
+ animation_host_->PushPropertiesTo(host_impl->animation_host()); |
+ } |
} |
micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); |
@@ -1278,4 +1292,64 @@ void LayerTreeHost::SetAuthoritativeVSyncInterval( |
proxy_->SetAuthoritativeVSyncInterval(interval); |
} |
+Layer* LayerTreeHost::LayerById(int id) const { |
+ LayerIdMap::const_iterator iter = layer_id_map_.find(id); |
+ return iter != layer_id_map_.end() ? iter->second : NULL; |
+} |
+ |
+void LayerTreeHost::RegisterLayer(Layer* layer) { |
+ DCHECK(!LayerById(layer->id())); |
+ layer_id_map_[layer->id()] = layer; |
+} |
+ |
+void LayerTreeHost::UnregisterLayer(Layer* layer) { |
+ DCHECK(LayerById(layer->id())); |
+ layer_id_map_.erase(layer->id()); |
+} |
+ |
+bool LayerTreeHost::IsLayerInActiveTree(int layer_id) const { |
+ return true; |
+} |
+ |
+bool LayerTreeHost::IsLayerInPendingTree(int layer_id) const { |
+ return false; |
+} |
+ |
+void LayerTreeHost::SetMutatorsNeedCommit() { |
+ SetNeedsCommit(); |
+} |
+ |
+void LayerTreeHost::SetLayerFilterMutated(int layer_id, |
+ bool active_tree, |
+ const FilterOperations& filters) { |
+ LayerAnimationValueObserver* layer = LayerById(layer_id); |
+ DCHECK(layer); |
+ layer->OnFilterAnimated(filters); |
+} |
+ |
+void LayerTreeHost::SetLayerOpacityMutated(int layer_id, |
+ bool active_tree, |
+ float opacity) { |
+ LayerAnimationValueObserver* layer = LayerById(layer_id); |
+ DCHECK(layer); |
+ layer->OnOpacityAnimated(opacity); |
+} |
+ |
+void LayerTreeHost::SetLayerTransformMutated(int layer_id, |
+ bool active_tree, |
+ const gfx::Transform& transform) { |
+ LayerAnimationValueObserver* layer = LayerById(layer_id); |
+ DCHECK(layer); |
+ layer->OnTransformAnimated(transform); |
+} |
+ |
+void LayerTreeHost::SetLayerScrollOffsetMutated( |
+ int layer_id, |
+ bool active_tree, |
+ const gfx::ScrollOffset& scroll_offset) { |
+ LayerAnimationValueObserver* layer = LayerById(layer_id); |
+ DCHECK(layer); |
+ layer->OnScrollOffsetAnimated(scroll_offset); |
+} |
+ |
} // namespace cc |