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

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

Issue 2781483006: cc : Compute render surface is_clipped outside property tree building (Closed)
Patch Set: . Created 3 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/property_tree_builder.h" 5 #include "cc/trees/property_tree_builder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 const LayerType* inner_viewport_scroll_layer; 43 const LayerType* inner_viewport_scroll_layer;
44 const LayerType* outer_viewport_scroll_layer; 44 const LayerType* outer_viewport_scroll_layer;
45 const LayerType* overscroll_elasticity_layer; 45 const LayerType* overscroll_elasticity_layer;
46 gfx::Vector2dF elastic_overscroll; 46 gfx::Vector2dF elastic_overscroll;
47 float page_scale_factor; 47 float page_scale_factor;
48 bool in_subtree_of_page_scale_layer; 48 bool in_subtree_of_page_scale_layer;
49 bool affected_by_inner_viewport_bounds_delta; 49 bool affected_by_inner_viewport_bounds_delta;
50 bool affected_by_outer_viewport_bounds_delta; 50 bool affected_by_outer_viewport_bounds_delta;
51 bool should_flatten; 51 bool should_flatten;
52 bool is_hidden; 52 bool is_hidden;
53 bool apply_ancestor_clip;
54 uint32_t main_thread_scrolling_reasons; 53 uint32_t main_thread_scrolling_reasons;
55 bool scroll_tree_parent_created_by_uninheritable_criteria; 54 bool scroll_tree_parent_created_by_uninheritable_criteria;
56 const gfx::Transform* device_transform; 55 const gfx::Transform* device_transform;
57 gfx::Transform compound_transform_since_render_target; 56 gfx::Transform compound_transform_since_render_target;
58 bool axis_align_since_render_target; 57 bool axis_align_since_render_target;
59 SkColor safe_opaque_background_color; 58 SkColor safe_opaque_background_color;
60 }; 59 };
61 60
62 template <typename LayerType> 61 template <typename LayerType>
63 struct DataForRecursionFromChild { 62 struct DataForRecursionFromChild {
(...skipping 16 matching lines...) Expand all
80 79
81 static LayerStickyPositionConstraint StickyPositionConstraint(Layer* layer) { 80 static LayerStickyPositionConstraint StickyPositionConstraint(Layer* layer) {
82 return layer->sticky_position_constraint(); 81 return layer->sticky_position_constraint();
83 } 82 }
84 83
85 static LayerStickyPositionConstraint StickyPositionConstraint( 84 static LayerStickyPositionConstraint StickyPositionConstraint(
86 LayerImpl* layer) { 85 LayerImpl* layer) {
87 return layer->test_properties()->sticky_position_constraint; 86 return layer->test_properties()->sticky_position_constraint;
88 } 87 }
89 88
90 struct PreCalculateMetaInformationRecursiveData {
91 size_t num_unclipped_descendants;
92 int num_descendants_that_draw_content;
93
94 PreCalculateMetaInformationRecursiveData()
95 : num_unclipped_descendants(0),
96 num_descendants_that_draw_content(0) {}
97
98 void Merge(const PreCalculateMetaInformationRecursiveData& data) {
99 num_unclipped_descendants += data.num_unclipped_descendants;
100 num_descendants_that_draw_content += data.num_descendants_that_draw_content;
101 }
102 };
103
104 static inline bool IsRootLayer(const Layer* layer) {
105 return !layer->parent();
106 }
107
108 static bool IsMetaInformationRecomputationNeeded(Layer* layer) {
109 return layer->layer_tree_host()->needs_meta_info_recomputation();
110 }
111
112 // Recursively walks the layer tree(if needed) to compute any information
113 // that is needed before doing the main recursion.
114 static void PreCalculateMetaInformationInternal(
115 Layer* layer,
116 PreCalculateMetaInformationRecursiveData* recursive_data) {
117 if (!IsMetaInformationRecomputationNeeded(layer)) {
118 DCHECK(IsRootLayer(layer));
119 return;
120 }
121
122 if (layer->clip_parent())
123 recursive_data->num_unclipped_descendants++;
124
125 for (size_t i = 0; i < layer->children().size(); ++i) {
126 Layer* child_layer = layer->child_at(i);
127
128 PreCalculateMetaInformationRecursiveData data_for_child;
129 PreCalculateMetaInformationInternal(child_layer, &data_for_child);
130 recursive_data->Merge(data_for_child);
131 }
132
133 if (layer->clip_children()) {
134 size_t num_clip_children = layer->clip_children()->size();
135 DCHECK_GE(recursive_data->num_unclipped_descendants, num_clip_children);
136 recursive_data->num_unclipped_descendants -= num_clip_children;
137 }
138
139 layer->set_num_unclipped_descendants(
140 recursive_data->num_unclipped_descendants);
141
142 if (IsRootLayer(layer))
143 layer->layer_tree_host()->SetNeedsMetaInfoRecomputation(false);
144 }
145
146 static void PreCalculateMetaInformationInternalForTesting(
147 LayerImpl* layer,
148 PreCalculateMetaInformationRecursiveData* recursive_data) {
149 if (layer->test_properties()->clip_parent)
150 recursive_data->num_unclipped_descendants++;
151
152 for (size_t i = 0; i < layer->test_properties()->children.size(); ++i) {
153 LayerImpl* child_layer = layer->test_properties()->children[i];
154
155 PreCalculateMetaInformationRecursiveData data_for_child;
156 PreCalculateMetaInformationInternalForTesting(child_layer, &data_for_child);
157 recursive_data->Merge(data_for_child);
158 }
159
160 if (layer->test_properties()->clip_children) {
161 size_t num_clip_children = layer->test_properties()->clip_children->size();
162 DCHECK_GE(recursive_data->num_unclipped_descendants, num_clip_children);
163 recursive_data->num_unclipped_descendants -= num_clip_children;
164 }
165
166 layer->test_properties()->num_unclipped_descendants =
167 recursive_data->num_unclipped_descendants;
168 // TODO(enne): this should be synced from the main thread, so is only
169 // for tests constructing layers on the compositor thread.
170 layer->test_properties()->num_descendants_that_draw_content =
171 recursive_data->num_descendants_that_draw_content;
172
173 if (layer->DrawsContent())
174 recursive_data->num_descendants_that_draw_content++;
175 }
176
177 static LayerImplList& Children(LayerImpl* layer) { 89 static LayerImplList& Children(LayerImpl* layer) {
178 return layer->test_properties()->children; 90 return layer->test_properties()->children;
179 } 91 }
180 92
181 static const LayerList& Children(Layer* layer) { 93 static const LayerList& Children(Layer* layer) {
182 return layer->children(); 94 return layer->children();
183 } 95 }
184 96
185 static LayerImpl* ChildAt(LayerImpl* layer, int index) { 97 static LayerImpl* ChildAt(LayerImpl* layer, int index) {
186 return layer->test_properties()->children[index]; 98 return layer->test_properties()->children[index];
(...skipping 20 matching lines...) Expand all
207 } 119 }
208 120
209 static Layer* ClipParent(Layer* layer) { 121 static Layer* ClipParent(Layer* layer) {
210 return layer->clip_parent(); 122 return layer->clip_parent();
211 } 123 }
212 124
213 static LayerImpl* ClipParent(LayerImpl* layer) { 125 static LayerImpl* ClipParent(LayerImpl* layer) {
214 return layer->test_properties()->clip_parent; 126 return layer->test_properties()->clip_parent;
215 } 127 }
216 128
217 static size_t NumUnclippedDescendants(Layer* layer) {
218 return layer->num_unclipped_descendants();
219 }
220
221 static size_t NumUnclippedDescendants(LayerImpl* layer) {
222 return layer->test_properties()->num_unclipped_descendants;
223 }
224
225 static inline const FilterOperations& Filters(Layer* layer) { 129 static inline const FilterOperations& Filters(Layer* layer) {
226 return layer->filters(); 130 return layer->filters();
227 } 131 }
228 132
229 static inline const FilterOperations& Filters(LayerImpl* layer) { 133 static inline const FilterOperations& Filters(LayerImpl* layer) {
230 return layer->test_properties()->filters; 134 return layer->test_properties()->filters;
231 } 135 }
232 136
233 static Layer* MaskLayer(Layer* layer) { 137 static Layer* MaskLayer(Layer* layer) {
234 return layer->mask_layer(); 138 return layer->mask_layer();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 } 237 }
334 238
335 static Layer* Parent(Layer* layer) { 239 static Layer* Parent(Layer* layer) {
336 return layer->parent(); 240 return layer->parent();
337 } 241 }
338 242
339 static LayerImpl* Parent(LayerImpl* layer) { 243 static LayerImpl* Parent(LayerImpl* layer) {
340 return layer->test_properties()->parent; 244 return layer->test_properties()->parent;
341 } 245 }
342 246
343 template <typename LayerType>
344 static void SetSurfaceIsClipped(DataForRecursion<LayerType>* data_for_children,
345 bool apply_ancestor_clip,
346 LayerType* layer) {
347 // A surface with unclipped descendants cannot be clipped by its ancestor
348 // clip at draw time since the unclipped descendants aren't affected by the
349 // ancestor clip.
350 EffectNode* effect_node = data_for_children->property_trees->effect_tree.Node(
351 data_for_children->render_target);
352 DCHECK_EQ(effect_node->owning_layer_id, layer->id());
353 effect_node->surface_is_clipped =
354 apply_ancestor_clip && !NumUnclippedDescendants(layer);
355 // The ancestor clip should propagate to children only if the surface doesn't
356 // apply the clip.
357 data_for_children->apply_ancestor_clip =
358 apply_ancestor_clip && !effect_node->surface_is_clipped;
359 }
360
361 static inline int SortingContextId(Layer* layer) { 247 static inline int SortingContextId(Layer* layer) {
362 return layer->sorting_context_id(); 248 return layer->sorting_context_id();
363 } 249 }
364 250
365 static inline int SortingContextId(LayerImpl* layer) { 251 static inline int SortingContextId(LayerImpl* layer) {
366 return layer->test_properties()->sorting_context_id; 252 return layer->test_properties()->sorting_context_id;
367 } 253 }
368 254
369 static inline bool Is3dSorted(Layer* layer) { 255 static inline bool Is3dSorted(Layer* layer) {
370 return layer->Is3dSorted(); 256 return layer->Is3dSorted();
371 } 257 }
372 258
373 static inline bool Is3dSorted(LayerImpl* layer) { 259 static inline bool Is3dSorted(LayerImpl* layer) {
374 return layer->test_properties()->sorting_context_id != 0; 260 return layer->test_properties()->sorting_context_id != 0;
375 } 261 }
376 262
377 template <typename LayerType> 263 template <typename LayerType>
378 void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor, 264 void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor,
379 LayerType* layer, 265 LayerType* layer,
380 bool created_render_surface, 266 bool created_render_surface,
381 bool created_transform_node, 267 bool created_transform_node,
382 DataForRecursion<LayerType>* data_for_children) { 268 DataForRecursion<LayerType>* data_for_children) {
383 const bool inherits_clip = !ClipParent(layer); 269 const bool inherits_clip = !ClipParent(layer);
384 const int parent_id = inherits_clip ? data_from_ancestor.clip_tree_parent 270 const int parent_id = inherits_clip ? data_from_ancestor.clip_tree_parent
385 : ClipParent(layer)->clip_tree_index(); 271 : ClipParent(layer)->clip_tree_index();
386 ClipNode* parent =
387 data_from_ancestor.property_trees->clip_tree.Node(parent_id);
388
389 bool apply_ancestor_clip = false;
390 if (inherits_clip) {
391 apply_ancestor_clip = data_from_ancestor.apply_ancestor_clip;
392 } else {
393 const EffectNode* parent_effect_node =
394 data_from_ancestor.property_trees->effect_tree.Node(
395 ClipParent(layer)->effect_tree_index());
396 if (parent_effect_node->clip_id == parent->id) {
397 if (parent_effect_node->surface_is_clipped) {
398 // In this case, there is no clipping layer between the clip parent and
399 // its target and the target has applied the clip.
400 apply_ancestor_clip = false;
401 } else {
402 // In this case, there is no clipping layer between the clip parent and
403 // its target and the target has not applied the clip. There are two
404 // cases when a target doesn't apply clip. First, there is no ancestor
405 // clip to apply, in this case apply_ancestor_clip should be false.
406 // Second, there is a clip to apply but there are unclipped descendants,
407 // so the target cannot apply the clip. In this case,
408 // apply_ancestor_clip should be true.
409 apply_ancestor_clip = parent_effect_node->has_unclipped_descendants;
410 }
411 } else {
412 // In this case, there is a clipping layer between the clip parent and
413 // its target.
414 apply_ancestor_clip = true;
415 }
416 }
417 if (created_render_surface)
418 SetSurfaceIsClipped(data_for_children, apply_ancestor_clip, layer);
419 272
420 bool layer_clips_subtree = LayerClipsSubtree(layer); 273 bool layer_clips_subtree = LayerClipsSubtree(layer);
421 if (layer_clips_subtree) {
422 data_for_children->apply_ancestor_clip = true;
423 }
424
425 bool requires_node = 274 bool requires_node =
426 layer_clips_subtree || Filters(layer).HasFilterThatMovesPixels(); 275 layer_clips_subtree || Filters(layer).HasFilterThatMovesPixels();
427 if (!requires_node) { 276 if (!requires_node) {
428 data_for_children->clip_tree_parent = parent_id; 277 data_for_children->clip_tree_parent = parent_id;
429 } else { 278 } else {
430 LayerType* transform_parent = data_for_children->transform_tree_parent; 279 LayerType* transform_parent = data_for_children->transform_tree_parent;
431 if (PositionConstraint(layer).is_fixed_position() && 280 if (PositionConstraint(layer).is_fixed_position() &&
432 !created_transform_node) { 281 !created_transform_node) {
433 transform_parent = data_for_children->transform_fixed_parent; 282 transform_parent = data_for_children->transform_fixed_parent;
434 } 283 }
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 } 650 }
802 651
803 static inline bool IsRootForIsolatedGroup(LayerImpl* layer) { 652 static inline bool IsRootForIsolatedGroup(LayerImpl* layer) {
804 return false; 653 return false;
805 } 654 }
806 655
807 static inline int NumDescendantsThatDrawContent(Layer* layer) { 656 static inline int NumDescendantsThatDrawContent(Layer* layer) {
808 return layer->NumDescendantsThatDrawContent(); 657 return layer->NumDescendantsThatDrawContent();
809 } 658 }
810 659
660 static inline int NumLayerOrDescendantsThatDrawContentRecursive(
661 LayerImpl* layer) {
662 int num = layer->DrawsContent() ? 1 : 0;
663 for (size_t i = 0; i < layer->test_properties()->children.size(); ++i) {
664 LayerImpl* child_layer = layer->test_properties()->children[i];
665 num += NumLayerOrDescendantsThatDrawContentRecursive(child_layer);
666 }
667 return num;
668 }
669
811 static inline int NumDescendantsThatDrawContent(LayerImpl* layer) { 670 static inline int NumDescendantsThatDrawContent(LayerImpl* layer) {
812 return layer->test_properties()->num_descendants_that_draw_content; 671 int num_descendants_that_draw_content = 0;
672 for (size_t i = 0; i < layer->test_properties()->children.size(); ++i) {
673 LayerImpl* child_layer = layer->test_properties()->children[i];
674 num_descendants_that_draw_content +=
675 NumLayerOrDescendantsThatDrawContentRecursive(child_layer);
676 }
677 return num_descendants_that_draw_content;
813 } 678 }
814 679
815 static inline float EffectiveOpacity(Layer* layer) { 680 static inline float EffectiveOpacity(Layer* layer) {
816 return layer->EffectiveOpacity(); 681 return layer->EffectiveOpacity();
817 } 682 }
818 683
819 static inline float EffectiveOpacity(LayerImpl* layer) { 684 static inline float EffectiveOpacity(LayerImpl* layer) {
820 return layer->test_properties()->hide_layer_and_subtree 685 return layer->test_properties()->hide_layer_and_subtree
821 ? 0.f 686 ? 0.f
822 : layer->test_properties()->opacity; 687 : layer->test_properties()->opacity;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 if (!is_root) { 932 if (!is_root) {
1068 // The effect node's transform id is used only when we create a render 933 // The effect node's transform id is used only when we create a render
1069 // surface. So, we can leave the default value when we don't create a render 934 // surface. So, we can leave the default value when we don't create a render
1070 // surface. 935 // surface.
1071 if (should_create_render_surface) { 936 if (should_create_render_surface) {
1072 // In this case, we will create a transform node, so it's safe to use the 937 // In this case, we will create a transform node, so it's safe to use the
1073 // next available id from the transform tree as this effect node's 938 // next available id from the transform tree as this effect node's
1074 // transform id. 939 // transform id.
1075 node.transform_id = 940 node.transform_id =
1076 data_from_ancestor.property_trees->transform_tree.next_available_id(); 941 data_from_ancestor.property_trees->transform_tree.next_available_id();
1077 node.has_unclipped_descendants = (NumUnclippedDescendants(layer) != 0);
1078 } 942 }
1079 node.clip_id = data_from_ancestor.clip_tree_parent; 943 node.clip_id = data_from_ancestor.clip_tree_parent;
1080 } else { 944 } else {
1081 // Root render surface acts the unbounded and untransformed to draw content 945 // Root render surface acts the unbounded and untransformed to draw content
1082 // into. Transform node created from root layer (includes device scale 946 // into. Transform node created from root layer (includes device scale
1083 // factor) and clip node created from root layer (include viewports) applies 947 // factor) and clip node created from root layer (include viewports) applies
1084 // to root render surface's content, but not root render surface itself. 948 // to root render surface's content, but not root render surface itself.
1085 node.transform_id = TransformTree::kRootNodeId; 949 node.transform_id = TransformTree::kRootNodeId;
1086 node.clip_id = ClipTree::kViewportNodeId; 950 node.clip_id = ClipTree::kViewportNodeId;
1087 } 951 }
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 if (effect_node->owning_layer_id == layer->id()) { 1203 if (effect_node->owning_layer_id == layer->id()) {
1340 if (effect_node->has_copy_request) 1204 if (effect_node->has_copy_request)
1341 data_to_parent->num_copy_requests_in_subtree++; 1205 data_to_parent->num_copy_requests_in_subtree++;
1342 effect_node->num_copy_requests_in_subtree = 1206 effect_node->num_copy_requests_in_subtree =
1343 data_to_parent->num_copy_requests_in_subtree; 1207 data_to_parent->num_copy_requests_in_subtree;
1344 } 1208 }
1345 } 1209 }
1346 1210
1347 } // namespace 1211 } // namespace
1348 1212
1349 void CC_EXPORT
1350 PropertyTreeBuilder::PreCalculateMetaInformation(Layer* root_layer) {
1351 PreCalculateMetaInformationRecursiveData recursive_data;
1352 PreCalculateMetaInformationInternal(root_layer, &recursive_data);
1353 }
1354
1355 void CC_EXPORT PropertyTreeBuilder::PreCalculateMetaInformationForTesting(
1356 LayerImpl* root_layer) {
1357 PreCalculateMetaInformationRecursiveData recursive_data;
1358 PreCalculateMetaInformationInternalForTesting(root_layer, &recursive_data);
1359 }
1360
1361 Layer* PropertyTreeBuilder::FindFirstScrollableLayer(Layer* layer) { 1213 Layer* PropertyTreeBuilder::FindFirstScrollableLayer(Layer* layer) {
1362 if (!layer) 1214 if (!layer)
1363 return nullptr; 1215 return nullptr;
1364 1216
1365 if (layer->scrollable()) 1217 if (layer->scrollable())
1366 return layer; 1218 return layer;
1367 1219
1368 for (size_t i = 0; i < layer->children().size(); ++i) { 1220 for (size_t i = 0; i < layer->children().size(); ++i) {
1369 Layer* found = FindFirstScrollableLayer(layer->children()[i].get()); 1221 Layer* found = FindFirstScrollableLayer(layer->children()[i].get());
1370 if (found) 1222 if (found)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; 1267 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
1416 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 1268 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
1417 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; 1269 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer;
1418 data_for_recursion.elastic_overscroll = elastic_overscroll; 1270 data_for_recursion.elastic_overscroll = elastic_overscroll;
1419 data_for_recursion.page_scale_factor = page_scale_factor; 1271 data_for_recursion.page_scale_factor = page_scale_factor;
1420 data_for_recursion.in_subtree_of_page_scale_layer = false; 1272 data_for_recursion.in_subtree_of_page_scale_layer = false;
1421 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; 1273 data_for_recursion.affected_by_inner_viewport_bounds_delta = false;
1422 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; 1274 data_for_recursion.affected_by_outer_viewport_bounds_delta = false;
1423 data_for_recursion.should_flatten = false; 1275 data_for_recursion.should_flatten = false;
1424 data_for_recursion.is_hidden = false; 1276 data_for_recursion.is_hidden = false;
1425 // The root clip is always applied.
1426 data_for_recursion.apply_ancestor_clip = true;
1427 data_for_recursion.main_thread_scrolling_reasons = 1277 data_for_recursion.main_thread_scrolling_reasons =
1428 MainThreadScrollingReason::kNotScrollingOnMain; 1278 MainThreadScrollingReason::kNotScrollingOnMain;
1429 data_for_recursion.scroll_tree_parent_created_by_uninheritable_criteria = 1279 data_for_recursion.scroll_tree_parent_created_by_uninheritable_criteria =
1430 true; 1280 true;
1431 data_for_recursion.device_transform = &device_transform; 1281 data_for_recursion.device_transform = &device_transform;
1432 1282
1433 data_for_recursion.property_trees->clear(); 1283 data_for_recursion.property_trees->clear();
1434 data_for_recursion.compound_transform_since_render_target = gfx::Transform(); 1284 data_for_recursion.compound_transform_since_render_target = gfx::Transform();
1435 data_for_recursion.axis_align_since_render_target = true; 1285 data_for_recursion.axis_align_since_render_target = true;
1436 data_for_recursion.property_trees->transform_tree.set_device_scale_factor( 1286 data_for_recursion.property_trees->transform_tree.set_device_scale_factor(
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1532 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1382 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1533 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1383 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1534 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1384 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1535 device_transform, property_trees, color); 1385 device_transform, property_trees, color);
1536 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1386 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1537 &render_surfaces, root_layer->layer_tree_impl()); 1387 &render_surfaces, root_layer->layer_tree_impl());
1538 property_trees->ResetCachedData(); 1388 property_trees->ResetCachedData();
1539 } 1389 }
1540 1390
1541 } // namespace cc 1391 } // namespace cc
OLDNEW
« cc/trees/draw_property_utils.cc ('K') | « cc/trees/property_tree_builder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698