Chromium Code Reviews| Index: cc/trees/layer_tree_host.cc |
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc |
| index c0425180ad777b2a0bfe41e6dda4852e1f7b20a1..dc909e1a0c76bbfd3aea1abcfde2b6891508fb36 100644 |
| --- a/cc/trees/layer_tree_host.cc |
| +++ b/cc/trees/layer_tree_host.cc |
| @@ -43,6 +43,7 @@ |
| #include "cc/layers/painted_scrollbar_layer.h" |
| #include "cc/resources/ui_resource_manager.h" |
| #include "cc/trees/draw_property_utils.h" |
| +#include "cc/trees/effect_node.h" |
| #include "cc/trees/layer_tree_host_client.h" |
| #include "cc/trees/layer_tree_host_common.h" |
| #include "cc/trees/layer_tree_host_impl.h" |
| @@ -52,6 +53,7 @@ |
| #include "cc/trees/proxy_main.h" |
| #include "cc/trees/single_thread_proxy.h" |
| #include "cc/trees/swap_promise_manager.h" |
| +#include "cc/trees/transform_node.h" |
| #include "cc/trees/tree_synchronizer.h" |
| #include "ui/gfx/geometry/size_conversions.h" |
| #include "ui/gfx/geometry/vector2d_conversions.h" |
| @@ -273,7 +275,7 @@ void LayerTreeHost::FinishCommitOnImplThread( |
| frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() && |
| root_layer()) { |
| LayerTreeHostCommon::CallFunctionForEveryLayer( |
| - this, [](Layer* layer) { layer->DidBeginTracing(); }); |
| + this, [](Layer* layer) { layer->SetNeedsPushProperties(); }); |
|
danakj
2017/02/24 00:52:38
Can you transplant the comment about why we're doi
|
| } |
| LayerTreeImpl* sync_tree = host_impl->sync_tree(); |
| @@ -637,6 +639,8 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { |
| LayerList update_layer_list; |
| { |
| + base::AutoReset<bool> update_property_trees(&in_update_property_trees_, |
| + true); |
| TRACE_EVENT0("cc", |
| "LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees"); |
| TRACE_EVENT0( |
| @@ -674,7 +678,7 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { |
| bool content_is_suitable_for_gpu = true; |
| bool did_paint_content = |
| - UpdateLayers(update_layer_list, &content_is_suitable_for_gpu); |
| + PaintContent(update_layer_list, &content_is_suitable_for_gpu); |
| if (content_is_suitable_for_gpu) { |
| ++num_consecutive_frames_suitable_for_gpu_; |
| @@ -991,7 +995,7 @@ size_t LayerTreeHost::NumLayers() const { |
| return layer_id_map_.size(); |
| } |
| -bool LayerTreeHost::UpdateLayers(const LayerList& update_layer_list, |
| +bool LayerTreeHost::PaintContent(const LayerList& update_layer_list, |
| bool* content_is_suitable_for_gpu) { |
| base::AutoReset<bool> painting(&in_paint_layer_contents_, true); |
| bool did_paint_content = false; |
| @@ -1210,7 +1214,24 @@ void LayerTreeHost::SetElementOpacityMutated(ElementId element_id, |
| float opacity) { |
| Layer* layer = LayerByElementId(element_id); |
| DCHECK(layer); |
| + DCHECK_GE(opacity, 0.f); |
| + DCHECK_LE(opacity, 1.f); |
| layer->OnOpacityAnimated(opacity); |
| + |
| + if (property_trees_.IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, |
| + layer->id())) { |
| + DCHECK_EQ(layer->effect_tree_index(), |
| + property_trees_.layer_id_to_effect_node_index[layer->id()]); |
| + EffectNode* node = |
| + property_trees_.effect_tree.Node(layer->effect_tree_index()); |
| + if (node->opacity == opacity) |
| + return; |
| + |
| + node->opacity = opacity; |
| + property_trees_.effect_tree.set_needs_update(true); |
| + } |
| + |
| + SetNeedsUpdateLayers(); |
| } |
| void LayerTreeHost::SetElementTransformMutated( |
| @@ -1220,6 +1241,21 @@ void LayerTreeHost::SetElementTransformMutated( |
| Layer* layer = LayerByElementId(element_id); |
| DCHECK(layer); |
| layer->OnTransformAnimated(transform); |
| + if (property_trees_.IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
|
danakj
2017/02/24 00:52:38
nit: maybe im being pedantic but can you make the
|
| + layer->id())) { |
| + DCHECK_EQ(layer->transform_tree_index(), |
| + property_trees_.layer_id_to_transform_node_index[layer->id()]); |
| + TransformNode* node = |
| + property_trees_.transform_tree.Node(layer->transform_tree_index()); |
| + if (node->local == transform) |
| + return; |
| + |
| + node->local = transform; |
| + node->needs_local_transform_update = true; |
| + node->has_potential_animation = true; |
| + property_trees_.transform_tree.set_needs_update(true); |
| + } |
| + SetNeedsUpdateLayers(); |
| } |
| void LayerTreeHost::SetElementScrollOffsetMutated( |