OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_TREES_LAYER_TREE_IMPL_H_ | 5 #ifndef CC_TREES_LAYER_TREE_IMPL_H_ |
6 #define CC_TREES_LAYER_TREE_IMPL_H_ | 6 #define CC_TREES_LAYER_TREE_IMPL_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 class ResourceProvider; | 47 class ResourceProvider; |
48 class TileManager; | 48 class TileManager; |
49 class UIResourceRequest; | 49 class UIResourceRequest; |
50 class VideoFrameControllerClient; | 50 class VideoFrameControllerClient; |
51 struct PendingPageScaleAnimation; | 51 struct PendingPageScaleAnimation; |
52 | 52 |
53 typedef std::vector<UIResourceRequest> UIResourceRequestQueue; | 53 typedef std::vector<UIResourceRequest> UIResourceRequestQueue; |
54 typedef SyncedProperty<AdditionGroup<float>> SyncedBrowserControls; | 54 typedef SyncedProperty<AdditionGroup<float>> SyncedBrowserControls; |
55 typedef SyncedProperty<AdditionGroup<gfx::Vector2dF>> SyncedElasticOverscroll; | 55 typedef SyncedProperty<AdditionGroup<gfx::Vector2dF>> SyncedElasticOverscroll; |
56 | 56 |
| 57 class LayerTreeLifecycle { |
| 58 public: |
| 59 enum LifecycleState { |
| 60 kNotSyncing, |
| 61 |
| 62 // The following states are the steps performed when syncing properties to |
| 63 // this tree (see: LayerTreeHost::FinishCommitOnImplThread or |
| 64 // LayerTreeHostImpl::ActivateSyncTree). |
| 65 kBeginningSync, |
| 66 kSyncedPropertyTrees, |
| 67 kSyncedLayerProperties, |
| 68 kLastSyncState = kSyncedLayerProperties, |
| 69 |
| 70 // TODO(pdr): Add states to cover more than just the synchronization steps. |
| 71 }; |
| 72 |
| 73 void AdvanceTo(LifecycleState); |
| 74 |
| 75 bool AllowsPropertyTreeAccess() const { |
| 76 return state_ == kNotSyncing || state_ >= kSyncedPropertyTrees; |
| 77 } |
| 78 bool AllowsLayerPropertyAccess() const { |
| 79 return state_ == kNotSyncing || state_ >= kSyncedLayerProperties; |
| 80 } |
| 81 |
| 82 private: |
| 83 LifecycleState state_ = kNotSyncing; |
| 84 }; |
| 85 |
57 class CC_EXPORT LayerTreeImpl { | 86 class CC_EXPORT LayerTreeImpl { |
58 public: | 87 public: |
59 // This is the number of times a fixed point has to be hit continuously by a | 88 // This is the number of times a fixed point has to be hit continuously by a |
60 // layer to consider it as jittering. | 89 // layer to consider it as jittering. |
61 enum : int { kFixedPointHitsThreshold = 3 }; | 90 enum : int { kFixedPointHitsThreshold = 3 }; |
62 LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl, | 91 LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl, |
63 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 92 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
64 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, | 93 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, |
65 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll); | 94 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll); |
66 virtual ~LayerTreeImpl(); | 95 virtual ~LayerTreeImpl(); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 return layer_list_.empty() ? nullptr : layer_list_[0]; | 152 return layer_list_.empty() ? nullptr : layer_list_[0]; |
124 } | 153 } |
125 const RenderSurfaceImpl* RootRenderSurface() const; | 154 const RenderSurfaceImpl* RootRenderSurface() const; |
126 bool LayerListIsEmpty() const; | 155 bool LayerListIsEmpty() const; |
127 void SetRootLayerForTesting(std::unique_ptr<LayerImpl>); | 156 void SetRootLayerForTesting(std::unique_ptr<LayerImpl>); |
128 void OnCanDrawStateChangedForTree(); | 157 void OnCanDrawStateChangedForTree(); |
129 bool IsRootLayer(const LayerImpl* layer) const; | 158 bool IsRootLayer(const LayerImpl* layer) const; |
130 std::unique_ptr<OwnedLayerImplList> DetachLayers(); | 159 std::unique_ptr<OwnedLayerImplList> DetachLayers(); |
131 | 160 |
132 void SetPropertyTrees(PropertyTrees* property_trees); | 161 void SetPropertyTrees(PropertyTrees* property_trees); |
133 PropertyTrees* property_trees() { return &property_trees_; } | 162 PropertyTrees* property_trees() { |
| 163 // TODO(pdr): We should enable this DCHECK because it will catch uses of |
| 164 // stale property trees, but it currently fails too many existing tests. |
| 165 // DCHECK(lifecycle().AllowsPropertyTreeAccess()); |
| 166 return &property_trees_; |
| 167 } |
134 | 168 |
| 169 void PushPropertyTreesTo(LayerTreeImpl* tree_impl); |
135 void PushPropertiesTo(LayerTreeImpl* tree_impl); | 170 void PushPropertiesTo(LayerTreeImpl* tree_impl); |
136 | 171 |
137 void MoveChangeTrackingToLayers(); | 172 void MoveChangeTrackingToLayers(); |
138 | 173 |
139 void ForceRecalculateRasterScales(); | 174 void ForceRecalculateRasterScales(); |
140 | 175 |
141 LayerImplList::const_iterator begin() const; | 176 LayerImplList::const_iterator begin() const; |
142 LayerImplList::const_iterator end() const; | 177 LayerImplList::const_iterator end() const; |
143 LayerImplList::reverse_iterator rbegin(); | 178 LayerImplList::reverse_iterator rbegin(); |
144 LayerImplList::reverse_iterator rend(); | 179 LayerImplList::reverse_iterator rend(); |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 | 495 |
461 void AddToLayerList(LayerImpl* layer); | 496 void AddToLayerList(LayerImpl* layer); |
462 | 497 |
463 void ClearLayerList(); | 498 void ClearLayerList(); |
464 | 499 |
465 void BuildLayerListForTesting(); | 500 void BuildLayerListForTesting(); |
466 void HandleScrollbarShowRequestsFromMain(); | 501 void HandleScrollbarShowRequestsFromMain(); |
467 | 502 |
468 void InvalidateRegionForImages(const ImageIdFlatSet& images_to_invalidate); | 503 void InvalidateRegionForImages(const ImageIdFlatSet& images_to_invalidate); |
469 | 504 |
| 505 LayerTreeLifecycle& lifecycle() { return lifecycle_; } |
| 506 |
470 protected: | 507 protected: |
471 float ClampPageScaleFactorToLimits(float page_scale_factor) const; | 508 float ClampPageScaleFactorToLimits(float page_scale_factor) const; |
472 void PushPageScaleFactorAndLimits(const float* page_scale_factor, | 509 void PushPageScaleFactorAndLimits(const float* page_scale_factor, |
473 float min_page_scale_factor, | 510 float min_page_scale_factor, |
474 float max_page_scale_factor); | 511 float max_page_scale_factor); |
475 bool SetPageScaleFactorLimits(float min_page_scale_factor, | 512 bool SetPageScaleFactorLimits(float min_page_scale_factor, |
476 float max_page_scale_factor); | 513 float max_page_scale_factor); |
477 bool IsViewportLayerId(int id) const; | 514 bool IsViewportLayerId(int id) const; |
478 void UpdateScrollbars(int scroll_layer_id, int clip_layer_id); | 515 void UpdateScrollbars(int scroll_layer_id, int clip_layer_id); |
479 void DidUpdatePageScale(); | 516 void DidUpdatePageScale(); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 bool browser_controls_shrink_blink_size_; | 611 bool browser_controls_shrink_blink_size_; |
575 float top_controls_height_; | 612 float top_controls_height_; |
576 float bottom_controls_height_; | 613 float bottom_controls_height_; |
577 | 614 |
578 // The amount that the browser controls are shown from 0 (hidden) to 1 (fully | 615 // The amount that the browser controls are shown from 0 (hidden) to 1 (fully |
579 // shown). | 616 // shown). |
580 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio_; | 617 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio_; |
581 | 618 |
582 std::unique_ptr<PendingPageScaleAnimation> pending_page_scale_animation_; | 619 std::unique_ptr<PendingPageScaleAnimation> pending_page_scale_animation_; |
583 | 620 |
| 621 // Tracks the lifecycle which is used for enforcing dependencies between |
| 622 // lifecycle states. See: |LayerTreeLifecycle|. |
| 623 LayerTreeLifecycle lifecycle_; |
| 624 |
584 private: | 625 private: |
585 DISALLOW_COPY_AND_ASSIGN(LayerTreeImpl); | 626 DISALLOW_COPY_AND_ASSIGN(LayerTreeImpl); |
586 }; | 627 }; |
587 | 628 |
588 } // namespace cc | 629 } // namespace cc |
589 | 630 |
590 #endif // CC_TREES_LAYER_TREE_IMPL_H_ | 631 #endif // CC_TREES_LAYER_TREE_IMPL_H_ |
OLD | NEW |