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

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 1447893002: compositor-worker: Introduce WebCompositorMutableState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 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()

Powered by Google App Engine
This is Rietveld 408576698