blob: 6d8a6ce426a4819b0485158871bcbd7408232148 [file] [log] [blame]
[email protected]3b31c6ac2012-12-06 21:27:291// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]556fd292013-03-18 08:03:045#ifndef CC_TREES_LAYER_TREE_IMPL_H_
6#define CC_TREES_LAYER_TREE_IMPL_H_
[email protected]3b31c6ac2012-12-06 21:27:297
aeliasa57c40d122015-10-08 00:20:098#include <map>
David Bokan092ab2862020-07-09 17:40:579#include <memory>
vmpstrd7de03c2014-08-27 18:11:0110#include <set>
[email protected]bf691c22013-03-26 21:15:0611#include <string>
vollickcb3f6b12016-03-01 23:44:1012#include <unordered_map>
David Bokan092ab2862020-07-09 17:40:5713#include <utility>
[email protected]bf691c22013-03-26 21:15:0614#include <vector>
15
danakj956d1c822018-09-13 01:38:5716#include "base/containers/flat_set.h"
jonross180dc482018-10-23 21:22:0917#include "base/time/time.h"
[email protected]8c5690222013-02-15 17:36:4318#include "base/values.h"
aelias58eec0812014-12-04 01:04:4019#include "cc/base/synced_property.h"
Sinan Sahin92a360bc2019-12-05 19:20:4520#include "cc/input/browser_controls_offset_manager.h"
dtapuskaf206a40d2016-02-05 21:36:0221#include "cc/input/event_listener_properties.h"
jamesr9b8fda32015-03-16 19:11:0522#include "cc/input/layer_selection_bound.h"
Sandra Sun2288e8532017-11-30 22:50:1623#include "cc/input/overscroll_behavior.h"
[email protected]cc3cfaa2013-03-18 09:05:5224#include "cc/layers/layer_impl.h"
vollick7ee649472016-03-03 05:55:3625#include "cc/layers/layer_list_iterator.h"
Sadrul Habib Chowdhuryf37cae52020-04-02 22:20:3226#include "cc/metrics/event_metrics.h"
Xida Chenc5cb8562019-08-14 22:41:5627#include "cc/paint/discardable_image_map.h"
[email protected]c9280762013-08-01 06:28:5728#include "cc/resources/ui_resource_client.h"
Sinan Sahin92a360bc2019-12-05 19:20:4529#include "cc/trees/browser_controls_params.h"
Sadrul Habib Chowdhury3d4df2e82018-06-02 05:18:0030#include "cc/trees/layer_tree_host.h"
jamesr9b8fda32015-03-16 19:11:0531#include "cc/trees/layer_tree_host_impl.h"
ennee95b1542015-04-20 20:35:5032#include "cc/trees/property_tree.h"
danakjba65a0912017-09-21 16:38:4233#include "cc/trees/swap_promise.h"
Fady Samuelc296f5fb2017-07-21 04:02:1934#include "components/viz/common/frame_sinks/begin_frame_args.h"
Xiyuan Xia0274c582019-12-04 20:49:0335#include "ui/gfx/overlay_transform.h"
[email protected]3b31c6ac2012-12-06 21:27:2936
[email protected]d12aa932014-08-01 13:10:3837namespace base {
primiano15960432015-02-05 14:20:2638namespace trace_event {
[email protected]d12aa932014-08-01 13:10:3839class TracedValue;
40}
41}
42
Xu Xing32549162017-07-17 22:25:4343namespace viz {
danakj57baa772018-05-29 15:59:1444class ClientResourceProvider;
Xu Xing32549162017-07-17 22:25:4345class ContextProvider;
46}
47
[email protected]3b31c6ac2012-12-06 21:27:2948namespace cc {
49
[email protected]ff762fb2012-12-12 19:18:3750class DebugRectHistory;
Vladimir Levin1b746faf2021-01-19 21:25:5851class DocumentTransitionRequest;
Xida Chene5a9b4e02020-06-23 00:35:3552class DroppedFrameCounter;
[email protected]ff762fb2012-12-12 19:18:3753class HeadsUpDisplayLayerImpl;
vmpstr70289fb62016-12-01 02:33:0554class ImageDecodeCache;
[email protected]ff762fb2012-12-12 19:18:3755class LayerTreeDebugState;
vollickcb3f6b12016-03-01 23:44:1056class LayerTreeImpl;
kylechardf9d6f302018-03-22 20:25:5457class LayerTreeFrameSink;
[email protected]ff762fb2012-12-12 19:18:3758class LayerTreeSettings;
[email protected]1191d9d2013-02-02 06:00:3359class MemoryHistory;
[email protected]8aa39ecb2014-06-12 14:19:1460class PictureLayerImpl;
khushalsagarb64b360d2015-10-21 19:25:1661class TaskRunnerProvider;
[email protected]ff762fb2012-12-12 19:18:3762class TileManager;
[email protected]741fba422013-09-20 03:34:1463class UIResourceRequest;
sunnyps7d073dc2015-04-16 23:29:1264class VideoFrameControllerClient;
bokanfcdbc182014-11-21 21:53:3365struct PendingPageScaleAnimation;
[email protected]c9280762013-08-01 06:28:5766
jdduke5ad36812015-01-02 17:59:3267typedef std::vector<UIResourceRequest> UIResourceRequestQueue;
mdjones2ee41afd2016-10-27 16:50:2068typedef SyncedProperty<AdditionGroup<float>> SyncedBrowserControls;
ccameronb9aec4502014-12-05 19:31:0069typedef SyncedProperty<AdditionGroup<gfx::Vector2dF>> SyncedElasticOverscroll;
[email protected]3b31c6ac2012-12-06 21:27:2970
pdr80ecb9802017-05-16 03:40:0971class LayerTreeLifecycle {
72 public:
73 enum LifecycleState {
74 kNotSyncing,
75
76 // The following states are the steps performed when syncing properties to
77 // this tree (see: LayerTreeHost::FinishCommitOnImplThread or
78 // LayerTreeHostImpl::ActivateSyncTree).
79 kBeginningSync,
80 kSyncedPropertyTrees,
81 kSyncedLayerProperties,
82 kLastSyncState = kSyncedLayerProperties,
83
84 // TODO(pdr): Add states to cover more than just the synchronization steps.
85 };
86
87 void AdvanceTo(LifecycleState);
88
89 bool AllowsPropertyTreeAccess() const {
90 return state_ == kNotSyncing || state_ >= kSyncedPropertyTrees;
91 }
92 bool AllowsLayerPropertyAccess() const {
93 return state_ == kNotSyncing || state_ >= kSyncedLayerProperties;
94 }
95
96 private:
97 LifecycleState state_ = kNotSyncing;
98};
99
[email protected]3b31c6ac2012-12-06 21:27:29100class CC_EXPORT LayerTreeImpl {
101 public:
wkorman8c2724c2016-12-28 02:56:15102 // This is the number of times a fixed point has to be hit continuously by a
jaydasikacb93d1c2015-12-09 23:52:46103 // layer to consider it as jittering.
vmpstre2ed68b2016-07-28 01:22:16104 enum : int { kFixedPointHitsThreshold = 3 };
Sinan Sahinb6ffa912019-10-23 21:04:46105 LayerTreeImpl(
106 LayerTreeHostImpl* host_impl,
107 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor,
108 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio,
109 scoped_refptr<SyncedBrowserControls> bottom_controls_shown_ratio,
110 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll);
Vladimir Levinf06d1cd72019-03-13 18:24:10111 LayerTreeImpl(const LayerTreeImpl&) = delete;
[email protected]3b31c6ac2012-12-06 21:27:29112 virtual ~LayerTreeImpl();
113
Vladimir Levinf06d1cd72019-03-13 18:24:10114 LayerTreeImpl& operator=(const LayerTreeImpl&) = delete;
115
[email protected]df17af52014-02-06 02:20:40116 void Shutdown();
[email protected]aeef2f02014-05-10 12:15:48117 void ReleaseResources();
kylechar599aeeb2018-08-10 04:05:03118 void OnPurgeMemory();
ericrk7cedb542016-11-02 19:03:44119 void ReleaseTileResources();
120 void RecreateTileResources();
[email protected]df17af52014-02-06 02:20:40121
[email protected]f117a4c2012-12-16 04:53:10122 // Methods called by the layer tree that pass-through or access LTHI.
[email protected]8bef40572012-12-11 21:38:08123 // ---------------------------------------------------------------------------
kylechardf9d6f302018-03-22 20:25:54124 LayerTreeFrameSink* layer_tree_frame_sink();
danakj5b391e82018-05-17 17:53:26125 int max_texture_size() const;
[email protected]ff762fb2012-12-12 19:18:37126 const LayerTreeSettings& settings() const;
danakj875efa42015-02-10 22:18:23127 const LayerTreeDebugState& debug_state() const;
Xu Xing32549162017-07-17 22:25:43128 viz::ContextProvider* context_provider() const;
danakj57baa772018-05-29 15:59:14129 viz::ClientResourceProvider* resource_provider() const;
[email protected]ff762fb2012-12-12 19:18:37130 TileManager* tile_manager() const;
vmpstr70289fb62016-12-01 02:33:05131 ImageDecodeCache* image_decode_cache() const;
Khushalfdacdc92017-09-22 22:40:52132 ImageAnimationController* image_animation_controller() const;
Xida Chene5a9b4e02020-06-23 00:35:35133 DroppedFrameCounter* dropped_frame_counter() const;
[email protected]1191d9d2013-02-02 06:00:33134 MemoryHistory* memory_history() const;
danakj875efa42015-02-10 22:18:23135 DebugRectHistory* debug_rect_history() const;
[email protected]f117a4c2012-12-16 04:53:10136 bool IsActiveTree() const;
137 bool IsPendingTree() const;
[email protected]48871fc2013-01-23 07:36:51138 bool IsRecycleTree() const;
enneaf5bda32015-02-19 01:27:36139 bool IsSyncTree() const;
vollickcb3f6b12016-03-01 23:44:10140 LayerImpl* FindActiveTreeLayerById(int id);
141 LayerImpl* FindPendingTreeLayerById(int id);
David Bokan318758c2020-09-01 22:26:36142 // TODO(bokan): PinchGestureActive is a layering violation, it's not related
143 // to what LayerTreeImpl does.
[email protected]166db5c82013-01-09 23:54:31144 bool PinchGestureActive() const;
Xianzhu Wang161f59762020-04-17 17:24:18145 const viz::BeginFrameArgs& CurrentBeginFrameArgs() const;
mithro0bdb49d2015-05-27 13:08:01146 base::TimeDelta CurrentBeginFrameInterval() const;
[email protected]bd5324592014-07-31 09:09:33147 const gfx::Rect ViewportRectForTilePriority() const;
danakj60bc3bc2016-04-09 00:24:48148 std::unique_ptr<ScrollbarAnimationController>
chrishtrf556cef2017-05-13 05:31:01149 CreateScrollbarAnimationController(ElementId scroll_element_id,
150 float initial_opacity);
[email protected]b8384e22013-12-03 02:20:48151 void DidAnimateScrollOffset();
[email protected]13525d62014-05-20 21:22:04152 bool use_gpu_rasterization() const;
hendrikwc2bbd612014-12-03 23:49:34153 GpuRasterizationStatus GetGpuRasterizationStatus() const;
[email protected]473f1f22014-05-22 08:19:17154 bool create_low_res_tiling() const;
vmpstr61ed94a12014-10-09 04:49:30155 bool RequiresHighResToDraw() const;
vmpstr56ace232014-10-09 20:16:28156 bool SmoothnessTakesPriority() const;
sunnyps7d073dc2015-04-16 23:29:12157 VideoFrameControllerClient* GetVideoFrameControllerClient() const;
Walter Kormanaa326e42017-08-22 23:04:43158 MutatorHost* mutator_host() const { return host_impl_->mutator_host(); }
Vladimir Levin9167e1c2017-10-18 21:28:24159 void UpdateImageDecodingHints(
160 base::flat_map<PaintImage::Id, PaintImage::DecodingMode>
161 decoding_mode_map);
Khushalec3ba5dc2019-11-04 22:30:21162 int GetMSAASampleCountForRaster(
163 const scoped_refptr<DisplayItemList>& display_list);
Dale Curtis28e97652020-07-17 01:54:40164 gfx::ColorSpace GetRasterColorSpace(
165 gfx::ContentColorUsage content_color_usage) const;
[email protected]ff762fb2012-12-12 19:18:37166
167 // Tree specific methods exposed to layer-impl tree.
168 // ---------------------------------------------------------------------------
169 void SetNeedsRedraw();
[email protected]ff762fb2012-12-12 19:18:37170
danakj875efa42015-02-10 22:18:23171 // Tracing methods.
172 // ---------------------------------------------------------------------------
hendrikwc5e915852015-05-13 01:29:03173 void GetAllPrioritizedTilesForTracing(
174 std::vector<PrioritizedTile>* prioritized_tiles) const;
ssid911e40e2015-02-09 17:55:20175 void AsValueInto(base::trace_event::TracedValue* dict) const;
[email protected]8bef40572012-12-11 21:38:08176
177 // Other public methods
178 // ---------------------------------------------------------------------------
Xianzhu Wang66e13e02019-09-18 20:39:12179 LayerImpl* root_layer() {
Xianzhu Wangf817d6c2019-09-17 20:08:34180 return layer_list_.empty() ? nullptr : layer_list_[0].get();
jaydasikabf1875a2016-06-28 03:39:59181 }
chrishtrae86b9e2017-05-03 22:31:01182 const RenderSurfaceImpl* RootRenderSurface() const;
jaydasikae57ef9da2016-06-22 14:32:55183 bool LayerListIsEmpty() const;
jaydasikabf1875a2016-06-28 03:39:59184 void SetRootLayerForTesting(std::unique_ptr<LayerImpl>);
jaydasikabf1875a2016-06-28 03:39:59185 void OnCanDrawStateChangedForTree();
jaydasika0c2fd472016-03-24 01:26:05186 bool IsRootLayer(const LayerImpl* layer) const;
Xianzhu Wang0340f14b2019-09-10 23:42:19187
188 OwnedLayerImplList DetachLayers();
189 OwnedLayerImplList DetachLayersKeepingRootLayerForTesting();
[email protected]3b31c6ac2012-12-06 21:27:29190
ajumae6f541b2016-05-31 16:50:50191 void SetPropertyTrees(PropertyTrees* property_trees);
pdr80ecb9802017-05-16 03:40:09192 PropertyTrees* property_trees() {
193 // TODO(pdr): We should enable this DCHECK because it will catch uses of
194 // stale property trees, but it currently fails too many existing tests.
195 // DCHECK(lifecycle().AllowsPropertyTreeAccess());
196 return &property_trees_;
197 }
Peter Mayob5acfb92017-09-13 20:05:10198 const PropertyTrees* property_trees() const { return &property_trees_; }
ennee95b1542015-04-20 20:35:50199
pdr80ecb9802017-05-16 03:40:09200 void PushPropertyTreesTo(LayerTreeImpl* tree_impl);
[email protected]bf691c22013-03-26 21:15:06201 void PushPropertiesTo(LayerTreeImpl* tree_impl);
akaba227bfbd62018-07-11 21:46:43202 void PushSurfaceRangesTo(LayerTreeImpl* tree_impl);
[email protected]c60279472013-01-30 12:10:51203
jaydasikadb7757b2016-04-28 00:17:30204 void MoveChangeTrackingToLayers();
205
enne8a4cb7862016-10-04 20:36:45206 void ForceRecalculateRasterScales();
207
Xianzhu Wangf817d6c2019-09-17 20:08:34208 // Adapts an iterator of std::unique_ptr<LayerImpl> to an iterator of
209 // LayerImpl*.
210 template <typename Iterator>
Xianzhu Wange1e018d2019-09-25 18:56:20211 class IteratorAdapter
212 : public std::iterator<std::forward_iterator_tag, LayerImpl*> {
Xianzhu Wangf817d6c2019-09-17 20:08:34213 public:
214 explicit IteratorAdapter(Iterator it) : it_(it) {}
215 bool operator==(IteratorAdapter o) const { return it_ == o.it_; }
216 bool operator!=(IteratorAdapter o) const { return !(*this == o); }
217 LayerImpl* operator*() const { return it_->get(); }
218 LayerImpl* operator->() const { return it_->get(); }
219 IteratorAdapter& operator++() {
220 ++it_;
221 return *this;
222 }
223
224 private:
225 Iterator it_;
226 };
227 using const_iterator = IteratorAdapter<OwnedLayerImplList::const_iterator>;
228 using const_reverse_iterator =
229 IteratorAdapter<OwnedLayerImplList::const_reverse_iterator>;
230 const_iterator begin() const { return const_iterator(layer_list_.cbegin()); }
231 const_iterator end() const { return const_iterator(layer_list_.cend()); }
232 const_reverse_iterator rbegin() const {
233 return const_reverse_iterator(layer_list_.crbegin());
234 }
235 const_reverse_iterator rend() const {
236 return const_reverse_iterator(layer_list_.crend());
237 }
vollick7ee649472016-03-03 05:55:36238
weiliangcea09f3372017-03-29 16:43:24239 void SetTransformMutated(ElementId element_id,
240 const gfx::Transform& transform);
241 void SetOpacityMutated(ElementId element_id, float opacity);
242 void SetFilterMutated(ElementId element_id, const FilterOperations& filters);
Mason Freed384fc5b2019-05-30 19:49:10243 void SetBackdropFilterMutated(ElementId element_id,
244 const FilterOperations& backdrop_filters);
jaydasika2368fd52016-05-11 19:38:29245
Stephen McGruerd362daef2019-01-14 20:30:33246 const std::unordered_map<ElementId, float, ElementIdHash>&
247 element_id_to_opacity_animations_for_testing() const {
248 return element_id_to_opacity_animations_;
249 }
250 const std::unordered_map<ElementId, gfx::Transform, ElementIdHash>&
251 element_id_to_transform_animations_for_testing() const {
252 return element_id_to_transform_animations_;
253 }
254 const std::unordered_map<ElementId, FilterOperations, ElementIdHash>&
255 element_id_to_filter_animations_for_testing() const {
256 return element_id_to_filter_animations_;
257 }
Mason Freed384fc5b2019-05-30 19:49:10258 const std::unordered_map<ElementId, FilterOperations, ElementIdHash>&
259 element_id_to_backdrop_filter_animations_for_testing() const {
260 return element_id_to_backdrop_filter_animations_;
261 }
Stephen McGruerd362daef2019-01-14 20:30:33262
[email protected]3b31c6ac2012-12-06 21:27:29263 int source_frame_number() const { return source_frame_number_; }
[email protected]a30290142013-01-05 01:27:00264 void set_source_frame_number(int frame_number) {
265 source_frame_number_ = frame_number;
266 }
[email protected]3b31c6ac2012-12-06 21:27:29267
jaydasikacb93d1c2015-12-09 23:52:46268 bool is_first_frame_after_commit() const {
269 return source_frame_number_ != is_first_frame_after_commit_tracker_;
270 }
271
272 void set_is_first_frame_after_commit(bool is_first_frame_after_commit) {
273 is_first_frame_after_commit_tracker_ =
274 is_first_frame_after_commit ? -1 : source_frame_number_;
275 }
276
James Wallace-Lee4d3dff92017-11-02 18:12:54277 const HeadsUpDisplayLayerImpl* hud_layer() const { return hud_layer_; }
[email protected]3b31c6ac2012-12-06 21:27:29278 HeadsUpDisplayLayerImpl* hud_layer() { return hud_layer_; }
[email protected]a30290142013-01-05 01:27:00279 void set_hud_layer(HeadsUpDisplayLayerImpl* layer_impl) {
280 hud_layer_ = layer_impl;
281 }
[email protected]3b31c6ac2012-12-06 21:27:29282
miletusf57925d2014-10-01 19:38:13283 gfx::ScrollOffset TotalScrollOffset() const;
284 gfx::ScrollOffset TotalMaxScrollOffset() const;
[email protected]adeda572014-01-31 00:49:47285
Sadrul Habib Chowdhury3d4df2e82018-06-02 05:18:00286 void AddPresentationCallbacks(
287 std::vector<LayerTreeHost::PresentationTimeCallback> callbacks);
288 std::vector<LayerTreeHost::PresentationTimeCallback>
289 TakePresentationCallbacks();
290 bool has_presentation_callbacks() const {
291 return !presentation_callbacks_.empty();
292 }
293
David Bokan4917d1d2019-11-22 21:52:48294 // The following viewport related property nodes will only ever be set on the
295 // main-frame's renderer (i.e. OOPIF and UI compositors will not have these
296 // set.
Xianzhu Wangc9badff2019-10-01 23:47:22297 using ViewportPropertyIds = LayerTreeHost::ViewportPropertyIds;
298 void SetViewportPropertyIds(const ViewportPropertyIds& ids);
[email protected]3b31c6ac2012-12-06 21:27:29299
Xianzhu Wangc9badff2019-10-01 23:47:22300 const TransformNode* OverscrollElasticityTransformNode() const;
301 TransformNode* OverscrollElasticityTransformNode() {
302 return const_cast<TransformNode*>(
303 const_cast<const LayerTreeImpl*>(this)
304 ->OverscrollElasticityTransformNode());
vollickcb3f6b12016-03-01 23:44:10305 }
Xianzhu Wangc9badff2019-10-01 23:47:22306 const TransformNode* PageScaleTransformNode() const;
307 TransformNode* PageScaleTransformNode() {
308 return const_cast<TransformNode*>(
309 const_cast<const LayerTreeImpl*>(this)->PageScaleTransformNode());
pdr53abb452017-05-19 01:59:42310 }
David Bokanc40a5702018-06-12 13:01:19311 const ScrollNode* InnerViewportScrollNode() const;
312 ScrollNode* InnerViewportScrollNode() {
313 return const_cast<ScrollNode*>(
314 const_cast<const LayerTreeImpl*>(this)->InnerViewportScrollNode());
315 }
Xianzhu Wangc9badff2019-10-01 23:47:22316 const ClipNode* OuterViewportClipNode() const;
317 ClipNode* OuterViewportClipNode() {
318 return const_cast<ClipNode*>(
319 const_cast<const LayerTreeImpl*>(this)->OuterViewportClipNode());
320 }
David Bokanc40a5702018-06-12 13:01:19321 const ScrollNode* OuterViewportScrollNode() const;
322 ScrollNode* OuterViewportScrollNode() {
323 return const_cast<ScrollNode*>(
324 const_cast<const LayerTreeImpl*>(this)->OuterViewportScrollNode());
325 }
326
Xianzhu Wangc9badff2019-10-01 23:47:22327 LayerTreeHost::ViewportPropertyIds ViewportPropertyIdsForTesting() const {
328 return viewport_property_ids_;
Xianzhu Wangeb746a5c82018-11-29 04:07:19329 }
Xianzhu Wangc9badff2019-10-01 23:47:22330 LayerImpl* InnerViewportScrollLayerForTesting() const;
331 LayerImpl* OuterViewportScrollLayerForTesting() const;
332
333 ScrollNode* CurrentlyScrollingNode();
334 const ScrollNode* CurrentlyScrollingNode() const;
335 int LastScrolledScrollNodeIndex() const;
336 void SetCurrentlyScrollingNode(const ScrollNode* node);
337 void ClearCurrentlyScrollingNode();
Xianzhu Wangeb746a5c82018-11-29 04:07:19338
[email protected]58241dc2013-08-20 01:39:25339 void ApplySentScrollAndScaleDeltasFromAbortedCommit();
[email protected]caa567d2012-12-20 07:56:16340
[email protected]a30290142013-01-05 01:27:00341 SkColor background_color() const { return background_color_; }
342 void set_background_color(SkColor color) { background_color_ = color; }
343
Xiyuan Xia0274c582019-12-04 20:49:03344 gfx::OverlayTransform display_transform_hint() const {
345 return display_transform_hint_;
346 }
347 void set_display_transform_hint(gfx::OverlayTransform hint) {
348 display_transform_hint_ = hint;
349 }
350
Philip Rogers106da9b2017-07-12 04:10:18351 void UpdatePropertyTreeAnimationFromMainThread();
Walter Kormanaf60f632017-08-24 22:52:39352
aelias58eec0812014-12-04 01:04:40353 void SetPageScaleOnActiveTree(float active_page_scale);
354 void PushPageScaleFromMainThread(float page_scale_factor,
355 float min_page_scale_factor,
356 float max_page_scale_factor);
357 float current_page_scale_factor() const {
358 return page_scale_factor()->Current(IsActiveTree());
[email protected]c60279472013-01-30 12:10:51359 }
[email protected]c60279472013-01-30 12:10:51360 float min_page_scale_factor() const { return min_page_scale_factor_; }
361 float max_page_scale_factor() const { return max_page_scale_factor_; }
aelias58eec0812014-12-04 01:04:40362
363 float page_scale_delta() const { return page_scale_factor()->Delta(); }
364
365 SyncedProperty<ScaleGroup>* page_scale_factor();
366 const SyncedProperty<ScaleGroup>* page_scale_factor() const;
[email protected]c60279472013-01-30 12:10:51367
ajuma1d48e012015-09-25 22:24:16368 void SetDeviceScaleFactor(float device_scale_factor);
369 float device_scale_factor() const { return device_scale_factor_; }
370
oshima750cb4342015-10-31 00:59:01371 void set_painted_device_scale_factor(float painted_device_scale_factor) {
372 painted_device_scale_factor_ = painted_device_scale_factor;
373 }
374 float painted_device_scale_factor() const {
375 return painted_device_scale_factor_;
376 }
377
Jonathan Rossd0345bf2020-09-25 02:13:54378 void SetLocalSurfaceIdFromParent(
379 const viz::LocalSurfaceId& local_surface_id_from_parent);
380 const viz::LocalSurfaceId& local_surface_id_from_parent() const {
381 return local_surface_id_from_parent_;
jonross180dc482018-10-23 21:22:09382 }
383
Fady Samuel2899c7a2018-05-09 16:51:21384 void RequestNewLocalSurfaceId();
385 bool TakeNewLocalSurfaceIdRequest();
386 bool new_local_surface_id_request_for_testing() const {
387 return new_local_surface_id_request_;
388 }
389
W. James MacLean7df854c2019-08-28 16:17:53390 void SetDeviceViewportRect(const gfx::Rect& device_viewport_rect);
Fady Samuele65f318c62018-07-25 20:48:23391
392 // TODO(fsamuel): The reason this is not a trivial accessor is because it
393 // may return an external viewport specified in LayerTreeHostImpl. In the
394 // future, all properties should flow through the pending and active layer
395 // trees and we shouldn't need to reach out to LayerTreeHostImpl.
396 gfx::Rect GetDeviceViewport() const;
397
W. James MacLean7df854c2019-08-28 16:17:53398 // This accessor is the same as above, except it only ever returns the
399 // internal (i.e. not external) device viewport.
400 gfx::Rect internal_device_viewport() { return device_viewport_rect_; }
401
Dale Curtisaf1074b22020-08-20 06:33:30402 void SetDisplayColorSpaces(
403 const gfx::DisplayColorSpaces& display_color_spaces);
404
W. James MacLeanfee5b4f2019-02-07 20:20:35405 // OOPIFs need to know the page scale factor used in the main frame, but it
406 // is distributed differently (via VisualPropertiesSync), and used only to
407 // set raster-scale (page_scale_factor has geometry implications that are
408 // inappropriate for OOPIFs).
W. James MacLean2a90bff2018-11-05 20:52:47409 void SetExternalPageScaleFactor(float external_page_scale_factor);
410 float external_page_scale_factor() const {
411 return external_page_scale_factor_;
412 }
David Bokanf888178b2020-07-22 16:10:56413 // A function to provide page scale information for scaling scroll deltas. In
414 // top-level frames we store this value in page_scale_factor_, but for
415 // cross-process subframes it's stored in external_page_scale_factor_, so
416 // that it only affects raster scale. These cases are mutually exclusive,
417 // except for a page hosted in a <portal>, so only one of the values should
418 // ever vary from 1.f.
W. James MacLeanfee5b4f2019-02-07 20:20:35419 float page_scale_factor_for_scroll() const {
420 DCHECK(external_page_scale_factor_ == 1.f ||
David Bokanf888178b2020-07-22 16:10:56421 current_page_scale_factor() == 1.f ||
422 !settings().is_layer_tree_for_subframe);
W. James MacLeanfee5b4f2019-02-07 20:20:35423 return external_page_scale_factor_ * current_page_scale_factor();
424 }
Dale Curtisaf1074b22020-08-20 06:33:30425 const gfx::DisplayColorSpaces& display_color_spaces() const {
426 return display_color_spaces_;
ccameron99961cb2016-09-19 19:15:19427 }
428
ccameronb9aec4502014-12-05 19:31:00429 SyncedElasticOverscroll* elastic_overscroll() {
430 return elastic_overscroll_.get();
431 }
432 const SyncedElasticOverscroll* elastic_overscroll() const {
433 return elastic_overscroll_.get();
434 }
435
mdjones2ee41afd2016-10-27 16:50:20436 SyncedBrowserControls* top_controls_shown_ratio() {
aelias6004fe02015-02-07 21:43:01437 return top_controls_shown_ratio_.get();
438 }
mdjones2ee41afd2016-10-27 16:50:20439 const SyncedBrowserControls* top_controls_shown_ratio() const {
aelias6004fe02015-02-07 21:43:01440 return top_controls_shown_ratio_.get();
441 }
Sinan Sahinb6ffa912019-10-23 21:04:46442 SyncedBrowserControls* bottom_controls_shown_ratio() {
443 return bottom_controls_shown_ratio_.get();
444 }
445 const SyncedBrowserControls* bottom_controls_shown_ratio() const {
446 return bottom_controls_shown_ratio_.get();
447 }
Xianzhu Wang66e13e02019-09-18 20:39:12448 gfx::Vector2dF current_elastic_overscroll() const {
449 return elastic_overscroll()->Current(IsActiveTree());
450 }
aelias6004fe02015-02-07 21:43:01451
vollickef2ae922016-06-29 17:54:27452 void SetElementIdsForTesting();
453
[email protected]7d19dc342013-05-02 22:02:04454 // Updates draw properties and render surface layer list, as well as tile
enneaf5bda32015-02-19 01:27:36455 // priorities. Returns false if it was unable to update. Updating lcd
456 // text may cause invalidations, so should only be done after a commit.
Xianzhu Wang66e13e02019-09-18 20:39:12457 bool UpdateDrawProperties(
458 bool update_image_animation_controller = true,
459 LayerImplList* output_update_layer_list_for_testing = nullptr);
[email protected]7d19dc342013-05-02 22:02:04460
[email protected]615c78a2013-01-24 23:44:16461 void set_needs_update_draw_properties() {
462 needs_update_draw_properties_ = true;
463 }
464 bool needs_update_draw_properties() const {
465 return needs_update_draw_properties_;
466 }
[email protected]76ffd9e2012-12-20 19:12:47467
jaydasika8d0064f2016-06-02 23:34:54468 bool is_in_resourceless_software_draw_mode() {
Walter Kormanaa326e42017-08-22 23:04:43469 return (host_impl_->GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE);
jaydasika8d0064f2016-06-02 23:34:54470 }
471
[email protected]db8259f2013-02-01 05:25:04472 void set_needs_full_tree_sync(bool needs) { needs_full_tree_sync_ = needs; }
473 bool needs_full_tree_sync() const { return needs_full_tree_sync_; }
474
akaba227bfbd62018-07-11 21:46:43475 bool needs_surface_ranges_sync() const { return needs_surface_ranges_sync_; }
476 void set_needs_surface_ranges_sync(bool needs_surface_ranges_sync) {
477 needs_surface_ranges_sync_ = needs_surface_ranges_sync;
jaydasika10be2112017-05-26 04:35:50478 }
479
[email protected]7d08a9352013-10-15 08:24:56480 void ForceRedrawNextActivation() { next_activation_forces_redraw_ = true; }
481
[email protected]759dc9f2014-07-23 19:18:51482 void set_has_ever_been_drawn(bool has_drawn) {
483 has_ever_been_drawn_ = has_drawn;
484 }
485 bool has_ever_been_drawn() const { return has_ever_been_drawn_; }
486
khushalsagar8ec07402016-09-10 03:13:19487 void set_ui_resource_request_queue(UIResourceRequestQueue queue);
[email protected]c9280762013-08-01 06:28:57488
ajumab784ef42017-04-28 23:01:52489 const RenderSurfaceList& GetRenderSurfaceList() const;
danakj4902c302015-02-13 22:12:16490 const Region& UnoccludedScreenSpaceRegion() const;
[email protected]76ffd9e2012-12-20 19:12:47491
[email protected]257abfa82013-01-29 23:47:24492 // These return the size of the root scrollable area and the size of
493 // the user-visible scrolling viewport, in CSS layout coordinates.
bokan574c43632015-08-14 02:22:07494 gfx::SizeF ScrollableSize() const;
[email protected]257abfa82013-01-29 23:47:24495 gfx::SizeF ScrollableViewportSize() const;
[email protected]caa567d2012-12-20 07:56:16496
[email protected]3744e27b2013-11-06 21:44:08497 gfx::Rect RootScrollLayerDeviceViewportBounds() const;
498
vollickcb3f6b12016-03-01 23:44:10499 LayerImpl* LayerById(int id) const;
Mason Freed310cae42019-07-19 03:40:25500 LayerImpl* LayerByElementId(ElementId element_id) const;
vollickcb3f6b12016-03-01 23:44:10501
Robert Flackb7010a72019-03-30 02:59:46502 bool IsElementInPropertyTree(ElementId element_id) const;
Robert Flackb7010a72019-03-30 02:59:46503
David Bokan4a19ae02018-09-15 13:59:27504 void AddToElementLayerList(ElementId element_id, LayerImpl* layer);
Robert Flack1d7d73f2018-05-28 17:29:36505 void RemoveFromElementLayerList(ElementId element_id);
vollickef2ae922016-06-29 17:54:27506
akaba227bfbd62018-07-11 21:46:43507 void SetSurfaceRanges(const base::flat_set<viz::SurfaceRange> surface_ranges);
508 const base::flat_set<viz::SurfaceRange>& SurfaceRanges() const;
509 void ClearSurfaceRanges();
jaydasika10be2112017-05-26 04:35:50510
jaydasikabb0409e52016-03-08 04:05:19511 void AddLayerShouldPushProperties(LayerImpl* layer);
danakj956d1c822018-09-13 01:38:57512 void ClearLayersThatShouldPushProperties();
513 const base::flat_set<LayerImpl*>& LayersThatShouldPushProperties() {
514 return layers_that_should_push_properties_;
515 }
jaydasikabb0409e52016-03-08 04:05:19516
vollickcb3f6b12016-03-01 23:44:10517 // These should be called by LayerImpl's ctor/dtor.
518 void RegisterLayer(LayerImpl* layer);
519 void UnregisterLayer(LayerImpl* layer);
520
Xianzhu Wang0340f14b2019-09-10 23:42:19521 // Append a layer to the list.
danakj60bc3bc2016-04-09 00:24:48522 void AddLayer(std::unique_ptr<LayerImpl> layer);
Xianzhu Wang0340f14b2019-09-10 23:42:19523
vollickcb3f6b12016-03-01 23:44:10524 size_t NumLayers();
525
[email protected]37386f052013-01-13 00:42:22526 void DidBecomeActive();
527
khushalsagarb64b360d2015-10-21 19:25:16528 // Used for accessing the task runner and debug assertions.
529 TaskRunnerProvider* task_runner_provider() const;
[email protected]48871fc2013-01-23 07:36:51530
[email protected]b69c1db2013-11-27 00:05:19531 // Call this function when you expect there to be a swap buffer.
532 // See swap_promise.h for how to use SwapPromise.
tobiasjs2e02f73e2015-09-02 12:08:03533 //
534 // A swap promise queued by QueueSwapPromise travels with the layer
535 // information currently associated with the tree. For example, when
536 // a pending tree is activated, the swap promise is passed to the
537 // active tree along with the layer information. Similarly, when a
538 // new activation overwrites layer information on the active tree,
539 // queued swap promises are broken.
danakj60bc3bc2016-04-09 00:24:48540 void QueueSwapPromise(std::unique_ptr<SwapPromise> swap_promise);
[email protected]b69c1db2013-11-27 00:05:19541
tobiasjs2e02f73e2015-09-02 12:08:03542 // Queue a swap promise, pinned to this tree. Pinned swap promises
543 // may only be queued on the active tree.
544 //
545 // An active tree pinned swap promise will see only DidSwap() or
546 // DidNotSwap(SWAP_FAILS). No DidActivate() will be seen because
547 // that has already happened prior to queueing of the swap promise.
548 //
549 // Pinned active tree swap promises will not be broken prematurely
550 // on the active tree if a new tree is activated.
danakj60bc3bc2016-04-09 00:24:48551 void QueuePinnedSwapPromise(std::unique_ptr<SwapPromise> swap_promise);
tobiasjs2e02f73e2015-09-02 12:08:03552
sunnypsad3235e2016-08-09 04:57:52553 // Takes ownership of |new_swap_promises|. Existing swap promises in
554 // |swap_promise_list_| are cancelled (SWAP_FAILS).
danakj60bc3bc2016-04-09 00:24:48555 void PassSwapPromises(
sunnypsad3235e2016-08-09 04:57:52556 std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
557 void AppendSwapPromises(
558 std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
Sadrul Habib Chowdhury24856212018-05-25 21:38:43559 void FinishSwapPromises(viz::CompositorFrameMetadata* metadata);
samanse7345c82016-12-16 02:51:16560 void ClearSwapPromises();
[email protected]b69c1db2013-11-27 00:05:19561 void BreakSwapPromises(SwapPromise::DidNotSwapReason reason);
562
[email protected]c48536a52013-09-14 00:02:08563 void DidModifyTilePriorities();
[email protected]fcb846d2013-05-22 01:42:36564
Fady Samuelc80a4a862017-07-28 10:23:36565 viz::ResourceId ResourceIdForUIResource(UIResourceId uid) const;
[email protected]c9280762013-08-01 06:28:57566 void ProcessUIResourceRequestQueue();
567
[email protected]709c9542013-10-26 01:43:51568 bool IsUIResourceOpaque(UIResourceId uid) const;
569
danakj7383c552015-02-11 18:01:48570 void RegisterPictureLayerImpl(PictureLayerImpl* layer);
571 void UnregisterPictureLayerImpl(PictureLayerImpl* layer);
572 const std::vector<PictureLayerImpl*>& picture_layers() const {
573 return picture_layers_;
574 }
575
Stephen McGruer8e2d3552019-07-10 14:06:29576 void NotifyLayerHasPaintWorkletsChanged(PictureLayerImpl* layer,
577 bool has_worklets);
578 const base::flat_set<PictureLayerImpl*>& picture_layers_with_paint_worklets()
579 const {
580 return picture_layers_with_paint_worklets_;
581 }
582
aeliasa57c40d122015-10-08 00:20:09583 void RegisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer);
584 void UnregisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer);
pdr7b8ed8a2017-04-19 21:24:27585 ScrollbarSet ScrollbarsFor(ElementId scroll_element_id) const;
aeliasa57c40d122015-10-08 00:20:09586
chaopengd2a75ab2018-09-28 17:41:23587 LayerImpl* FindFirstScrollingLayerOrScrollbarThatIsHitByPoint(
[email protected]28336d52014-05-12 19:07:28588 const gfx::PointF& screen_space_point);
589
590 LayerImpl* FindLayerThatIsHitByPoint(const gfx::PointF& screen_space_point);
591
592 LayerImpl* FindLayerThatIsHitByPointInTouchHandlerRegion(
593 const gfx::PointF& screen_space_point);
594
sunxd3e3a37a72018-07-06 22:58:43595 LayerImpl* FindLayerThatIsHitByPointInWheelEventHandlerRegion(
596 const gfx::PointF& screen_space_point);
597
Philip Rogers755286e2019-07-01 21:16:08598 // Return all layers with a hit non-fast scrollable region.
599 std::vector<const LayerImpl*> FindLayersHitByPointInNonFastScrollableRegion(
600 const gfx::PointF& screen_space_point);
David Bokan092ab2862020-07-09 17:40:57601 // Returns all layers up to the first scroller or scrollbar layer, inclusive.
602 // The returned vector is sorted in order of top most come first. The back of
603 // the vector will be the scrollable layer if one was hit.
604 std::vector<const LayerImpl*> FindAllLayersUpToAndIncludingFirstScrollable(
605 const gfx::PointF& screen_space_point);
David Bokan10610352020-05-28 18:11:12606 bool PointHitsNonFastScrollableRegion(const gfx::PointF& scree_space_point,
607 const LayerImpl& layer) const;
Philip Rogers755286e2019-07-01 21:16:08608
Andrew Comminos498b4b52020-03-12 03:43:23609 // Returns the ElementId representing a frame's document at the given point.
610 // In cases where cc doesn't have enough information to perform accurate
611 // attribution (e.g. in the presence of a complex clip), kInvalidElementId is
612 // returned.
613 ElementId FindFrameElementIdAtPoint(const gfx::PointF& screen_space_point);
614
jdduke449b5292015-04-23 19:36:44615 void RegisterSelection(const LayerSelection& selection);
[email protected]19aec372014-07-01 19:08:49616
James Wallace-Leee71cf582018-01-29 22:24:23617 bool HandleVisibilityChanged() const { return handle_visibility_changed_; }
618 void ResetHandleVisibilityChanged();
amaralp1107a292017-01-17 20:05:52619
[email protected]19aec372014-07-01 19:08:49620 // Compute the current selection handle location and visbility with respect to
621 // the viewport.
danakj5e0a12b2017-09-25 17:26:49622 void GetViewportSelection(viz::Selection<gfx::SelectionBound>* selection);
[email protected]19aec372014-07-01 19:08:49623
mdjones2ee41afd2016-10-27 16:50:20624 bool browser_controls_shrink_blink_size() const {
Sinan Sahin92a360bc2019-12-05 19:20:45625 return browser_controls_params_.browser_controls_shrink_blink_size;
bokan88eae012014-09-09 20:40:42626 }
Sinan Sahinb6ffa912019-10-23 21:04:46627 bool SetCurrentBrowserControlsShownRatio(float top_ratio, float bottom_ratio);
628 float CurrentTopControlsShownRatio() const {
aelias6004fe02015-02-07 21:43:01629 return top_controls_shown_ratio_->Current(IsActiveTree());
630 }
Sinan Sahinb6ffa912019-10-23 21:04:46631 float CurrentBottomControlsShownRatio() const {
632 return bottom_controls_shown_ratio_->Current(IsActiveTree());
633 }
Sinan Sahin92a360bc2019-12-05 19:20:45634 void SetBrowserControlsParams(const BrowserControlsParams& params);
635 float top_controls_height() const {
636 return browser_controls_params_.top_controls_height;
637 }
638 float top_controls_min_height() const {
639 return browser_controls_params_.top_controls_min_height;
640 }
Sinan Sahinb6ffa912019-10-23 21:04:46641 void PushBrowserControlsFromMainThread(float top_controls_shown_ratio,
642 float bottom_controls_shown_ratio);
Sinan Sahin92a360bc2019-12-05 19:20:45643 float bottom_controls_height() const {
644 return browser_controls_params_.bottom_controls_height;
645 }
646 float bottom_controls_min_height() const {
647 return browser_controls_params_.bottom_controls_min_height;
648 }
Robbie McElrathcbb67782020-08-18 00:10:36649 bool only_expand_top_controls_at_page_top() const {
650 return browser_controls_params_.only_expand_top_controls_at_page_top;
Robbie McElrathc727f0e2020-07-22 20:22:55651 }
bokan88eae012014-09-09 20:40:42652
Sandra Sun2288e8532017-11-30 22:50:16653 void set_overscroll_behavior(const OverscrollBehavior& behavior);
654 OverscrollBehavior overscroll_behavior() const {
655 return overscroll_behavior_;
sunyunjiabbea8a92017-08-31 11:18:54656 }
657
bokanfcdbc182014-11-21 21:53:33658 void SetPendingPageScaleAnimation(
danakj60bc3bc2016-04-09 00:24:48659 std::unique_ptr<PendingPageScaleAnimation> pending_animation);
660 std::unique_ptr<PendingPageScaleAnimation> TakePendingPageScaleAnimation();
bokan915bf352014-10-02 21:57:14661
Mohsen Izadib8878bf72020-11-06 19:16:42662 void AppendEventsMetricsFromMainThread(EventMetrics::List events_metrics);
663 EventMetrics::List TakeEventsMetrics();
Sadrul Habib Chowdhuryf37cae52020-04-02 22:20:32664
Eric Karl706ea6712018-12-21 22:41:38665 // Requests that we force send RenderFrameMetadata with the next frame.
666 void RequestForceSendMetadata() { force_send_metadata_request_ = true; }
667 bool TakeForceSendMetadataRequest();
668
pdr54d038192017-06-08 22:44:13669 void DidUpdateScrollOffset(ElementId id);
Philip Rogers5e563782017-06-02 01:37:20670
671 // Mark the scrollbar geometries (e.g., thumb size and position) as needing an
672 // update.
673 void SetScrollbarGeometriesNeedUpdate() {
pdr05216452017-06-08 23:18:28674 if (IsActiveTree()) {
Philip Rogers5e563782017-06-02 01:37:20675 scrollbar_geometries_need_update_ = true;
pdr05216452017-06-08 23:18:28676 // Scrollbar geometries are updated in |UpdateDrawProperties|.
677 set_needs_update_draw_properties();
678 }
Philip Rogers5e563782017-06-02 01:37:20679 }
680 bool ScrollbarGeometriesNeedUpdate() const {
681 return scrollbar_geometries_need_update_;
682 }
683 // Update the geometries of all scrollbars (e.g., thumb size and position). An
684 // update only occurs if a scroll-related layer has changed (see:
685 // SetScrollbarGeometriesNeedUpdate).
686 void UpdateScrollbarGeometries();
aeliasa57c40d122015-10-08 00:20:09687
danakj26099d5d2018-09-13 17:08:56688 // See LayerTreeHost.
dtapuskaf024e552016-02-03 01:19:46689 bool have_scroll_event_handlers() const {
690 return have_scroll_event_handlers_;
691 }
692 void set_have_scroll_event_handlers(bool have_event_handlers) {
693 have_scroll_event_handlers_ = have_event_handlers;
694 }
695
danakj26099d5d2018-09-13 17:08:56696 // See LayerTreeHost.
dtapuskaf206a40d2016-02-05 21:36:02697 EventListenerProperties event_listener_properties(
698 EventListenerClass event_class) const {
699 return event_listener_properties_[static_cast<size_t>(event_class)];
700 }
701 void set_event_listener_properties(EventListenerClass event_class,
702 EventListenerProperties event_properties) {
703 event_listener_properties_[static_cast<size_t>(event_class)] =
704 event_properties;
dtapuskaee0b6982016-01-29 15:14:48705 }
706
jaydasikad6f778b2016-05-19 22:51:26707 void ResetAllChangeTracking();
jaydasikaef64f9e42016-03-12 01:08:18708
chaopengf96bf982018-03-09 23:45:37709 void HandleTickmarksVisibilityChange();
skobes697a467f2017-04-28 02:54:17710 void HandleScrollbarShowRequestsFromMain();
jaydasika4b0fd7512016-06-09 18:12:53711
khushalsagard5e13bf2017-05-17 08:08:50712 void InvalidateRegionForImages(
713 const PaintImageIdFlatSet& images_to_invalidate);
khushalsagard3b8827d2017-02-18 18:42:54714
Eric Karlec121012019-08-07 21:54:00715 void UpdateViewportContainerSizes();
716
pdr80ecb9802017-05-16 03:40:09717 LayerTreeLifecycle& lifecycle() { return lifecycle_; }
718
Philip Rogers40ac3e02018-12-20 17:13:18719 std::string LayerListAsJson() const;
Philip Rogers40ac3e02018-12-20 17:13:18720
Xida Chenc5cb8562019-08-14 22:41:56721 AnimatedPaintWorkletTracker& paint_worklet_tracker() {
722 return host_impl_->paint_worklet_tracker();
723 }
724
Xianzhu Wang66e13e02019-09-18 20:39:12725 const gfx::Transform& DrawTransform() const {
726 return host_impl_->DrawTransform();
727 }
728
Vladimir Levin6abaaa8f2020-11-11 15:07:16729 bool IsInSynchronousComposite() const {
730 return host_impl_->IsInSynchronousComposite();
731 }
732
Mario Bianucci244acf82020-06-10 04:40:35733 // These functions are used for plumbing DelegatedInkMetadata from blink
734 // through the compositor and into viz via a compositor frame. They should
735 // only be called after the JS API |updateInkTrailStartPoint| has been
736 // called, which populates the metadata with provided information.
Mario Bianucci3077de532020-05-21 21:22:35737 void set_delegated_ink_metadata(
Mario Bianuccia538c5d2021-03-15 20:40:23738 std::unique_ptr<gfx::DelegatedInkMetadata> metadata) {
Mario Bianucci3077de532020-05-21 21:22:35739 delegated_ink_metadata_ = std::move(metadata);
740 }
Mario Bianuccia538c5d2021-03-15 20:40:23741 std::unique_ptr<gfx::DelegatedInkMetadata> take_delegated_ink_metadata() {
Mario Bianucci244acf82020-06-10 04:40:35742 return std::move(delegated_ink_metadata_);
743 }
Mario Bianucci3077de532020-05-21 21:22:35744
Mohsen Izadicd2804d2020-07-15 03:39:05745 size_t events_metrics_from_main_thread_count_for_testing() const {
746 return events_metrics_from_main_thread_.size();
747 }
748
Xianzhu Wang118640fa2021-01-12 21:24:15749 bool device_viewport_rect_changed() const {
750 return device_viewport_rect_changed_;
751 }
752
Liviu Tinta7b9d69b2021-02-26 20:03:56753 bool viewport_mobile_optimized() const {
754 return host_impl_->viewport_mobile_optimized();
755 }
756
Vladimir Levin1b746faf2021-01-19 21:25:58757 // Add a document transition request from the embedder.
758 void AddDocumentTransitionRequest(
759 std::unique_ptr<DocumentTransitionRequest> request);
760
761 // Returns all of the document transition requests stored so far, and empties
762 // the internal list.
763 std::vector<std::unique_ptr<DocumentTransitionRequest>>
764 TakeDocumentTransitionRequests();
765
Vladimir Levin7b4ab442021-01-27 19:28:33766 bool HasDocumentTransitionRequests() const;
767
[email protected]3c0a3252013-03-18 04:24:36768 protected:
aelias58eec0812014-12-04 01:04:40769 float ClampPageScaleFactorToLimits(float page_scale_factor) const;
770 void PushPageScaleFactorAndLimits(const float* page_scale_factor,
771 float min_page_scale_factor,
772 float max_page_scale_factor);
773 bool SetPageScaleFactorLimits(float min_page_scale_factor,
774 float max_page_scale_factor);
775 void DidUpdatePageScale();
Sinan Sahinb6ffa912019-10-23 21:04:46776 void PushBrowserControls(const float* top_controls_shown_ratio,
777 const float* bottom_controls_shown_ratio);
778 bool ClampTopControlsShownRatio();
779 bool ClampBottomControlsShownRatio();
bokan0223f2f722016-06-23 12:35:01780
Walter Kormanaf60f632017-08-24 22:52:39781 private:
Robert Flack2a64f7b2018-11-22 21:59:28782 friend class LayerTreeHost;
783
David Bokan6357cc722018-06-11 01:09:52784 void UpdatePageScaleNode();
785
Walter Kormanaf60f632017-08-24 22:52:39786 ElementListType GetElementTypeForAnimation() const;
787 void UpdateTransformAnimation(ElementId element_id, int transform_node_index);
sunxd3e3a37a72018-07-06 22:58:43788 template <typename Functor>
789 LayerImpl* FindLayerThatIsHitByPointInEventHandlerRegion(
790 const gfx::PointF& screen_space_point,
791 const Functor& func);
Walter Kormanaf60f632017-08-24 22:52:39792
Walter Kormanaa326e42017-08-22 23:04:43793 LayerTreeHostImpl* host_impl_;
[email protected]3b31c6ac2012-12-06 21:27:29794 int source_frame_number_;
jaydasikacb93d1c2015-12-09 23:52:46795 int is_first_frame_after_commit_tracker_;
[email protected]3b31c6ac2012-12-06 21:27:29796 HeadsUpDisplayLayerImpl* hud_layer_;
ennee95b1542015-04-20 20:35:50797 PropertyTrees property_trees_;
[email protected]a30290142013-01-05 01:27:00798 SkColor background_color_;
[email protected]3b31c6ac2012-12-06 21:27:29799
pdrb2d4d4b2017-03-01 19:56:45800 int last_scrolled_scroll_node_index_;
pdr9bb53af2017-05-18 03:25:08801
Xianzhu Wangeb746a5c82018-11-29 04:07:19802 LayerTreeHost::ViewportPropertyIds viewport_property_ids_;
[email protected]57ac9482013-09-17 21:13:39803
jdduke449b5292015-04-23 19:36:44804 LayerSelection selection_;
[email protected]19aec372014-07-01 19:08:49805
aelias58eec0812014-12-04 01:04:40806 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor_;
[email protected]c60279472013-01-30 12:10:51807 float min_page_scale_factor_;
808 float max_page_scale_factor_;
W. James MacLean2a90bff2018-11-05 20:52:47809 float external_page_scale_factor_;
[email protected]c60279472013-01-30 12:10:51810
ajuma1d48e012015-09-25 22:24:16811 float device_scale_factor_;
oshima750cb4342015-10-31 00:59:01812 float painted_device_scale_factor_;
Dale Curtisaf1074b22020-08-20 06:33:30813 gfx::DisplayColorSpaces display_color_spaces_;
ajuma1d48e012015-09-25 22:24:16814
Jonathan Rossd0345bf2020-09-25 02:13:54815 viz::LocalSurfaceId local_surface_id_from_parent_;
Fady Samuel2899c7a2018-05-09 16:51:21816 bool new_local_surface_id_request_ = false;
W. James MacLean7df854c2019-08-28 16:17:53817 // Contains the physical rect of the device viewport, to be used in
818 // determining what needs to be drawn.
Xianzhu Wang118640fa2021-01-12 21:24:15819 bool device_viewport_rect_changed_ = false;
W. James MacLean7df854c2019-08-28 16:17:53820 gfx::Rect device_viewport_rect_;
kenrb5d78b842017-03-06 21:06:01821
ccameronb9aec4502014-12-05 19:31:00822 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll_;
823
Xianzhu Wang0340f14b2019-09-10 23:42:19824 // TODO(wangxianzhu): Combine layers_ and layer_list_ when we remove
825 // support of mask layers.
826
Xianzhu Wangf817d6c2019-09-17 20:08:34827 OwnedLayerImplList layer_list_;
828 // Maps from layer id to layer.
vollick83fbfc82016-03-22 18:33:27829 LayerImplMap layer_id_map_;
Xianzhu Wang0340f14b2019-09-10 23:42:19830
jaydasikabb0409e52016-03-08 04:05:19831 // Set of layers that need to push properties.
danakj956d1c822018-09-13 01:38:57832 base::flat_set<LayerImpl*> layers_that_should_push_properties_;
vollickcb3f6b12016-03-01 23:44:10833
weiliangc1f4b78a2017-03-24 20:16:42834 std::unordered_map<ElementId, float, ElementIdHash>
835 element_id_to_opacity_animations_;
836 std::unordered_map<ElementId, gfx::Transform, ElementIdHash>
837 element_id_to_transform_animations_;
838 std::unordered_map<ElementId, FilterOperations, ElementIdHash>
839 element_id_to_filter_animations_;
Mason Freed384fc5b2019-05-30 19:49:10840 std::unordered_map<ElementId, FilterOperations, ElementIdHash>
841 element_id_to_backdrop_filter_animations_;
jaydasika2368fd52016-05-11 19:38:29842
pdr8cafc0ba2017-05-22 18:39:17843 struct ScrollbarLayerIds {
844 int horizontal = Layer::INVALID_ID;
845 int vertical = Layer::INVALID_ID;
846 };
847 // Each scroll layer can have up to two scrollbar layers (vertical and
848 // horizontal). This mapping is maintained as part of scrollbar registration.
849 base::flat_map<ElementId, ScrollbarLayerIds>
850 element_id_to_scrollbar_layer_ids_;
aeliasa57c40d122015-10-08 00:20:09851
danakj7383c552015-02-11 18:01:48852 std::vector<PictureLayerImpl*> picture_layers_;
jaydasika10be2112017-05-26 04:35:50853
Stephen McGruer8e2d3552019-07-10 14:06:29854 // After commit (or impl-side invalidation), the LayerTreeHostImpl must walk
855 // all PictureLayerImpls that have PaintWorklets to ensure they are painted.
856 // To avoid unnecessary walking, we track that set here.
857 base::flat_set<PictureLayerImpl*> picture_layers_with_paint_worklets_;
858
akaba227bfbd62018-07-11 21:46:43859 base::flat_set<viz::SurfaceRange> surface_layer_ranges_;
[email protected]30fe19ff2013-07-04 00:54:45860
ajumab784ef42017-04-28 23:01:52861 // List of render surfaces for the most recently prepared frame.
862 RenderSurfaceList render_surface_list_;
863 // After drawing the |render_surface_list_| the areas in this region
danakj4902c302015-02-13 22:12:16864 // would not be fully covered by opaque content.
865 Region unoccluded_screen_space_region_;
[email protected]76ffd9e2012-12-20 19:12:47866
[email protected]615c78a2013-01-24 23:44:16867 bool needs_update_draw_properties_;
[email protected]6f90b9e2013-01-17 23:42:00868
Philip Rogers5e563782017-06-02 01:37:20869 // True if a scrollbar geometry value has changed. For example, if the scroll
870 // offset changes, scrollbar thumb positions need to be updated.
871 bool scrollbar_geometries_need_update_;
872
[email protected]db8259f2013-02-01 05:25:04873 // In impl-side painting mode, this is true when the tree may contain
874 // structural differences relative to the active tree.
875 bool needs_full_tree_sync_;
876
akaba227bfbd62018-07-11 21:46:43877 bool needs_surface_ranges_sync_;
jaydasika10be2112017-05-26 04:35:50878
[email protected]7d08a9352013-10-15 08:24:56879 bool next_activation_forces_redraw_;
880
[email protected]759dc9f2014-07-23 19:18:51881 bool has_ever_been_drawn_;
882
amaralp1107a292017-01-17 20:05:52883 bool handle_visibility_changed_;
884
danakj60bc3bc2016-04-09 00:24:48885 std::vector<std::unique_ptr<SwapPromise>> swap_promise_list_;
886 std::vector<std::unique_ptr<SwapPromise>> pinned_swap_promise_list_;
[email protected]b69c1db2013-11-27 00:05:19887
[email protected]c9280762013-08-01 06:28:57888 UIResourceRequestQueue ui_resource_request_queue_;
889
dtapuskaf024e552016-02-03 01:19:46890 bool have_scroll_event_handlers_;
danakj729a2f72018-07-10 17:40:35891 EventListenerProperties event_listener_properties_
892 [static_cast<size_t>(EventListenerClass::kLast) + 1];
dtapuskaee0b6982016-01-29 15:14:48893
Sinan Sahin92a360bc2019-12-05 19:20:45894 BrowserControlsParams browser_controls_params_;
bokan88eae012014-09-09 20:40:42895
Sandra Sun2288e8532017-11-30 22:50:16896 OverscrollBehavior overscroll_behavior_;
sunyunjiabbea8a92017-08-31 11:18:54897
mdjones2ee41afd2016-10-27 16:50:20898 // The amount that the browser controls are shown from 0 (hidden) to 1 (fully
aelias6004fe02015-02-07 21:43:01899 // shown).
mdjones2ee41afd2016-10-27 16:50:20900 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio_;
Sinan Sahinb6ffa912019-10-23 21:04:46901 scoped_refptr<SyncedBrowserControls> bottom_controls_shown_ratio_;
bokan88eae012014-09-09 20:40:42902
danakj60bc3bc2016-04-09 00:24:48903 std::unique_ptr<PendingPageScaleAnimation> pending_page_scale_animation_;
bokan915bf352014-10-02 21:57:14904
Eric Karl706ea6712018-12-21 22:41:38905 // Whether we have a request to force-send RenderFrameMetadata with the next
906 // frame.
907 bool force_send_metadata_request_ = false;
908
pdr80ecb9802017-05-16 03:40:09909 // Tracks the lifecycle which is used for enforcing dependencies between
910 // lifecycle states. See: |LayerTreeLifecycle|.
911 LayerTreeLifecycle lifecycle_;
912
Xiyuan Xia0274c582019-12-04 20:49:03913 // Display transform hint to tag frames generated from this tree.
914 gfx::OverlayTransform display_transform_hint_ = gfx::OVERLAY_TRANSFORM_NONE;
915
Sadrul Habib Chowdhury3d4df2e82018-06-02 05:18:00916 std::vector<LayerTreeHost::PresentationTimeCallback> presentation_callbacks_;
Sadrul Habib Chowdhuryf37cae52020-04-02 22:20:32917
918 // Event metrics that are reported back from the main thread.
Mohsen Izadib8878bf72020-11-06 19:16:42919 EventMetrics::List events_metrics_from_main_thread_;
Mario Bianucci3077de532020-05-21 21:22:35920
Mario Bianuccia538c5d2021-03-15 20:40:23921 std::unique_ptr<gfx::DelegatedInkMetadata> delegated_ink_metadata_;
Vladimir Levin1b746faf2021-01-19 21:25:58922
923 // Document transition requests to be transferred to Viz.
924 std::vector<std::unique_ptr<DocumentTransitionRequest>>
925 document_transition_requests_;
[email protected]3b31c6ac2012-12-06 21:27:29926};
927
[email protected]bf691c22013-03-26 21:15:06928} // namespace cc
[email protected]3b31c6ac2012-12-06 21:27:29929
[email protected]556fd292013-03-18 08:03:04930#endif // CC_TREES_LAYER_TREE_IMPL_H_