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

Unified Diff: cc/trees/layer_tree_host.cc

Issue 1944623002: CC Animation: Use ElementId to attach CC animation players. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@erasedomids
Patch Set: Let CC clients generate their own ElementIds locally. Created 4 years, 7 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
Index: cc/trees/layer_tree_host.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index f1fdb93e69be774e545d24be6791d62316f9b182..962ecf1d0914396105e005e70c6281abfd870b81 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -1268,6 +1268,16 @@ Layer* LayerTreeHost::LayerById(int id) const {
return iter != layer_id_map_.end() ? iter->second : NULL;
}
+Layer* LayerTreeHost::LayerForElementId(ElementId element_id) const {
+ auto iter = element_id_to_layer_map_.find(element_id);
+ return iter != element_id_to_layer_map_.end() ? iter->second.main : nullptr;
+}
+
+Layer* LayerTreeHost::ScrollLayerForElementId(ElementId element_id) const {
+ auto iter = element_id_to_layer_map_.find(element_id);
+ return iter != element_id_to_layer_map_.end() ? iter->second.scroll : nullptr;
esprehn 2016/05/10 22:55:13 this could just be tracked inside blink and access
loyso (OOO) 2016/05/12 06:02:15 We definitely can't do this: 1) In impl compositor
+}
+
void LayerTreeHost::AddLayerShouldPushProperties(Layer* layer) {
layers_that_should_push_properties_.insert(layer);
}
@@ -1289,20 +1299,56 @@ void LayerTreeHost::RegisterLayer(Layer* layer) {
DCHECK(!LayerById(layer->id()));
DCHECK(!in_paint_layer_contents_);
layer_id_map_[layer->id()] = layer;
- animation_host_->RegisterElement(layer->id(), ElementListType::ACTIVE);
}
void LayerTreeHost::UnregisterLayer(Layer* layer) {
DCHECK(LayerById(layer->id()));
DCHECK(!in_paint_layer_contents_);
- animation_host_->UnregisterElement(layer->id(), ElementListType::ACTIVE);
RemoveLayerShouldPushProperties(layer);
layer_id_map_.erase(layer->id());
}
+void LayerTreeHost::RegisterLayerForElementId(Layer* layer) {
+ DCHECK(layer->element_id());
+ ElementLayers& element_layers = element_id_to_layer_map_[layer->element_id()];
+ if (layer->scrollable()) {
+ DCHECK(!element_layers.scroll);
+ element_layers.scroll = layer;
+ } else {
+ DCHECK(!element_layers.main);
+ element_layers.main = layer;
+ }
+ animation_host_->RegisterElement(layer->element_id(),
+ ElementListType::ACTIVE);
+}
+
+void LayerTreeHost::UnregisterLayerForElementId(Layer* layer) {
+ DCHECK(layer->element_id());
+ animation_host_->UnregisterElement(layer->element_id(),
+ ElementListType::ACTIVE);
+
+ auto iter = element_id_to_layer_map_.find(layer->element_id());
+ if (iter == element_id_to_layer_map_.end())
+ return;
+
+ ElementLayers& element_layers = iter->second;
+ if (layer->scrollable()) {
+ DCHECK_EQ(element_layers.scroll, layer);
+ element_layers.scroll = nullptr;
+ } else {
+ DCHECK_EQ(element_layers.main, layer);
+ element_layers.main = nullptr;
+ }
+
+ if (!element_layers.main && !element_layers.scroll)
+ element_id_to_layer_map_.erase(layer->element_id());
+}
+
bool LayerTreeHost::IsElementInList(ElementId element_id,
ElementListType list_type) const {
- return list_type == ElementListType::ACTIVE && LayerById(element_id);
+ return list_type == ElementListType::ACTIVE &&
+ element_id_to_layer_map_.find(element_id) !=
+ element_id_to_layer_map_.end();
}
void LayerTreeHost::SetMutatorsNeedCommit() {
@@ -1316,7 +1362,7 @@ void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() {
void LayerTreeHost::SetElementFilterMutated(ElementId element_id,
ElementListType list_type,
const FilterOperations& filters) {
- Layer* layer = LayerById(element_id);
+ Layer* layer = LayerForElementId(element_id);
DCHECK(layer);
layer->OnFilterAnimated(filters);
}
@@ -1324,7 +1370,7 @@ void LayerTreeHost::SetElementFilterMutated(ElementId element_id,
void LayerTreeHost::SetElementOpacityMutated(ElementId element_id,
ElementListType list_type,
float opacity) {
- Layer* layer = LayerById(element_id);
+ Layer* layer = LayerForElementId(element_id);
DCHECK(layer);
layer->OnOpacityAnimated(opacity);
}
@@ -1333,7 +1379,7 @@ void LayerTreeHost::SetElementTransformMutated(
ElementId element_id,
ElementListType list_type,
const gfx::Transform& transform) {
- Layer* layer = LayerById(element_id);
+ Layer* layer = LayerForElementId(element_id);
DCHECK(layer);
layer->OnTransformAnimated(transform);
}
@@ -1342,7 +1388,7 @@ void LayerTreeHost::SetElementScrollOffsetMutated(
ElementId element_id,
ElementListType list_type,
const gfx::ScrollOffset& scroll_offset) {
- Layer* layer = LayerById(element_id);
+ Layer* layer = ScrollLayerForElementId(element_id);
DCHECK(layer);
layer->OnScrollOffsetAnimated(scroll_offset);
}
@@ -1351,90 +1397,133 @@ void LayerTreeHost::ElementTransformIsPotentiallyAnimatingChanged(
ElementId element_id,
ElementListType list_type,
bool is_animating) {
- Layer* layer = LayerById(element_id);
- DCHECK(layer);
- layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
+ Layer* layer = LayerForElementId(element_id);
+ if (layer)
+ layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
}
gfx::ScrollOffset LayerTreeHost::GetScrollOffsetForAnimation(
ElementId element_id) const {
- Layer* layer = LayerById(element_id);
+ Layer* layer = ScrollLayerForElementId(element_id);
DCHECK(layer);
return layer->ScrollOffsetForAnimation();
}
bool LayerTreeHost::ScrollOffsetAnimationWasInterrupted(
const Layer* layer) const {
- return animation_host_->ScrollOffsetAnimationWasInterrupted(layer->id());
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->ScrollOffsetAnimationWasInterrupted(
+ layer->element_id());
}
bool LayerTreeHost::IsAnimatingFilterProperty(const Layer* layer) const {
- return animation_host_->IsAnimatingFilterProperty(layer->id(),
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->IsAnimatingFilterProperty(layer->element_id(),
ElementListType::ACTIVE);
}
bool LayerTreeHost::IsAnimatingOpacityProperty(const Layer* layer) const {
- return animation_host_->IsAnimatingOpacityProperty(layer->id(),
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->IsAnimatingOpacityProperty(layer->element_id(),
ElementListType::ACTIVE);
}
bool LayerTreeHost::IsAnimatingTransformProperty(const Layer* layer) const {
- return animation_host_->IsAnimatingTransformProperty(layer->id(),
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->IsAnimatingTransformProperty(layer->element_id(),
ElementListType::ACTIVE);
}
bool LayerTreeHost::HasPotentiallyRunningFilterAnimation(
const Layer* layer) const {
+ if (!layer->element_id())
+ return false;
+
return animation_host_->HasPotentiallyRunningFilterAnimation(
- layer->id(), ElementListType::ACTIVE);
+ layer->element_id(), ElementListType::ACTIVE);
}
bool LayerTreeHost::HasPotentiallyRunningOpacityAnimation(
const Layer* layer) const {
+ if (!layer->element_id())
+ return false;
+
return animation_host_->HasPotentiallyRunningOpacityAnimation(
- layer->id(), ElementListType::ACTIVE);
+ layer->element_id(), ElementListType::ACTIVE);
}
bool LayerTreeHost::HasPotentiallyRunningTransformAnimation(
const Layer* layer) const {
+ if (!layer->element_id())
+ return false;
+
return animation_host_->HasPotentiallyRunningTransformAnimation(
- layer->id(), ElementListType::ACTIVE);
+ layer->element_id(), ElementListType::ACTIVE);
}
bool LayerTreeHost::HasOnlyTranslationTransforms(const Layer* layer) const {
- return animation_host_->HasOnlyTranslationTransforms(layer->id(),
+ if (!layer->element_id())
+ return true;
+
+ return animation_host_->HasOnlyTranslationTransforms(layer->element_id(),
ElementListType::ACTIVE);
}
bool LayerTreeHost::MaximumTargetScale(const Layer* layer,
float* max_scale) const {
+ if (!layer->element_id())
+ return true;
+
return animation_host_->MaximumTargetScale(
- layer->id(), ElementListType::ACTIVE, max_scale);
+ layer->element_id(), ElementListType::ACTIVE, max_scale);
}
bool LayerTreeHost::AnimationStartScale(const Layer* layer,
float* start_scale) const {
+ if (!layer->element_id())
+ return true;
+
return animation_host_->AnimationStartScale(
- layer->id(), ElementListType::ACTIVE, start_scale);
+ layer->element_id(), ElementListType::ACTIVE, start_scale);
}
bool LayerTreeHost::HasAnyAnimationTargetingProperty(
const Layer* layer,
TargetProperty::Type property) const {
- return animation_host_->HasAnyAnimationTargetingProperty(layer->id(),
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->HasAnyAnimationTargetingProperty(layer->element_id(),
property);
}
bool LayerTreeHost::AnimationsPreserveAxisAlignment(const Layer* layer) const {
- return animation_host_->AnimationsPreserveAxisAlignment(layer->id());
+ if (!layer->element_id())
+ return true;
+
+ return animation_host_->AnimationsPreserveAxisAlignment(layer->element_id());
}
bool LayerTreeHost::HasAnyAnimation(const Layer* layer) const {
- return animation_host_->HasAnyAnimation(layer->id());
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->HasAnyAnimation(layer->element_id());
}
bool LayerTreeHost::HasActiveAnimationForTesting(const Layer* layer) const {
- return animation_host_->HasActiveAnimationForTesting(layer->id());
+ if (!layer->element_id())
+ return false;
+
+ return animation_host_->HasActiveAnimationForTesting(layer->element_id());
}
bool LayerTreeHost::IsSingleThreaded() const {

Powered by Google App Engine
This is Rietveld 408576698