| Index: cc/trees/layer_tree_host.cc
|
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
|
| index 320dd018cf7c24bcf34f2bd4d27e8a9fee89d7ae..9f9ad9d044eae285b5e159ccaaf2c8708c909d11 100644
|
| --- a/cc/trees/layer_tree_host.cc
|
| +++ b/cc/trees/layer_tree_host.cc
|
| @@ -290,6 +290,7 @@ void LayerTreeHost::FinishCommitOnImplThread(
|
| }
|
|
|
| LayerTreeImpl* sync_tree = host_impl->sync_tree();
|
| + sync_tree->lifecycle().AdvanceTo(LayerTreeLifecycle::kBeginningSync);
|
|
|
| if (next_commit_forces_redraw_) {
|
| sync_tree->ForceRedrawNextActivation();
|
| @@ -305,34 +306,36 @@ void LayerTreeHost::FinishCommitOnImplThread(
|
| if (needs_full_tree_sync_)
|
| TreeSynchronizer::SynchronizeTrees(root_layer(), sync_tree);
|
|
|
| - PushPropertiesTo(sync_tree);
|
| + {
|
| + TRACE_EVENT0("cc", "LayerTreeHostInProcess::PushProperties");
|
|
|
| - sync_tree->PassSwapPromises(swap_promise_manager_.TakeSwapPromises());
|
| + PushPropertyTreesTo(sync_tree);
|
| + sync_tree->lifecycle().AdvanceTo(LayerTreeLifecycle::kSyncedPropertyTrees);
|
|
|
| - host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_);
|
| - host_impl->SetContentIsSuitableForGpuRasterization(
|
| - content_is_suitable_for_gpu_rasterization_);
|
| - RecordGpuRasterizationHistogram(host_impl);
|
| + TreeSynchronizer::PushLayerProperties(this, sync_tree);
|
| + sync_tree->lifecycle().AdvanceTo(
|
| + LayerTreeLifecycle::kSyncedLayerProperties);
|
|
|
| - host_impl->SetViewportSize(device_viewport_size_);
|
| - sync_tree->SetDeviceScaleFactor(device_scale_factor_);
|
| - host_impl->SetDebugState(debug_state_);
|
| + PushLayerTreePropertiesTo(sync_tree);
|
| + PushLayerTreeHostPropertiesTo(host_impl);
|
|
|
| - if (did_navigate_) {
|
| - did_navigate_ = false;
|
| - host_impl->ClearImageCacheOnNavigation();
|
| - }
|
| + sync_tree->PassSwapPromises(swap_promise_manager_.TakeSwapPromises());
|
|
|
| - sync_tree->set_ui_resource_request_queue(
|
| - ui_resource_manager_->TakeUIResourcesRequests());
|
| + // TODO(pdr): Move this into PushPropertyTreesTo or introduce a lifecycle
|
| + // state for it.
|
| + sync_tree->SetDeviceScaleFactor(device_scale_factor_);
|
|
|
| - {
|
| - TRACE_EVENT0("cc", "LayerTreeHostInProcess::PushProperties");
|
| + if (did_navigate_) {
|
| + did_navigate_ = false;
|
| + host_impl->ClearImageCacheOnNavigation();
|
| + }
|
|
|
| - TreeSynchronizer::PushLayerProperties(this, sync_tree);
|
| + sync_tree->set_ui_resource_request_queue(
|
| + ui_resource_manager_->TakeUIResourcesRequests());
|
|
|
| // This must happen after synchronizing property trees and after pushing
|
| // properties, which updates the clobber_active_value flag.
|
| + // TODO(pdr): Enforce this comment with DCHECKS and a lifecycle state.
|
| sync_tree->property_trees()->scroll_tree.PushScrollUpdatesFromMainThread(
|
| property_trees(), sync_tree);
|
|
|
| @@ -341,6 +344,7 @@ void LayerTreeHost::FinishCommitOnImplThread(
|
| // host pushes properties as animation host push properties can change
|
| // Animation::InEffect and we want the old InEffect value for updating
|
| // property tree scrolling and animation.
|
| + // TODO(pdr): Enforce this comment with DCHECKS and a lifecycle state.
|
| bool is_impl_side_update = false;
|
| sync_tree->UpdatePropertyTreeScrollingAndAnimationFromMainThread(
|
| is_impl_side_update);
|
| @@ -348,6 +352,8 @@ void LayerTreeHost::FinishCommitOnImplThread(
|
| TRACE_EVENT0("cc", "LayerTreeHostInProcess::AnimationHost::PushProperties");
|
| DCHECK(host_impl->mutator_host());
|
| mutator_host_->PushPropertiesTo(host_impl->mutator_host());
|
| +
|
| + sync_tree->lifecycle().AdvanceTo(LayerTreeLifecycle::kNotSyncing);
|
| }
|
|
|
| // Transfer image decode requests to the impl thread.
|
| @@ -359,6 +365,23 @@ void LayerTreeHost::FinishCommitOnImplThread(
|
| property_trees_.ResetAllChangeTracking();
|
| }
|
|
|
| +void LayerTreeHost::PushPropertyTreesTo(LayerTreeImpl* tree_impl) {
|
| + bool property_trees_changed_on_active_tree =
|
| + tree_impl->IsActiveTree() && tree_impl->property_trees()->changed;
|
| + // Property trees may store damage status. We preserve the sync tree damage
|
| + // status by pushing the damage status from sync tree property trees to main
|
| + // thread property trees or by moving it onto the layers.
|
| + if (root_layer_ && property_trees_changed_on_active_tree) {
|
| + if (property_trees_.sequence_number ==
|
| + tree_impl->property_trees()->sequence_number)
|
| + tree_impl->property_trees()->PushChangeTrackingTo(&property_trees_);
|
| + else
|
| + tree_impl->MoveChangeTrackingToLayers();
|
| + }
|
| +
|
| + tree_impl->SetPropertyTrees(&property_trees_);
|
| +}
|
| +
|
| void LayerTreeHost::WillCommit() {
|
| swap_promise_manager_.WillCommit();
|
| client_->WillCommit();
|
| @@ -1122,7 +1145,7 @@ void LayerTreeHost::SetPropertyTreesNeedRebuild() {
|
| SetNeedsUpdateLayers();
|
| }
|
|
|
| -void LayerTreeHost::PushPropertiesTo(LayerTreeImpl* tree_impl) {
|
| +void LayerTreeHost::PushLayerTreePropertiesTo(LayerTreeImpl* tree_impl) {
|
| tree_impl->set_needs_full_tree_sync(needs_full_tree_sync_);
|
| needs_full_tree_sync_ = false;
|
|
|
| @@ -1160,21 +1183,6 @@ void LayerTreeHost::PushPropertiesTo(LayerTreeImpl* tree_impl) {
|
|
|
| tree_impl->RegisterSelection(selection_);
|
|
|
| - bool property_trees_changed_on_active_tree =
|
| - tree_impl->IsActiveTree() && tree_impl->property_trees()->changed;
|
| - // Property trees may store damage status. We preserve the sync tree damage
|
| - // status by pushing the damage status from sync tree property trees to main
|
| - // thread property trees or by moving it onto the layers.
|
| - if (root_layer_ && property_trees_changed_on_active_tree) {
|
| - if (property_trees_.sequence_number ==
|
| - tree_impl->property_trees()->sequence_number)
|
| - tree_impl->property_trees()->PushChangeTrackingTo(&property_trees_);
|
| - else
|
| - tree_impl->MoveChangeTrackingToLayers();
|
| - }
|
| - // Setting property trees must happen before pushing the page scale.
|
| - tree_impl->SetPropertyTrees(&property_trees_);
|
| -
|
| tree_impl->PushPageScaleFromMainThread(
|
| page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_);
|
|
|
| @@ -1205,6 +1213,17 @@ void LayerTreeHost::PushPropertiesTo(LayerTreeImpl* tree_impl) {
|
| tree_impl->set_has_ever_been_drawn(false);
|
| }
|
|
|
| +void LayerTreeHost::PushLayerTreeHostPropertiesTo(
|
| + LayerTreeHostImpl* host_impl) {
|
| + host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_);
|
| + host_impl->SetContentIsSuitableForGpuRasterization(
|
| + content_is_suitable_for_gpu_rasterization_);
|
| + RecordGpuRasterizationHistogram(host_impl);
|
| +
|
| + host_impl->SetViewportSize(device_viewport_size_);
|
| + host_impl->SetDebugState(debug_state_);
|
| +}
|
| +
|
| Layer* LayerTreeHost::LayerByElementId(ElementId element_id) const {
|
| auto iter = element_layers_map_.find(element_id);
|
| return iter != element_layers_map_.end() ? iter->second : nullptr;
|
|
|