| Index: cc/trees/layer_tree_host.cc
|
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
|
| index 8b6375973042ff1634ddcd8fe84d6ef4680543eb..a59dab1c9b22db86425d02b47a32ba54ad4d2c8a 100644
|
| --- a/cc/trees/layer_tree_host.cc
|
| +++ b/cc/trees/layer_tree_host.cc
|
| @@ -957,6 +957,14 @@ void LayerTreeHost::ReportFixedRasterScaleUseCounters(
|
| has_fixed_raster_scale_potential_performance_regression);
|
| }
|
|
|
| +static void SetElementIdForTesting(Layer* layer) {
|
| + layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
|
| +}
|
| +
|
| +void LayerTreeHost::SetElementIdsForTesting() {
|
| + LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
|
| +}
|
| +
|
| bool LayerTreeHost::UsingSharedMemoryResources() {
|
| return GetRendererCapabilities().using_shared_memory_resources;
|
| }
|
| @@ -1275,7 +1283,26 @@ void LayerTreeHost::SetLayerTreeMutator(
|
|
|
| Layer* LayerTreeHost::LayerById(int id) const {
|
| LayerIdMap::const_iterator iter = layer_id_map_.find(id);
|
| - return iter != layer_id_map_.end() ? iter->second : NULL;
|
| + return iter != layer_id_map_.end() ? iter->second : nullptr;
|
| +}
|
| +
|
| +Layer* LayerTreeHost::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 LayerTreeHost::AddToElementMap(Layer* layer) {
|
| + if (!layer->element_id())
|
| + return;
|
| +
|
| + element_layers_map_[layer->element_id()] = layer;
|
| +}
|
| +
|
| +void LayerTreeHost::RemoveFromElementMap(Layer* layer) {
|
| + if (!layer->element_id())
|
| + return;
|
| +
|
| + element_layers_map_.erase(layer->element_id());
|
| }
|
|
|
| void LayerTreeHost::AddLayerShouldPushProperties(Layer* layer) {
|
| @@ -1299,20 +1326,26 @@ 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);
|
| + if (layer->element_id()) {
|
| + animation_host_->RegisterElement(layer->element_id(),
|
| + ElementListType::ACTIVE);
|
| + }
|
| }
|
|
|
| void LayerTreeHost::UnregisterLayer(Layer* layer) {
|
| DCHECK(LayerById(layer->id()));
|
| DCHECK(!in_paint_layer_contents_);
|
| - animation_host_->UnregisterElement(layer->id(), ElementListType::ACTIVE);
|
| + if (layer->element_id()) {
|
| + animation_host_->UnregisterElement(layer->element_id(),
|
| + ElementListType::ACTIVE);
|
| + }
|
| RemoveLayerShouldPushProperties(layer);
|
| layer_id_map_.erase(layer->id());
|
| }
|
|
|
| bool LayerTreeHost::IsElementInList(ElementId element_id,
|
| ElementListType list_type) const {
|
| - return list_type == ElementListType::ACTIVE && LayerById(element_id);
|
| + return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
|
| }
|
|
|
| void LayerTreeHost::SetMutatorsNeedCommit() {
|
| @@ -1326,7 +1359,7 @@ void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() {
|
| void LayerTreeHost::SetElementFilterMutated(ElementId element_id,
|
| ElementListType list_type,
|
| const FilterOperations& filters) {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| DCHECK(layer);
|
| layer->OnFilterAnimated(filters);
|
| }
|
| @@ -1334,7 +1367,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 = LayerByElementId(element_id);
|
| DCHECK(layer);
|
| layer->OnOpacityAnimated(opacity);
|
| }
|
| @@ -1343,7 +1376,7 @@ void LayerTreeHost::SetElementTransformMutated(
|
| ElementId element_id,
|
| ElementListType list_type,
|
| const gfx::Transform& transform) {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| DCHECK(layer);
|
| layer->OnTransformAnimated(transform);
|
| }
|
| @@ -1352,7 +1385,7 @@ void LayerTreeHost::SetElementScrollOffsetMutated(
|
| ElementId element_id,
|
| ElementListType list_type,
|
| const gfx::ScrollOffset& scroll_offset) {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| DCHECK(layer);
|
| layer->OnScrollOffsetAnimated(scroll_offset);
|
| }
|
| @@ -1362,7 +1395,7 @@ void LayerTreeHost::ElementTransformIsAnimatingChanged(
|
| ElementListType list_type,
|
| AnimationChangeType change_type,
|
| bool is_animating) {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| if (layer) {
|
| switch (change_type) {
|
| case AnimationChangeType::POTENTIAL:
|
| @@ -1384,7 +1417,7 @@ void LayerTreeHost::ElementOpacityIsAnimatingChanged(
|
| ElementListType list_type,
|
| AnimationChangeType change_type,
|
| bool is_animating) {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| if (layer) {
|
| switch (change_type) {
|
| case AnimationChangeType::POTENTIAL:
|
| @@ -1403,83 +1436,84 @@ void LayerTreeHost::ElementOpacityIsAnimatingChanged(
|
|
|
| gfx::ScrollOffset LayerTreeHost::GetScrollOffsetForAnimation(
|
| ElementId element_id) const {
|
| - Layer* layer = LayerById(element_id);
|
| + Layer* layer = LayerByElementId(element_id);
|
| DCHECK(layer);
|
| return layer->ScrollOffsetForAnimation();
|
| }
|
|
|
| bool LayerTreeHost::ScrollOffsetAnimationWasInterrupted(
|
| const Layer* layer) const {
|
| - return animation_host_->ScrollOffsetAnimationWasInterrupted(layer->id());
|
| + return animation_host_->ScrollOffsetAnimationWasInterrupted(
|
| + layer->element_id());
|
| }
|
|
|
| bool LayerTreeHost::IsAnimatingFilterProperty(const Layer* layer) const {
|
| - return animation_host_->IsAnimatingFilterProperty(layer->id(),
|
| + return animation_host_->IsAnimatingFilterProperty(layer->element_id(),
|
| ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::IsAnimatingOpacityProperty(const Layer* layer) const {
|
| - return animation_host_->IsAnimatingOpacityProperty(layer->id(),
|
| + return animation_host_->IsAnimatingOpacityProperty(layer->element_id(),
|
| ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::IsAnimatingTransformProperty(const Layer* layer) const {
|
| - return animation_host_->IsAnimatingTransformProperty(layer->id(),
|
| + return animation_host_->IsAnimatingTransformProperty(layer->element_id(),
|
| ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::HasPotentiallyRunningFilterAnimation(
|
| const Layer* layer) const {
|
| return animation_host_->HasPotentiallyRunningFilterAnimation(
|
| - layer->id(), ElementListType::ACTIVE);
|
| + layer->element_id(), ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::HasPotentiallyRunningOpacityAnimation(
|
| const Layer* layer) const {
|
| return animation_host_->HasPotentiallyRunningOpacityAnimation(
|
| - layer->id(), ElementListType::ACTIVE);
|
| + layer->element_id(), ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::HasPotentiallyRunningTransformAnimation(
|
| const Layer* layer) const {
|
| 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(),
|
| + return animation_host_->HasOnlyTranslationTransforms(layer->element_id(),
|
| ElementListType::ACTIVE);
|
| }
|
|
|
| bool LayerTreeHost::MaximumTargetScale(const Layer* layer,
|
| float* max_scale) const {
|
| 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 {
|
| 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(),
|
| + return animation_host_->HasAnyAnimationTargetingProperty(layer->element_id(),
|
| property);
|
| }
|
|
|
| bool LayerTreeHost::AnimationsPreserveAxisAlignment(const Layer* layer) const {
|
| - return animation_host_->AnimationsPreserveAxisAlignment(layer->id());
|
| + return animation_host_->AnimationsPreserveAxisAlignment(layer->element_id());
|
| }
|
|
|
| bool LayerTreeHost::HasAnyAnimation(const Layer* layer) const {
|
| - return animation_host_->HasAnyAnimation(layer->id());
|
| + return animation_host_->HasAnyAnimation(layer->element_id());
|
| }
|
|
|
| bool LayerTreeHost::HasActiveAnimationForTesting(const Layer* layer) const {
|
| - return animation_host_->HasActiveAnimationForTesting(layer->id());
|
| + return animation_host_->HasActiveAnimationForTesting(layer->element_id());
|
| }
|
|
|
| bool LayerTreeHost::IsSingleThreaded() const {
|
|
|