 Chromium Code Reviews
 Chromium Code Reviews Issue 2873313004:
  Harmonize LayerTreeHost/LayerTreeHostImpl synchronization steps  (Closed)
    
  
    Issue 2873313004:
  Harmonize LayerTreeHost/LayerTreeHostImpl synchronization steps  (Closed) 
  | Index: cc/trees/layer_tree_impl.cc | 
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc | 
| index 7290a5d122b036a0134f2af27ba0e156759eacca..23fe894d2d109e11e314aa1b69ab26cd3e430230 100644 | 
| --- a/cc/trees/layer_tree_impl.cc | 
| +++ b/cc/trees/layer_tree_impl.cc | 
| @@ -162,6 +162,8 @@ bool LayerTreeImpl::IsViewportLayerId(int id) const { | 
| void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { | 
| DidUpdateScrollState(layer_id); | 
| + | 
| + DCHECK(PropertyTreeSyncComplete()); | 
| TransformTree& transform_tree = property_trees()->transform_tree; | 
| ScrollTree& scroll_tree = property_trees()->scroll_tree; | 
| int transform_id = TransformTree::kInvalidNodeId; | 
| @@ -199,6 +201,10 @@ void LayerTreeImpl::DidUpdateScrollState(int layer_id) { | 
| if (!IsActiveTree()) | 
| return; | 
| + // If we are syncing, the scroll_clip_layer properties should be up-to-date. | 
| + // TODO(pdr): This DCHECK fails on existing tests but should be enabled. | 
| + // DCHECK(layer_tree_host_impl_->SyncStateComplete(SYNCED_LAYER_PROPERTIES)); | 
| 
jaydasika
2017/05/12 18:19:16
Something related I just noticed : LayerImpl::SetB
 
pdr.
2017/05/15 18:30:24
+1, this bug is all over :(
 | 
| + | 
| if (layer_id == Layer::INVALID_ID) | 
| return; | 
| @@ -382,10 +388,7 @@ void LayerTreeImpl::SetPropertyTrees(PropertyTrees* property_trees) { | 
| property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); | 
| } | 
| -void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 
| - // The request queue should have been processed and does not require a push. | 
| - DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 
| - | 
| +void LayerTreeImpl::PushPropertyTreesTo(LayerTreeImpl* target_tree) { | 
| // To maintain the current scrolling node we need to use element ids which | 
| // are stable across the property tree update in SetPropertyTrees. | 
| ElementId scrolling_element_id; | 
| @@ -400,6 +403,11 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 
| scrolling_node = scroll_tree.FindNodeFromElementId(scrolling_element_id); | 
| } | 
| target_tree->SetCurrentlyScrollingNode(scrolling_node); | 
| 
chrishtr
2017/05/12 23:13:29
"just noting" --wkorman
It seems perhaps this fie
 | 
| +} | 
| + | 
| +void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 
| + // The request queue should have been processed and does not require a push. | 
| + DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 
| target_tree->property_trees()->scroll_tree.PushScrollUpdatesFromPendingTree( | 
| &property_trees_, target_tree); | 
| @@ -768,6 +776,7 @@ void LayerTreeImpl::UpdatePropertyTreeScrollingAndAnimationFromMainThread( | 
| void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { | 
| DCHECK(IsActiveTree()); | 
| + DCHECK(PropertyTreeSyncComplete()); | 
| if (page_scale_factor()->SetCurrent( | 
| ClampPageScaleFactorToLimits(active_page_scale))) { | 
| DidUpdatePageScale(); | 
| @@ -818,6 +827,7 @@ void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, | 
| if (changed_page_scale) | 
| DidUpdatePageScale(); | 
| + DCHECK(PropertyTreeSyncComplete()); | 
| if (page_scale_factor) { | 
| if (PageScaleLayer()) { | 
| draw_property_utils::UpdatePageScaleFactor( | 
| @@ -994,6 +1004,10 @@ void LayerTreeImpl::ClearViewportLayers() { | 
| } | 
| void LayerTreeImpl::UpdateViewportLayerTypes() { | 
| + // If we are syncing, the scroll_clip_layer properties should be up-to-date. | 
| + // TODO(pdr): This DCHECK fails on existing tests but should be enabled. | 
| 
enne (OOO)
2017/05/12 17:25:06
This is a pre-existing data inconsistency, I guess
 
pdr.
2017/05/15 18:30:24
This is due to how https://codereview.chromium.org
 
pdr.
2017/05/15 18:56:42
I've reverted this change and will do it in a foll
 | 
| + // DCHECK(layer_tree_host_impl_->SyncStateComplete(SYNCED_LAYER_PROPERTIES)); | 
| + | 
| 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()) |