Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1563)

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 2867793002: Add a cache of LayerImpl's viewport layer type (Closed)
Patch Set: Rebase from space Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_impl.cc
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 33e17df36dbcd6eccc72e0f565d7195437c20185..260ce711a3537727afd7a4b7c2d85ec534bf39ea 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -139,16 +139,24 @@ void LayerTreeImpl::RecreateTileResources() {
}
bool LayerTreeImpl::IsViewportLayerId(int id) const {
- if (id == inner_viewport_scroll_layer_id_ ||
- id == outer_viewport_scroll_layer_id_)
- return true;
+#if DCHECK_IS_ON()
+ // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's
+ // viewport layers.
+ if (id == inner_viewport_scroll_layer_id_)
+ DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL);
+ if (id == outer_viewport_scroll_layer_id_)
+ DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL);
if (InnerViewportContainerLayer() &&
id == InnerViewportContainerLayer()->id())
- return true;
+ DCHECK(InnerViewportContainerLayer()->viewport_layer_type() ==
+ INNER_VIEWPORT_CONTAINER);
if (OuterViewportContainerLayer() &&
id == OuterViewportContainerLayer()->id())
- return true;
-
+ DCHECK(OuterViewportContainerLayer()->viewport_layer_type() ==
+ OUTER_VIEWPORT_CONTAINER);
+#endif
+ if (auto* layer = LayerById(id))
+ return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER;
return false;
}
@@ -410,6 +418,12 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
target_tree->set_bottom_controls_height(bottom_controls_height_);
target_tree->PushBrowserControls(nullptr);
+ // The page scale factor update can affect scrolling which requires that
+ // these ids are set, so this must be before PushPageScaleFactorAndLimits.
+ target_tree->SetViewportLayersFromIds(
+ overscroll_elasticity_layer_id_, page_scale_layer_id_,
+ inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
+
// Active tree already shares the page_scale_factor object with pending
// tree so only the limits need to be provided.
target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(),
@@ -426,10 +440,6 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
target_tree->pending_page_scale_animation_ =
std::move(pending_page_scale_animation_);
- target_tree->SetViewportLayersFromIds(
- overscroll_elasticity_layer_id_, page_scale_layer_id_,
- inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
-
target_tree->RegisterSelection(selection_);
// This should match the property synchronization in
@@ -974,13 +984,26 @@ void LayerTreeImpl::SetViewportLayersFromIds(
page_scale_layer_id_ = page_scale_layer_id;
inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id;
outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id;
+
+ UpdateViewportLayerTypes();
}
void LayerTreeImpl::ClearViewportLayers() {
- overscroll_elasticity_layer_id_ = Layer::INVALID_ID;
- page_scale_layer_id_ = Layer::INVALID_ID;
- inner_viewport_scroll_layer_id_ = Layer::INVALID_ID;
- outer_viewport_scroll_layer_id_ = Layer::INVALID_ID;
+ SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID,
+ Layer::INVALID_ID, Layer::INVALID_ID);
+}
+
+void LayerTreeImpl::UpdateViewportLayerTypes() {
+ if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) {
+ inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL);
+ if (auto* inner_container = inner_scroll->scroll_clip_layer())
+ inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER);
+ }
+ if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) {
+ outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL);
+ if (auto* outer_container = outer_scroll->scroll_clip_layer())
+ outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER);
+ }
}
// For unit tests, we use the layer's id as its element id.
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698