Chromium Code Reviews| Index: cc/trees/layer_tree_impl.cc |
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
| index 622894949aca12fb11f1604c9593ff5ee45130d4..2ddbcd26611d55f69e8f9ee2877f80cf22cef265 100644 |
| --- a/cc/trees/layer_tree_impl.cc |
| +++ b/cc/trees/layer_tree_impl.cc |
| @@ -14,6 +14,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" |
| @@ -42,6 +43,30 @@ |
| namespace cc { |
| +namespace { |
| + |
| +const uint32_t kMainLayerFlags = |
|
enne (OOO)
2015/11/16 19:12:33
What does "main" here mean?
Ian Vollick
2015/11/18 17:20:33
Added comments in the header. It's analogous to m_
|
| + kMutablePropertyOpacity | kMutablePropertyTransform; |
| +const uint32_t kScrollLayerFlags = |
| + kMutablePropertyScrollLeft | kMutablePropertyScrollTop; |
| +const uint32_t kMainLayerIndex = 0; |
|
enne (OOO)
2015/11/16 19:12:33
Do you expect to have more layer types? It looks a
Ian Vollick
2015/11/18 17:20:33
It is odd. The whole ElementLayers class was wonky
|
| +const uint32_t kScrollLayerIndex = 1; |
| + |
| +} // namespace |
| + |
| +class ElementLayers { |
| + public: |
| + ElementLayers() { |
| + layers[0] = nullptr; |
| + layers[1] = nullptr; |
| + } |
| + LayerImpl*& main() { return layers[kMainLayerIndex]; } |
| + LayerImpl*& scroll() { return layers[kScrollLayerIndex]; } |
| + |
| + private: |
| + LayerImpl* layers[2]; |
|
esprehn
2015/11/16 20:01:04
just add two members, why use an array? Also this
Ian Vollick
2015/11/18 17:20:33
Agreed. Updated.
|
| +}; |
| + |
| LayerTreeImpl::LayerTreeImpl( |
| LayerTreeHostImpl* layer_tree_host_impl, |
| scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
| @@ -353,6 +378,49 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| target_tree->has_ever_been_drawn_ = false; |
| } |
| +void LayerTreeImpl::AddToElementMap(LayerImpl* layer) { |
| + 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; |
|
esprehn
2015/11/16 20:01:04
this is very weird, why not just make the fields p
Ian Vollick
2015/11/18 17:20:33
Done.
|
| + } |
| + 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) { |
| + 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()); |
| +} |
| + |
| +bool LayerTreeImpl::GetMutableLayers(uint64_t element_id, |
| + LayerImpl** main_layer, |
| + LayerImpl** scroll_layer) { |
| + auto iter = element_layers_map_.find(element_id); |
| + if (iter == element_layers_map_.end()) |
| + return false; |
| + |
| + *main_layer = iter->second.main(); |
| + *scroll_layer = iter->second.scroll(); |
|
esprehn
2015/11/16 20:01:04
just return the ElementLayers object by value, it'
Ian Vollick
2015/11/18 17:20:33
Done.
|
| + return true; |
| +} |
| LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { |
| return InnerViewportScrollLayer() |