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

Unified Diff: cc/trees/layer_tree_impl.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_impl.cc
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 74603d51fbc0f1016e5cc45cfd7ffa8a6b09b4a4..705fbd17b8ff118a06895724f0c6e592cdace9ad 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -448,6 +448,45 @@ LayerListReverseIterator<LayerImpl> LayerTreeImpl::rend() {
return LayerListReverseIterator<LayerImpl>(nullptr);
}
+void LayerTreeImpl::RegisterLayerForElementId(LayerImpl* 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;
+ }
+ layer_tree_host_impl_->animation_host()->RegisterElement(
+ layer->element_id(),
+ IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
+}
+
+void LayerTreeImpl::UnregisterLayerForElementId(LayerImpl* layer) {
+ DCHECK(layer->element_id());
+
+ layer_tree_host_impl_->animation_host()->UnregisterElement(
+ layer->element_id(),
+ IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
+
+ 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());
+}
+
void LayerTreeImpl::AddToElementMap(LayerImpl* layer) {
if (!layer->element_id() || !layer->mutable_properties())
return;
@@ -485,7 +524,7 @@ void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) {
}
LayerTreeImpl::ElementLayers LayerTreeImpl::GetMutableLayers(
- uint64_t element_id) {
+ ElementId element_id) {
auto iter = element_layers_map_.find(element_id);
if (iter == element_layers_map_.end())
return ElementLayers();
@@ -998,6 +1037,21 @@ LayerImpl* LayerTreeImpl::LayerById(int id) const {
return iter != layer_id_map_.end() ? iter->second : NULL;
}
+LayerImpl* LayerTreeImpl::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;
+}
+
+LayerImpl* LayerTreeImpl::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;
+}
+
+bool LayerTreeImpl::HasAnyLayerForElementId(ElementId element_id) const {
+ return element_id_to_layer_map_.find(element_id) !=
+ element_id_to_layer_map_.end();
+}
+
void LayerTreeImpl::AddLayerShouldPushProperties(LayerImpl* layer) {
layers_that_should_push_properties_.insert(layer);
}
@@ -1019,16 +1073,10 @@ bool LayerTreeImpl::LayerNeedsPushPropertiesForTesting(LayerImpl* layer) {
void LayerTreeImpl::RegisterLayer(LayerImpl* layer) {
DCHECK(!LayerById(layer->id()));
layer_id_map_[layer->id()] = layer;
- layer_tree_host_impl_->animation_host()->RegisterElement(
- layer->id(),
- IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
}
void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) {
DCHECK(LayerById(layer->id()));
- layer_tree_host_impl_->animation_host()->UnregisterElement(
- layer->id(),
- IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
layer_id_map_.erase(layer->id());
DCHECK_NE(root_layer_, layer);
}
@@ -1946,141 +1994,201 @@ LayerTreeImpl::TakePendingPageScaleAnimation() {
}
bool LayerTreeImpl::IsAnimatingFilterProperty(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->IsAnimatingFilterProperty(
- layer->id(), list_type);
+ layer->element_id(), list_type);
}
bool LayerTreeImpl::IsAnimatingOpacityProperty(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->IsAnimatingOpacityProperty(
- layer->id(), list_type);
+ layer->element_id(), list_type);
}
bool LayerTreeImpl::IsAnimatingTransformProperty(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->IsAnimatingTransformProperty(
- layer->id(), list_type);
+ layer->element_id(), list_type);
}
bool LayerTreeImpl::HasPotentiallyRunningFilterAnimation(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()
- ->HasPotentiallyRunningFilterAnimation(layer->id(), list_type);
+ ->HasPotentiallyRunningFilterAnimation(layer->element_id(), list_type);
}
bool LayerTreeImpl::HasPotentiallyRunningOpacityAnimation(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()
- ->HasPotentiallyRunningOpacityAnimation(layer->id(), list_type);
+ ->HasPotentiallyRunningOpacityAnimation(layer->element_id(), list_type);
}
bool LayerTreeImpl::HasPotentiallyRunningTransformAnimation(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()
- ->HasPotentiallyRunningTransformAnimation(layer->id(), list_type);
+ ->HasPotentiallyRunningTransformAnimation(layer->element_id(), list_type);
}
bool LayerTreeImpl::HasAnyAnimationTargetingProperty(
const LayerImpl* layer,
TargetProperty::Type property) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->HasAnyAnimationTargetingProperty(layer->id(), property);
+ ->HasAnyAnimationTargetingProperty(layer->element_id(), property);
}
bool LayerTreeImpl::FilterIsAnimatingOnImplOnly(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()->FilterIsAnimatingOnImplOnly(
- layer->id());
+ layer->element_id());
}
bool LayerTreeImpl::OpacityIsAnimatingOnImplOnly(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()->OpacityIsAnimatingOnImplOnly(
- layer->id());
+ layer->element_id());
}
bool LayerTreeImpl::ScrollOffsetIsAnimatingOnImplOnly(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->ScrollOffsetIsAnimatingOnImplOnly(layer->id());
+ ->ScrollOffsetIsAnimatingOnImplOnly(layer->element_id());
}
bool LayerTreeImpl::TransformIsAnimatingOnImplOnly(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->TransformIsAnimatingOnImplOnly(layer->id());
+ ->TransformIsAnimatingOnImplOnly(layer->element_id());
}
bool LayerTreeImpl::AnimationsPreserveAxisAlignment(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return true;
+
return layer_tree_host_impl_->animation_host()
- ->AnimationsPreserveAxisAlignment(layer->id());
+ ->AnimationsPreserveAxisAlignment(layer->element_id());
}
bool LayerTreeImpl::HasOnlyTranslationTransforms(const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return true;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->HasOnlyTranslationTransforms(
- layer->id(), list_type);
+ layer->element_id(), list_type);
}
bool LayerTreeImpl::MaximumTargetScale(const LayerImpl* layer,
float* max_scale) const {
*max_scale = 0.f;
+ if (!layer->element_id())
+ return true;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->MaximumTargetScale(
- layer->id(), list_type, max_scale);
+ layer->element_id(), list_type, max_scale);
}
bool LayerTreeImpl::AnimationStartScale(const LayerImpl* layer,
float* start_scale) const {
*start_scale = 0.f;
+ if (!layer->element_id())
+ return true;
+
ElementListType list_type =
IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING;
return layer_tree_host_impl_->animation_host()->AnimationStartScale(
- layer->id(), list_type, start_scale);
+ layer->element_id(), list_type, start_scale);
}
bool LayerTreeImpl::HasFilterAnimationThatInflatesBounds(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->HasFilterAnimationThatInflatesBounds(layer->id());
+ ->HasFilterAnimationThatInflatesBounds(layer->element_id());
}
bool LayerTreeImpl::HasTransformAnimationThatInflatesBounds(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->HasTransformAnimationThatInflatesBounds(layer->id());
+ ->HasTransformAnimationThatInflatesBounds(layer->element_id());
}
bool LayerTreeImpl::HasAnimationThatInflatesBounds(
const LayerImpl* layer) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()
- ->HasAnimationThatInflatesBounds(layer->id());
+ ->HasAnimationThatInflatesBounds(layer->element_id());
}
bool LayerTreeImpl::FilterAnimationBoundsForBox(const LayerImpl* layer,
const gfx::BoxF& box,
gfx::BoxF* bounds) const {
+ if (!layer->element_id())
+ return false;
+
return layer_tree_host_impl_->animation_host()->FilterAnimationBoundsForBox(
- layer->id(), box, bounds);
+ layer->element_id(), box, bounds);
}
bool LayerTreeImpl::TransformAnimationBoundsForBox(const LayerImpl* layer,
const gfx::BoxF& box,
gfx::BoxF* bounds) const {
*bounds = gfx::BoxF();
+ if (!layer->element_id())
+ return true;
+
return layer_tree_host_impl_->animation_host()
- ->TransformAnimationBoundsForBox(layer->id(), box, bounds);
+ ->TransformAnimationBoundsForBox(layer->element_id(), box, bounds);
}
void LayerTreeImpl::ScrollAnimationAbort(bool needs_completion) {

Powered by Google App Engine
This is Rietveld 408576698