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

Side by Side Diff: cc/trees/layer_tree_host.cc

Issue 2716583004: cc: Remove SetNeedsUpdate function from cc::Layer (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 25 matching lines...) Expand all
36 #include "cc/debug/rendering_stats_instrumentation.h" 36 #include "cc/debug/rendering_stats_instrumentation.h"
37 #include "cc/input/layer_selection_bound.h" 37 #include "cc/input/layer_selection_bound.h"
38 #include "cc/input/page_scale_animation.h" 38 #include "cc/input/page_scale_animation.h"
39 #include "cc/layers/heads_up_display_layer.h" 39 #include "cc/layers/heads_up_display_layer.h"
40 #include "cc/layers/heads_up_display_layer_impl.h" 40 #include "cc/layers/heads_up_display_layer_impl.h"
41 #include "cc/layers/layer.h" 41 #include "cc/layers/layer.h"
42 #include "cc/layers/layer_iterator.h" 42 #include "cc/layers/layer_iterator.h"
43 #include "cc/layers/painted_scrollbar_layer.h" 43 #include "cc/layers/painted_scrollbar_layer.h"
44 #include "cc/resources/ui_resource_manager.h" 44 #include "cc/resources/ui_resource_manager.h"
45 #include "cc/trees/draw_property_utils.h" 45 #include "cc/trees/draw_property_utils.h"
46 #include "cc/trees/effect_node.h"
46 #include "cc/trees/layer_tree_host_client.h" 47 #include "cc/trees/layer_tree_host_client.h"
47 #include "cc/trees/layer_tree_host_common.h" 48 #include "cc/trees/layer_tree_host_common.h"
48 #include "cc/trees/layer_tree_host_impl.h" 49 #include "cc/trees/layer_tree_host_impl.h"
49 #include "cc/trees/layer_tree_impl.h" 50 #include "cc/trees/layer_tree_impl.h"
50 #include "cc/trees/mutator_host.h" 51 #include "cc/trees/mutator_host.h"
51 #include "cc/trees/property_tree_builder.h" 52 #include "cc/trees/property_tree_builder.h"
52 #include "cc/trees/proxy_main.h" 53 #include "cc/trees/proxy_main.h"
53 #include "cc/trees/single_thread_proxy.h" 54 #include "cc/trees/single_thread_proxy.h"
54 #include "cc/trees/swap_promise_manager.h" 55 #include "cc/trees/swap_promise_manager.h"
56 #include "cc/trees/transform_node.h"
55 #include "cc/trees/tree_synchronizer.h" 57 #include "cc/trees/tree_synchronizer.h"
56 #include "ui/gfx/geometry/size_conversions.h" 58 #include "ui/gfx/geometry/size_conversions.h"
57 #include "ui/gfx/geometry/vector2d_conversions.h" 59 #include "ui/gfx/geometry/vector2d_conversions.h"
58 60
59 namespace { 61 namespace {
60 static base::StaticAtomicSequenceNumber s_layer_tree_host_sequence_number; 62 static base::StaticAtomicSequenceNumber s_layer_tree_host_sequence_number;
61 } 63 }
62 64
63 namespace cc { 65 namespace cc {
64 66
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 void LayerTreeHost::FinishCommitOnImplThread( 268 void LayerTreeHost::FinishCommitOnImplThread(
267 LayerTreeHostImpl* host_impl) { 269 LayerTreeHostImpl* host_impl) {
268 DCHECK(task_runner_provider_->IsImplThread()); 270 DCHECK(task_runner_provider_->IsImplThread());
269 271
270 bool is_new_trace; 272 bool is_new_trace;
271 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); 273 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
272 if (is_new_trace && 274 if (is_new_trace &&
273 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() && 275 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() &&
274 root_layer()) { 276 root_layer()) {
275 LayerTreeHostCommon::CallFunctionForEveryLayer( 277 LayerTreeHostCommon::CallFunctionForEveryLayer(
276 this, [](Layer* layer) { layer->DidBeginTracing(); }); 278 this, [](Layer* layer) { layer->SetNeedsPushProperties(); });
danakj 2017/02/24 00:52:38 Can you transplant the comment about why we're doi
277 } 279 }
278 280
279 LayerTreeImpl* sync_tree = host_impl->sync_tree(); 281 LayerTreeImpl* sync_tree = host_impl->sync_tree();
280 282
281 if (next_commit_forces_redraw_) { 283 if (next_commit_forces_redraw_) {
282 sync_tree->ForceRedrawNextActivation(); 284 sync_tree->ForceRedrawNextActivation();
283 next_commit_forces_redraw_ = false; 285 next_commit_forces_redraw_ = false;
284 } 286 }
285 if (next_commit_forces_recalculate_raster_scales_) { 287 if (next_commit_forces_recalculate_raster_scales_) {
286 sync_tree->ForceRecalculateRasterScales(); 288 sync_tree->ForceRecalculateRasterScales();
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 632
631 if (hud_layer_) { 633 if (hud_layer_) {
632 hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size_, 634 hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size_,
633 device_scale_factor_); 635 device_scale_factor_);
634 } 636 }
635 637
636 gfx::Transform identity_transform; 638 gfx::Transform identity_transform;
637 LayerList update_layer_list; 639 LayerList update_layer_list;
638 640
639 { 641 {
642 base::AutoReset<bool> update_property_trees(&in_update_property_trees_,
643 true);
640 TRACE_EVENT0("cc", 644 TRACE_EVENT0("cc",
641 "LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees"); 645 "LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees");
642 TRACE_EVENT0( 646 TRACE_EVENT0(
643 TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), 647 TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"),
644 "LayerTreeHostInProcessCommon::ComputeVisibleRectsWithPropertyTrees"); 648 "LayerTreeHostInProcessCommon::ComputeVisibleRectsWithPropertyTrees");
645 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); 649 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
646 bool can_render_to_separate_surface = true; 650 bool can_render_to_separate_surface = true;
647 PropertyTrees* property_trees = &property_trees_; 651 PropertyTrees* property_trees = &property_trees_;
648 if (!settings_.use_layer_lists) { 652 if (!settings_.use_layer_lists) {
649 // If use_layer_lists is set, then the property trees should have been 653 // If use_layer_lists is set, then the property trees should have been
(...skipping 17 matching lines...) Expand all
667 can_render_to_separate_surface); 671 can_render_to_separate_surface);
668 draw_property_utils::FindLayersThatNeedUpdates(this, property_trees, 672 draw_property_utils::FindLayersThatNeedUpdates(this, property_trees,
669 &update_layer_list); 673 &update_layer_list);
670 } 674 }
671 675
672 for (const auto& layer : update_layer_list) 676 for (const auto& layer : update_layer_list)
673 layer->SavePaintProperties(); 677 layer->SavePaintProperties();
674 678
675 bool content_is_suitable_for_gpu = true; 679 bool content_is_suitable_for_gpu = true;
676 bool did_paint_content = 680 bool did_paint_content =
677 UpdateLayers(update_layer_list, &content_is_suitable_for_gpu); 681 PaintContent(update_layer_list, &content_is_suitable_for_gpu);
678 682
679 if (content_is_suitable_for_gpu) { 683 if (content_is_suitable_for_gpu) {
680 ++num_consecutive_frames_suitable_for_gpu_; 684 ++num_consecutive_frames_suitable_for_gpu_;
681 if (num_consecutive_frames_suitable_for_gpu_ >= 685 if (num_consecutive_frames_suitable_for_gpu_ >=
682 kNumFramesToConsiderBeforeGpuRasterization) { 686 kNumFramesToConsiderBeforeGpuRasterization) {
683 content_is_suitable_for_gpu_rasterization_ = true; 687 content_is_suitable_for_gpu_rasterization_ = true;
684 } 688 }
685 } else { 689 } else {
686 num_consecutive_frames_suitable_for_gpu_ = 0; 690 num_consecutive_frames_suitable_for_gpu_ = 0;
687 content_is_suitable_for_gpu_rasterization_ = false; 691 content_is_suitable_for_gpu_rasterization_ = false;
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 988
985 Layer* LayerTreeHost::LayerById(int id) const { 989 Layer* LayerTreeHost::LayerById(int id) const {
986 auto iter = layer_id_map_.find(id); 990 auto iter = layer_id_map_.find(id);
987 return iter != layer_id_map_.end() ? iter->second : nullptr; 991 return iter != layer_id_map_.end() ? iter->second : nullptr;
988 } 992 }
989 993
990 size_t LayerTreeHost::NumLayers() const { 994 size_t LayerTreeHost::NumLayers() const {
991 return layer_id_map_.size(); 995 return layer_id_map_.size();
992 } 996 }
993 997
994 bool LayerTreeHost::UpdateLayers(const LayerList& update_layer_list, 998 bool LayerTreeHost::PaintContent(const LayerList& update_layer_list,
995 bool* content_is_suitable_for_gpu) { 999 bool* content_is_suitable_for_gpu) {
996 base::AutoReset<bool> painting(&in_paint_layer_contents_, true); 1000 base::AutoReset<bool> painting(&in_paint_layer_contents_, true);
997 bool did_paint_content = false; 1001 bool did_paint_content = false;
998 for (const auto& layer : update_layer_list) { 1002 for (const auto& layer : update_layer_list) {
999 did_paint_content |= layer->Update(); 1003 did_paint_content |= layer->Update();
1000 *content_is_suitable_for_gpu &= layer->IsSuitableForGpuRasterization(); 1004 *content_is_suitable_for_gpu &= layer->IsSuitableForGpuRasterization();
1001 } 1005 }
1002 return did_paint_content; 1006 return did_paint_content;
1003 } 1007 }
1004 1008
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 Layer* layer = LayerByElementId(element_id); 1207 Layer* layer = LayerByElementId(element_id);
1204 DCHECK(layer); 1208 DCHECK(layer);
1205 layer->OnFilterAnimated(filters); 1209 layer->OnFilterAnimated(filters);
1206 } 1210 }
1207 1211
1208 void LayerTreeHost::SetElementOpacityMutated(ElementId element_id, 1212 void LayerTreeHost::SetElementOpacityMutated(ElementId element_id,
1209 ElementListType list_type, 1213 ElementListType list_type,
1210 float opacity) { 1214 float opacity) {
1211 Layer* layer = LayerByElementId(element_id); 1215 Layer* layer = LayerByElementId(element_id);
1212 DCHECK(layer); 1216 DCHECK(layer);
1217 DCHECK_GE(opacity, 0.f);
1218 DCHECK_LE(opacity, 1.f);
1213 layer->OnOpacityAnimated(opacity); 1219 layer->OnOpacityAnimated(opacity);
1220
1221 if (property_trees_.IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT,
1222 layer->id())) {
1223 DCHECK_EQ(layer->effect_tree_index(),
1224 property_trees_.layer_id_to_effect_node_index[layer->id()]);
1225 EffectNode* node =
1226 property_trees_.effect_tree.Node(layer->effect_tree_index());
1227 if (node->opacity == opacity)
1228 return;
1229
1230 node->opacity = opacity;
1231 property_trees_.effect_tree.set_needs_update(true);
1232 }
1233
1234 SetNeedsUpdateLayers();
1214 } 1235 }
1215 1236
1216 void LayerTreeHost::SetElementTransformMutated( 1237 void LayerTreeHost::SetElementTransformMutated(
1217 ElementId element_id, 1238 ElementId element_id,
1218 ElementListType list_type, 1239 ElementListType list_type,
1219 const gfx::Transform& transform) { 1240 const gfx::Transform& transform) {
1220 Layer* layer = LayerByElementId(element_id); 1241 Layer* layer = LayerByElementId(element_id);
1221 DCHECK(layer); 1242 DCHECK(layer);
1222 layer->OnTransformAnimated(transform); 1243 layer->OnTransformAnimated(transform);
1244 if (property_trees_.IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
danakj 2017/02/24 00:52:38 nit: maybe im being pedantic but can you make the
1245 layer->id())) {
1246 DCHECK_EQ(layer->transform_tree_index(),
1247 property_trees_.layer_id_to_transform_node_index[layer->id()]);
1248 TransformNode* node =
1249 property_trees_.transform_tree.Node(layer->transform_tree_index());
1250 if (node->local == transform)
1251 return;
1252
1253 node->local = transform;
1254 node->needs_local_transform_update = true;
1255 node->has_potential_animation = true;
1256 property_trees_.transform_tree.set_needs_update(true);
1257 }
1258 SetNeedsUpdateLayers();
1223 } 1259 }
1224 1260
1225 void LayerTreeHost::SetElementScrollOffsetMutated( 1261 void LayerTreeHost::SetElementScrollOffsetMutated(
1226 ElementId element_id, 1262 ElementId element_id,
1227 ElementListType list_type, 1263 ElementListType list_type,
1228 const gfx::ScrollOffset& scroll_offset) { 1264 const gfx::ScrollOffset& scroll_offset) {
1229 Layer* layer = LayerByElementId(element_id); 1265 Layer* layer = LayerByElementId(element_id);
1230 DCHECK(layer); 1266 DCHECK(layer);
1231 layer->OnScrollOffsetAnimated(scroll_offset); 1267 layer->OnScrollOffsetAnimated(scroll_offset);
1232 } 1268 }
(...skipping 30 matching lines...) Expand all
1263 LayerListReverseIterator<Layer> LayerTreeHost::rend() { 1299 LayerListReverseIterator<Layer> LayerTreeHost::rend() {
1264 return LayerListReverseIterator<Layer>(nullptr); 1300 return LayerListReverseIterator<Layer>(nullptr);
1265 } 1301 }
1266 1302
1267 void LayerTreeHost::SetNeedsDisplayOnAllLayers() { 1303 void LayerTreeHost::SetNeedsDisplayOnAllLayers() {
1268 for (auto* layer : *this) 1304 for (auto* layer : *this)
1269 layer->SetNeedsDisplay(); 1305 layer->SetNeedsDisplay();
1270 } 1306 }
1271 1307
1272 } // namespace cc 1308 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698