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

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 2867793002: Add a cache of LayerImpl's viewport layer type (Closed)
Patch Set: Fix compile on windows again 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
Index: cc/trees/layer_tree_impl.cc
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 1fe5871b8a0bc4da2f26728082415c94c7f2dd51..3be9697d152c355ac50d96c76049364621ae5c83 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;
jaydasika 2017/05/09 05:54:22 Since we want to avoid calling LayerById whenever
pdr. 2017/05/09 22:20:07 I'm a little torn on this because I don't know the
jaydasika 2017/05/09 22:55:11 Sounds good. lets commit this and see the perf gra
+#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.

Powered by Google App Engine
This is Rietveld 408576698