Index: cc/blimp/compositor_state_deserializer.h |
diff --git a/cc/blimp/compositor_state_deserializer.h b/cc/blimp/compositor_state_deserializer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5357bcf5c5da81a3c0846b456f19b5c08a7dba97 |
--- /dev/null |
+++ b/cc/blimp/compositor_state_deserializer.h |
@@ -0,0 +1,77 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CC_BLIMP_COMPOSITOR_STATE_DESERIALIZER_H_ |
+#define CC_BLIMP_COMPOSITOR_STATE_DESERIALIZER_H_ |
+ |
+#include <unordered_map> |
+ |
+#include "base/callback.h" |
+#include "base/macros.h" |
+#include "cc/base/cc_export.h" |
+ |
+namespace cc { |
+namespace proto { |
+class LayerNode; |
+class LayerProperties; |
+class LayerTree; |
+class LayerTreeHost; |
+} // namespace proto |
+ |
+class CompositorStateDeserializerClient; |
+class Layer; |
+class LayerFactory; |
+class LayerTreeHost; |
+ |
+// Deserializes the compositor updates into the LayerTreeHost. |
+class CC_EXPORT CompositorStateDeserializer { |
+ public: |
+ // ScrollCallback used to notify the client when the scroll offset for a layer |
+ // is updated. |
+ using ScrollCallback = base::Callback<void(int engine_layer_id)>; |
+ |
+ CompositorStateDeserializer(LayerTreeHost* layer_tree_host, |
+ ScrollCallback scroll_callback, |
+ CompositorStateDeserializerClient* client); |
+ ~CompositorStateDeserializer(); |
+ |
+ // Returns the local layer on the client for the given |engine_layer_id|. |
+ Layer* GetLayerForEngineId(int engine_layer_id) const; |
+ |
+ // Deserializes the |layer_tree_host_proto| into the LayerTreeHost. |
+ void DeserializeCompositorUpdate( |
+ const proto::LayerTreeHost& layer_tree_host_proto); |
+ |
+ // Allows tests to inject the LayerFactory. |
+ void SetLayerFactoryForTesting(std::unique_ptr<LayerFactory> layer_factory); |
+ |
+ private: |
+ using EngineIdToLayerMap = std::unordered_map<int, scoped_refptr<Layer>>; |
+ |
+ void SychronizeLayerTreeState(const proto::LayerTree& layer_tree_proto); |
+ void SynchronizeLayerState( |
+ const proto::LayerProperties& layer_properties_proto); |
+ void SynchronizeLayerHierarchyRecursive(Layer* layer, |
+ const proto::LayerNode& layer_node, |
+ EngineIdToLayerMap* new_layer_map); |
+ scoped_refptr<Layer> GetLayerAndAddToNewMap( |
+ const proto::LayerNode& layer_node, |
+ EngineIdToLayerMap* new_layer_map); |
+ |
+ int GetClientIdFromEngineId(int engine_layer_id); |
+ scoped_refptr<Layer> GetLayer(int engine_layer_id); |
+ |
+ std::unique_ptr<LayerFactory> layer_factory_; |
+ LayerTreeHost* layer_tree_host_; |
+ ScrollCallback scroll_callback_; |
+ CompositorStateDeserializerClient* client_; |
+ |
+ EngineIdToLayerMap engine_id_to_layer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CompositorStateDeserializer); |
+}; |
+ |
+} // namespace cc |
+ |
+#endif // CC_BLIMP_COMPOSITOR_STATE_DESERIALIZER_H_ |