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

Unified Diff: cc/trees/layer_tree.cc

Issue 2216203002: Refactor MutatorHostClient from LayerTreeHost to LayerTree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on another LTH refactor CL. Created 4 years, 4 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.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree.cc
diff --git a/cc/trees/layer_tree.cc b/cc/trees/layer_tree.cc
index bbce951aad05cb2fc36f68a1d837122922e7c027..e6236d1c8bbcf672968ee95c45d4095950eb0f77 100644
--- a/cc/trees/layer_tree.cc
+++ b/cc/trees/layer_tree.cc
@@ -66,6 +66,7 @@ LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host,
layer_tree_host_(layer_tree_host) {
DCHECK(animation_host_);
DCHECK(layer_tree_host_);
+ animation_host_->SetMutatorHostClient(this);
}
LayerTree::~LayerTree() {
@@ -530,10 +531,181 @@ void LayerTree::FromProtobuf(const proto::LayerTree& proto) {
// updated for other reasons. All layers that at this point are part of the
// layer tree are valid, so it is OK that they have a valid sequence number.
int seq_num = property_trees_.sequence_number;
- LayerTreeHostCommon::CallFunctionForEveryLayer(
- layer_tree_host_, [seq_num](Layer* layer) {
- layer->set_property_tree_sequence_number(seq_num);
- });
+ LayerTreeHostCommon::CallFunctionForEveryLayer(this, [seq_num](Layer* layer) {
+ layer->set_property_tree_sequence_number(seq_num);
+ });
+}
+
+Layer* LayerTree::LayerByElementId(ElementId element_id) const {
+ ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
+ return iter != element_layers_map_.end() ? iter->second : nullptr;
+}
+
+void LayerTree::RegisterElement(ElementId element_id,
+ ElementListType list_type,
+ Layer* layer) {
+ if (layer->element_id()) {
+ element_layers_map_[layer->element_id()] = layer;
+ }
+
+ animation_host_->RegisterElement(element_id, list_type);
+}
+
+void LayerTree::UnregisterElement(ElementId element_id,
+ ElementListType list_type,
+ Layer* layer) {
+ animation_host_->UnregisterElement(element_id, list_type);
+
+ if (layer->element_id()) {
+ element_layers_map_.erase(layer->element_id());
+ }
+}
+
+static void SetElementIdForTesting(Layer* layer) {
+ layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
+}
+
+void LayerTree::SetElementIdsForTesting() {
+ LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
+}
+
+bool LayerTree::IsElementInList(ElementId element_id,
+ ElementListType list_type) const {
+ return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
+}
+
+void LayerTree::SetMutatorsNeedCommit() {
+ layer_tree_host_->SetNeedsCommit();
+}
+
+void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
+ property_trees_.needs_rebuild = true;
+}
+
+void LayerTree::SetElementFilterMutated(ElementId element_id,
+ ElementListType list_type,
+ const FilterOperations& filters) {
+ Layer* layer = LayerByElementId(element_id);
+ DCHECK(layer);
+ layer->OnFilterAnimated(filters);
+}
+
+void LayerTree::SetElementOpacityMutated(ElementId element_id,
+ ElementListType list_type,
+ float opacity) {
+ Layer* layer = LayerByElementId(element_id);
+ DCHECK(layer);
+ layer->OnOpacityAnimated(opacity);
+}
+
+void LayerTree::SetElementTransformMutated(ElementId element_id,
+ ElementListType list_type,
+ const gfx::Transform& transform) {
+ Layer* layer = LayerByElementId(element_id);
+ DCHECK(layer);
+ layer->OnTransformAnimated(transform);
+}
+
+void LayerTree::SetElementScrollOffsetMutated(
+ ElementId element_id,
+ ElementListType list_type,
+ const gfx::ScrollOffset& scroll_offset) {
+ Layer* layer = LayerByElementId(element_id);
+ DCHECK(layer);
+ layer->OnScrollOffsetAnimated(scroll_offset);
+}
+
+void LayerTree::ElementTransformIsAnimatingChanged(
+ ElementId element_id,
+ ElementListType list_type,
+ AnimationChangeType change_type,
+ bool is_animating) {
+ Layer* layer = LayerByElementId(element_id);
+ if (layer) {
+ switch (change_type) {
+ case AnimationChangeType::POTENTIAL:
+ layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::RUNNING:
+ layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::BOTH:
+ layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
+ layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ }
+ }
+}
+
+void LayerTree::ElementOpacityIsAnimatingChanged(
+ ElementId element_id,
+ ElementListType list_type,
+ AnimationChangeType change_type,
+ bool is_animating) {
+ Layer* layer = LayerByElementId(element_id);
+ if (layer) {
+ switch (change_type) {
+ case AnimationChangeType::POTENTIAL:
+ layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::RUNNING:
+ layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::BOTH:
+ layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
+ layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ }
+ }
+}
+
+void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id,
+ ElementListType list_type,
+ AnimationChangeType change_type,
+ bool is_animating) {
+ Layer* layer = LayerByElementId(element_id);
+ if (layer) {
+ switch (change_type) {
+ case AnimationChangeType::POTENTIAL:
+ layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::RUNNING:
+ layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ case AnimationChangeType::BOTH:
+ layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
+ layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
+ break;
+ }
+ }
+}
+
+gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
+ ElementId element_id) const {
+ Layer* layer = LayerByElementId(element_id);
+ DCHECK(layer);
+ return layer->ScrollOffsetForAnimation();
+}
+
+LayerListIterator<Layer> LayerTree::begin() const {
+ return LayerListIterator<Layer>(inputs_.root_layer.get());
+}
+
+LayerListIterator<Layer> LayerTree::end() const {
+ return LayerListIterator<Layer>(nullptr);
+}
+
+LayerListReverseIterator<Layer> LayerTree::rbegin() {
+ return LayerListReverseIterator<Layer>(inputs_.root_layer.get());
+}
+
+LayerListReverseIterator<Layer> LayerTree::rend() {
+ return LayerListReverseIterator<Layer>(nullptr);
+}
+
+void LayerTree::SetNeedsDisplayOnAllLayers() {
+ for (auto* layer : *this)
+ layer->SetNeedsDisplay();
}
} // namespace cc
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698