| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index 86be523f5ff2e678b2b0696ff9584f4bf267394a..3834f74a801f03beae9fc8a84f2c86c8b4b8ea0c 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/trace_event/trace_event_argument.h"
|
| #include "cc/animation/animation_host.h"
|
| #include "cc/animation/keyframed_animation_curve.h"
|
| +#include "cc/animation/mutable_properties.h"
|
| #include "cc/animation/scrollbar_animation_controller.h"
|
| #include "cc/animation/scrollbar_animation_controller_linear_fade.h"
|
| #include "cc/animation/scrollbar_animation_controller_thinning.h"
|
| @@ -46,6 +47,15 @@
|
|
|
| namespace cc {
|
|
|
| +namespace {
|
| +
|
| +const uint32_t kMainLayerFlags =
|
| + kMutablePropertyOpacity | kMutablePropertyTransform;
|
| +const uint32_t kScrollLayerFlags =
|
| + kMutablePropertyScrollLeft | kMutablePropertyScrollTop;
|
| +
|
| +} // namespace
|
| +
|
| LayerTreeImpl::LayerTreeImpl(
|
| LayerTreeHostImpl* layer_tree_host_impl,
|
| scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor,
|
| @@ -359,6 +369,54 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
|
|
|
| target_tree->has_ever_been_drawn_ = false;
|
| }
|
| +void LayerTreeImpl::AddToElementMap(LayerImpl* layer) {
|
| + if (!layer->element_id())
|
| + return;
|
| +
|
| + TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
|
| + "LayerTreeImpl::AddToElementMap", "element_id",
|
| + layer->element_id(), "layer_id", layer->id());
|
| +
|
| + ElementLayers& layers = element_layers_map_[layer->element_id()];
|
| + if (layer->mutable_properties() & kMainLayerFlags) {
|
| + if (!layers.main || layer->IsActive())
|
| + layers.main = layer;
|
| + }
|
| + if (layer->mutable_properties() & kScrollLayerFlags) {
|
| + if (!layers.scroll || layer->IsActive()) {
|
| + TRACE_EVENT2("compositor-worker", "LayerTreeImpl::AddToElementMap scroll",
|
| + "element_id", layer->element_id(), "layer_id", layer->id());
|
| + layers.scroll = layer;
|
| + }
|
| + }
|
| +}
|
| +
|
| +void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) {
|
| + if (!layer->element_id())
|
| + return;
|
| +
|
| + TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
|
| + "LayerTreeImpl::RemoveFromElementMap", "element_id",
|
| + layer->element_id(), "layer_id", layer->id());
|
| +
|
| + ElementLayers& layers = element_layers_map_[layer->element_id()];
|
| + if (layer->mutable_properties() & kMainLayerFlags)
|
| + layers.main = nullptr;
|
| + if (layer->mutable_properties() & kScrollLayerFlags)
|
| + layers.scroll = nullptr;
|
| +
|
| + if (!layers.main && !layers.scroll)
|
| + element_layers_map_.erase(layer->element_id());
|
| +}
|
| +
|
| +LayerTreeImpl::ElementLayers LayerTreeImpl::GetMutableLayers(
|
| + uint64_t element_id) {
|
| + auto iter = element_layers_map_.find(element_id);
|
| + if (iter == element_layers_map_.end())
|
| + return ElementLayers();
|
| +
|
| + return iter->second;
|
| +}
|
|
|
| LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const {
|
| return InnerViewportScrollLayer()
|
|
|