Index: cc/trees/layer_tree.h |
diff --git a/cc/trees/layer_tree.h b/cc/trees/layer_tree.h |
index bb7e3d2adbf9af2cae7c996edfa1617bc75cf454..6f1f916372511a39b872829814bd86500b917738 100644 |
--- a/cc/trees/layer_tree.h |
+++ b/cc/trees/layer_tree.h |
@@ -5,30 +5,121 @@ |
#ifndef CC_TREES_LAYER_TREE_H_ |
#define CC_TREES_LAYER_TREE_H_ |
+#include <memory> |
+ |
#include <unordered_map> |
#include <unordered_set> |
- |
#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
#include "cc/base/cc_export.h" |
+#include "cc/input/event_listener_properties.h" |
+#include "cc/input/layer_selection_bound.h" |
+#include "cc/layers/layer_collections.h" |
+#include "cc/trees/property_tree.h" |
+#include "third_party/skia/include/core/SkColor.h" |
+#include "ui/gfx/geometry/size.h" |
+ |
+namespace base { |
+class TimeDelta; |
+} // namespace base |
namespace cc { |
namespace proto { |
class LayerTree; |
class LayerUpdate; |
-} |
+} // namespace proto |
class AnimationHost; |
+class HeadsUpDisplayLayer; |
class Layer; |
+class LayerTreeHost; |
+class LayerTreeImpl; |
+struct PendingPageScaleAnimation; |
class CC_EXPORT LayerTree { |
public: |
using LayerSet = std::unordered_set<Layer*>; |
using LayerIdMap = std::unordered_map<int, Layer*>; |
- explicit LayerTree(std::unique_ptr<AnimationHost> animation_host); |
- ~LayerTree(); |
+ LayerTree(std::unique_ptr<AnimationHost> animation_host, |
+ LayerTreeHost* layer_tree_host); |
+ virtual ~LayerTree(); |
+ |
+ void SetRootLayer(scoped_refptr<Layer> root_layer); |
+ Layer* root_layer() { return inputs_.root_layer.get(); } |
+ const Layer* root_layer() const { return inputs_.root_layer.get(); } |
+ |
+ void RegisterViewportLayers(scoped_refptr<Layer> overscroll_elasticity_layer, |
+ scoped_refptr<Layer> page_scale_layer, |
+ scoped_refptr<Layer> inner_viewport_scroll_layer, |
+ scoped_refptr<Layer> outer_viewport_scroll_layer); |
+ |
+ Layer* overscroll_elasticity_layer() const { |
+ return inputs_.overscroll_elasticity_layer.get(); |
+ } |
+ Layer* page_scale_layer() const { return inputs_.page_scale_layer.get(); } |
+ Layer* inner_viewport_scroll_layer() const { |
+ return inputs_.inner_viewport_scroll_layer.get(); |
+ } |
+ Layer* outer_viewport_scroll_layer() const { |
+ return inputs_.outer_viewport_scroll_layer.get(); |
+ } |
+ |
+ void RegisterSelection(const LayerSelection& selection); |
+ |
+ void SetHaveScrollEventHandlers(bool have_event_handlers); |
+ bool have_scroll_event_handlers() const { |
+ return inputs_.have_scroll_event_handlers; |
+ } |
+ |
+ void SetEventListenerProperties(EventListenerClass event_class, |
+ EventListenerProperties event_properties); |
+ EventListenerProperties event_listener_properties( |
+ EventListenerClass event_class) const { |
+ return inputs_.event_listener_properties[static_cast<size_t>(event_class)]; |
+ } |
+ |
+ void SetViewportSize(const gfx::Size& device_viewport_size); |
+ gfx::Size device_viewport_size() const { |
+ return inputs_.device_viewport_size; |
+ } |
+ |
+ void SetTopControlsHeight(float height, bool shrink); |
+ void SetTopControlsShownRatio(float ratio); |
+ |
+ void SetPageScaleFactorAndLimits(float page_scale_factor, |
+ float min_page_scale_factor, |
+ float max_page_scale_factor); |
+ float page_scale_factor() const { return inputs_.page_scale_factor; } |
+ |
+ void set_background_color(SkColor color) { inputs_.background_color = color; } |
+ SkColor background_color() const { return inputs_.background_color; } |
+ |
+ void set_has_transparent_background(bool transparent) { |
+ inputs_.has_transparent_background = transparent; |
+ } |
+ |
+ void StartPageScaleAnimation(const gfx::Vector2d& target_offset, |
+ bool use_anchor, |
+ float scale, |
+ base::TimeDelta duration); |
+ bool HasPendingPageScaleAnimation() const; |
+ |
+ void SetDeviceScaleFactor(float device_scale_factor); |
+ float device_scale_factor() const { return inputs_.device_scale_factor; } |
+ |
+ void SetPaintedDeviceScaleFactor(float painted_device_scale_factor); |
+ |
+ AnimationHost* animation_host() const { return animation_host_.get(); } |
+ |
+ gfx::Vector2dF elastic_overscroll() const { return elastic_overscroll_; } |
+ // Used externally by blink for setting the PropertyTrees when |
+ // |settings_.use_layer_lists| is true. This is a SPV2 setting. |
+ PropertyTrees* property_trees() { return &property_trees_; } |
+ |
+ // Methods which should only be used internally in cc ------------------ |
void RegisterLayer(Layer* layer); |
void UnregisterLayer(Layer* layer); |
Layer* LayerById(int id) const; |
@@ -40,16 +131,82 @@ class CC_EXPORT LayerTree { |
std::unordered_set<Layer*>& LayersThatShouldPushProperties(); |
bool LayerNeedsPushPropertiesForTesting(Layer* layer) const; |
+ virtual void SetNeedsMetaInfoRecomputation( |
+ bool needs_meta_info_recomputation); |
+ bool needs_meta_info_recomputation() const { |
+ return needs_meta_info_recomputation_; |
+ } |
+ |
+ void SetPageScaleFromImplSide(float page_scale); |
+ void SetElasticOverscrollFromImplSide(gfx::Vector2dF elastic_overscroll); |
+ |
+ void UpdateHudLayer(bool show_hud_info); |
+ HeadsUpDisplayLayer* hud_layer() const { return hud_layer_.get(); } |
+ |
+ virtual void SetNeedsFullTreeSync(); |
+ bool needs_full_tree_sync() const { return needs_full_tree_sync_; } |
+ |
+ void SetNeedsCommit(); |
+ void SetPropertyTreesNeedRebuild(); |
+ |
+ void PushPropertiesTo(LayerTreeImpl* tree_impl); |
+ |
void ToProtobuf(proto::LayerTree* proto); |
void FromProtobuf(const proto::LayerTree& proto); |
- AnimationHost* animation_host() const { return animation_host_.get(); } |
- |
bool in_paint_layer_contents() const { return in_paint_layer_contents_; } |
+ // --------------------------------------------------------------------- |
private: |
friend class LayerTreeHostSerializationTest; |
+ // Encapsulates the data, callbacks, interfaces received from the embedder. |
+ struct Inputs { |
+ Inputs(); |
+ ~Inputs(); |
+ |
+ scoped_refptr<Layer> root_layer; |
+ |
+ scoped_refptr<Layer> overscroll_elasticity_layer; |
+ scoped_refptr<Layer> page_scale_layer; |
+ scoped_refptr<Layer> inner_viewport_scroll_layer; |
+ scoped_refptr<Layer> outer_viewport_scroll_layer; |
+ |
+ float top_controls_height; |
+ float top_controls_shown_ratio; |
+ bool top_controls_shrink_blink_size; |
+ |
+ float device_scale_factor; |
+ float painted_device_scale_factor; |
+ float page_scale_factor; |
+ float min_page_scale_factor; |
+ float max_page_scale_factor; |
+ |
+ SkColor background_color; |
+ bool has_transparent_background; |
+ |
+ LayerSelection selection; |
+ |
+ gfx::Size device_viewport_size; |
+ |
+ bool have_scroll_event_handlers; |
+ EventListenerProperties event_listener_properties[static_cast<size_t>( |
+ EventListenerClass::kNumClasses)]; |
+ |
+ std::unique_ptr<PendingPageScaleAnimation> pending_page_scale_animation; |
+ }; |
+ |
+ Inputs inputs_; |
+ |
+ PropertyTrees property_trees_; |
+ |
+ bool needs_full_tree_sync_; |
+ bool needs_meta_info_recomputation_; |
+ |
+ gfx::Vector2dF elastic_overscroll_; |
+ |
+ scoped_refptr<HeadsUpDisplayLayer> hud_layer_; |
+ |
// Set of layers that need to push properties. |
LayerSet layers_that_should_push_properties_; |
@@ -59,6 +216,7 @@ class CC_EXPORT LayerTree { |
bool in_paint_layer_contents_; |
std::unique_ptr<AnimationHost> animation_host_; |
+ LayerTreeHost* layer_tree_host_; |
DISALLOW_COPY_AND_ASSIGN(LayerTree); |
}; |