summaryrefslogtreecommitdiffstats
path: root/chromium/cc/trees/layer_tree_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/trees/layer_tree_impl.h')
-rw-r--r--chromium/cc/trees/layer_tree_impl.h153
1 files changed, 78 insertions, 75 deletions
diff --git a/chromium/cc/trees/layer_tree_impl.h b/chromium/cc/trees/layer_tree_impl.h
index 666701c4360..7cb74373eba 100644
--- a/chromium/cc/trees/layer_tree_impl.h
+++ b/chromium/cc/trees/layer_tree_impl.h
@@ -162,15 +162,17 @@ class CC_EXPORT LayerTreeImpl {
// Other public methods
// ---------------------------------------------------------------------------
- LayerImpl* root_layer_for_testing() {
- return layer_list_.empty() ? nullptr : layer_list_[0];
+ LayerImpl* root_layer() {
+ return layer_list_.empty() ? nullptr : layer_list_[0].get();
}
const RenderSurfaceImpl* RootRenderSurface() const;
bool LayerListIsEmpty() const;
void SetRootLayerForTesting(std::unique_ptr<LayerImpl>);
void OnCanDrawStateChangedForTree();
bool IsRootLayer(const LayerImpl* layer) const;
- std::unique_ptr<OwnedLayerImplList> DetachLayers();
+
+ OwnedLayerImplList DetachLayers();
+ OwnedLayerImplList DetachLayersKeepingRootLayerForTesting();
void SetPropertyTrees(PropertyTrees* property_trees);
PropertyTrees* property_trees() {
@@ -189,12 +191,36 @@ class CC_EXPORT LayerTreeImpl {
void ForceRecalculateRasterScales();
- LayerImplList::const_iterator begin() const;
- LayerImplList::const_iterator end() const;
- LayerImplList::const_reverse_iterator rbegin() const;
- LayerImplList::const_reverse_iterator rend() const;
- LayerImplList::reverse_iterator rbegin();
- LayerImplList::reverse_iterator rend();
+ // Adapts an iterator of std::unique_ptr<LayerImpl> to an iterator of
+ // LayerImpl*.
+ template <typename Iterator>
+ class IteratorAdapter
+ : public std::iterator<std::forward_iterator_tag, LayerImpl*> {
+ public:
+ explicit IteratorAdapter(Iterator it) : it_(it) {}
+ bool operator==(IteratorAdapter o) const { return it_ == o.it_; }
+ bool operator!=(IteratorAdapter o) const { return !(*this == o); }
+ LayerImpl* operator*() const { return it_->get(); }
+ LayerImpl* operator->() const { return it_->get(); }
+ IteratorAdapter& operator++() {
+ ++it_;
+ return *this;
+ }
+
+ private:
+ Iterator it_;
+ };
+ using const_iterator = IteratorAdapter<OwnedLayerImplList::const_iterator>;
+ using const_reverse_iterator =
+ IteratorAdapter<OwnedLayerImplList::const_reverse_iterator>;
+ const_iterator begin() const { return const_iterator(layer_list_.cbegin()); }
+ const_iterator end() const { return const_iterator(layer_list_.cend()); }
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(layer_list_.crbegin());
+ }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(layer_list_.crend());
+ }
void SetTransformMutated(ElementId element_id,
const gfx::Transform& transform);
@@ -251,66 +277,47 @@ class CC_EXPORT LayerTreeImpl {
return !presentation_callbacks_.empty();
}
- ScrollNode* CurrentlyScrollingNode();
- const ScrollNode* CurrentlyScrollingNode() const;
- int LastScrolledScrollNodeIndex() const;
- void SetCurrentlyScrollingNode(const ScrollNode* node);
- void ClearCurrentlyScrollingNode();
+ using ViewportPropertyIds = LayerTreeHost::ViewportPropertyIds;
+ void SetViewportPropertyIds(const ViewportPropertyIds& ids);
- struct ViewportLayerIds {
- ElementId overscroll_elasticity_element_id;
- int page_scale = Layer::INVALID_ID;
- int inner_viewport_container = Layer::INVALID_ID;
- int outer_viewport_container = Layer::INVALID_ID;
- int inner_viewport_scroll = Layer::INVALID_ID;
- int outer_viewport_scroll = Layer::INVALID_ID;
-
- bool operator==(const ViewportLayerIds& other) {
- return overscroll_elasticity_element_id ==
- other.overscroll_elasticity_element_id &&
- page_scale == other.page_scale &&
- inner_viewport_container == other.inner_viewport_container &&
- outer_viewport_container == other.outer_viewport_container &&
- inner_viewport_scroll == other.inner_viewport_scroll &&
- outer_viewport_scroll == other.outer_viewport_scroll;
- }
- };
- void SetViewportLayersFromIds(const ViewportLayerIds& viewport_layer_ids);
- void ClearViewportLayers();
- ElementId OverscrollElasticityElementId() const {
- return viewport_layer_ids_.overscroll_elasticity_element_id;
- }
- LayerImpl* PageScaleLayer() const {
- return LayerById(viewport_layer_ids_.page_scale);
- }
- LayerImpl* InnerViewportContainerLayer() const {
- return LayerById(viewport_layer_ids_.inner_viewport_container);
- }
- LayerImpl* OuterViewportContainerLayer() const {
- return LayerById(viewport_layer_ids_.outer_viewport_container);
- }
- LayerImpl* InnerViewportScrollLayer() const {
- return LayerById(viewport_layer_ids_.inner_viewport_scroll);
+ const TransformNode* OverscrollElasticityTransformNode() const;
+ TransformNode* OverscrollElasticityTransformNode() {
+ return const_cast<TransformNode*>(
+ const_cast<const LayerTreeImpl*>(this)
+ ->OverscrollElasticityTransformNode());
}
- LayerImpl* OuterViewportScrollLayer() const {
- return LayerById(viewport_layer_ids_.outer_viewport_scroll);
+ const TransformNode* PageScaleTransformNode() const;
+ TransformNode* PageScaleTransformNode() {
+ return const_cast<TransformNode*>(
+ const_cast<const LayerTreeImpl*>(this)->PageScaleTransformNode());
}
-
const ScrollNode* InnerViewportScrollNode() const;
ScrollNode* InnerViewportScrollNode() {
return const_cast<ScrollNode*>(
const_cast<const LayerTreeImpl*>(this)->InnerViewportScrollNode());
}
+ const ClipNode* OuterViewportClipNode() const;
+ ClipNode* OuterViewportClipNode() {
+ return const_cast<ClipNode*>(
+ const_cast<const LayerTreeImpl*>(this)->OuterViewportClipNode());
+ }
const ScrollNode* OuterViewportScrollNode() const;
ScrollNode* OuterViewportScrollNode() {
return const_cast<ScrollNode*>(
const_cast<const LayerTreeImpl*>(this)->OuterViewportScrollNode());
}
- void set_viewport_property_ids(
- const LayerTreeHost::ViewportPropertyIds& ids) {
- viewport_property_ids_ = ids;
+ LayerTreeHost::ViewportPropertyIds ViewportPropertyIdsForTesting() const {
+ return viewport_property_ids_;
}
+ LayerImpl* InnerViewportScrollLayerForTesting() const;
+ LayerImpl* OuterViewportScrollLayerForTesting() const;
+
+ ScrollNode* CurrentlyScrollingNode();
+ const ScrollNode* CurrentlyScrollingNode() const;
+ int LastScrolledScrollNodeIndex() const;
+ void SetCurrentlyScrollingNode(const ScrollNode* node);
+ void ClearCurrentlyScrollingNode();
void ApplySentScrollAndScaleDeltasFromAbortedCommit();
@@ -408,16 +415,19 @@ class CC_EXPORT LayerTreeImpl {
const SyncedBrowserControls* top_controls_shown_ratio() const {
return top_controls_shown_ratio_.get();
}
+ gfx::Vector2dF current_elastic_overscroll() const {
+ return elastic_overscroll()->Current(IsActiveTree());
+ }
void SetElementIdsForTesting();
// Updates draw properties and render surface layer list, as well as tile
// priorities. Returns false if it was unable to update. Updating lcd
// text may cause invalidations, so should only be done after a commit.
- bool UpdateDrawProperties(bool update_image_animation_controller = true);
+ bool UpdateDrawProperties(
+ bool update_image_animation_controller = true,
+ LayerImplList* output_update_layer_list_for_testing = nullptr);
void UpdateCanUseLCDText();
- void BuildPropertyTreesForTesting();
- void BuildLayerListAndPropertyTreesForTesting();
void set_needs_update_draw_properties() {
needs_update_draw_properties_ = true;
@@ -462,8 +472,6 @@ class CC_EXPORT LayerTreeImpl {
LayerImpl* ScrollableLayerByElementId(ElementId element_id) const;
bool IsElementInPropertyTree(ElementId element_id) const;
- void AddToElementPropertyTreeList(ElementId element_id);
- void RemoveFromElementPropertyTreeList(ElementId element_id);
void AddToElementLayerList(ElementId element_id, LayerImpl* layer);
void RemoveFromElementLayerList(ElementId element_id);
@@ -484,9 +492,8 @@ class CC_EXPORT LayerTreeImpl {
void RegisterLayer(LayerImpl* layer);
void UnregisterLayer(LayerImpl* layer);
- // These manage ownership of the LayerImpl.
+ // Append a layer to the list.
void AddLayer(std::unique_ptr<LayerImpl> layer);
- std::unique_ptr<LayerImpl> RemoveLayer(int id);
size_t NumLayers();
@@ -646,12 +653,6 @@ class CC_EXPORT LayerTreeImpl {
void ResetAllChangeTracking();
- void AddToLayerList(LayerImpl* layer);
-
- void ClearLayerList();
-
- void BuildLayerListForTesting();
-
void HandleTickmarksVisibilityChange();
void HandleScrollbarShowRequestsFromMain();
@@ -663,14 +664,15 @@ class CC_EXPORT LayerTreeImpl {
LayerTreeLifecycle& lifecycle() { return lifecycle_; }
std::string LayerListAsJson() const;
- // TODO(pdr): This should be removed because there is no longer a tree
- // of layers, only a list.
- std::string LayerTreeAsJson() const;
AnimatedPaintWorkletTracker& paint_worklet_tracker() {
return host_impl_->paint_worklet_tracker();
}
+ const gfx::Transform& DrawTransform() const {
+ return host_impl_->DrawTransform();
+ }
+
protected:
float ClampPageScaleFactorToLimits(float page_scale_factor) const;
void PushPageScaleFactorAndLimits(const float* page_scale_factor,
@@ -685,7 +687,6 @@ class CC_EXPORT LayerTreeImpl {
private:
friend class LayerTreeHost;
- TransformNode* PageScaleTransformNode();
void UpdatePageScaleNode();
ElementListType GetElementTypeForAnimation() const;
@@ -698,14 +699,12 @@ class CC_EXPORT LayerTreeImpl {
LayerTreeHostImpl* host_impl_;
int source_frame_number_;
int is_first_frame_after_commit_tracker_;
- LayerImpl* root_layer_for_testing_;
HeadsUpDisplayLayerImpl* hud_layer_;
PropertyTrees property_trees_;
SkColor background_color_;
int last_scrolled_scroll_node_index_;
- ViewportLayerIds viewport_layer_ids_;
LayerTreeHost::ViewportPropertyIds viewport_property_ids_;
LayerSelection selection_;
@@ -728,9 +727,13 @@ class CC_EXPORT LayerTreeImpl {
scoped_refptr<SyncedElasticOverscroll> elastic_overscroll_;
- std::unique_ptr<OwnedLayerImplList> layers_;
+ // TODO(wangxianzhu): Combine layers_ and layer_list_ when we remove
+ // support of mask layers.
+
+ OwnedLayerImplList layer_list_;
+ // Maps from layer id to layer.
LayerImplMap layer_id_map_;
- LayerImplList layer_list_;
+
// Set of layers that need to push properties.
base::flat_set<LayerImpl*> layers_that_should_push_properties_;