Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 bool target_is_clipped; | 52 bool target_is_clipped; |
| 53 bool is_hidden; | 53 bool is_hidden; |
| 54 uint32_t main_thread_scrolling_reasons; | 54 uint32_t main_thread_scrolling_reasons; |
| 55 bool scroll_tree_parent_created_by_uninheritable_criteria; | 55 bool scroll_tree_parent_created_by_uninheritable_criteria; |
| 56 const gfx::Transform* device_transform; | 56 const gfx::Transform* device_transform; |
| 57 gfx::Vector2dF scroll_snap; | 57 gfx::Vector2dF scroll_snap; |
| 58 gfx::Transform compound_transform_since_render_target; | 58 gfx::Transform compound_transform_since_render_target; |
| 59 bool axis_align_since_render_target; | 59 bool axis_align_since_render_target; |
| 60 int sequence_number; | 60 int sequence_number; |
| 61 SkColor safe_opaque_background_color; | 61 SkColor safe_opaque_background_color; |
| 62 std::unordered_map<int, int>* transform_node_owner_to_node_map; | |
| 63 std::unordered_map<int, int>* effect_node_owner_to_node_map; | |
| 64 std::unordered_map<int, int>* clip_node_owner_to_node_map; | |
| 65 std::unordered_map<int, int>* scroll_node_owner_to_node_map; | |
|
ajuma
2016/05/13 14:38:53
DataForRecursion is starting to get pretty large.
jaydasika
2016/05/13 19:40:39
Acknowledged.
| |
| 62 }; | 66 }; |
| 63 | 67 |
| 64 template <typename LayerType> | 68 template <typename LayerType> |
| 65 struct DataForRecursionFromChild { | 69 struct DataForRecursionFromChild { |
| 66 int num_copy_requests_in_subtree; | 70 int num_copy_requests_in_subtree; |
| 67 | 71 |
| 68 DataForRecursionFromChild() : num_copy_requests_in_subtree(0) {} | 72 DataForRecursionFromChild() : num_copy_requests_in_subtree(0) {} |
| 69 | 73 |
| 70 void Merge(const DataForRecursionFromChild& data) { | 74 void Merge(const DataForRecursionFromChild& data) { |
| 71 num_copy_requests_in_subtree += data.num_copy_requests_in_subtree; | 75 num_copy_requests_in_subtree += data.num_copy_requests_in_subtree; |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 | 350 |
| 347 node.data.applies_local_clip = layer_clips_subtree; | 351 node.data.applies_local_clip = layer_clips_subtree; |
| 348 node.data.resets_clip = has_unclipped_surface; | 352 node.data.resets_clip = has_unclipped_surface; |
| 349 node.data.target_is_clipped = data_for_children->target_is_clipped; | 353 node.data.target_is_clipped = data_for_children->target_is_clipped; |
| 350 node.data.layers_are_clipped = layers_are_clipped; | 354 node.data.layers_are_clipped = layers_are_clipped; |
| 351 node.data.layers_are_clipped_when_surfaces_disabled = | 355 node.data.layers_are_clipped_when_surfaces_disabled = |
| 352 layers_are_clipped_when_surfaces_disabled; | 356 layers_are_clipped_when_surfaces_disabled; |
| 353 | 357 |
| 354 data_for_children->clip_tree_parent = | 358 data_for_children->clip_tree_parent = |
| 355 data_for_children->clip_tree->Insert(node, parent_id); | 359 data_for_children->clip_tree->Insert(node, parent_id); |
| 360 (*data_for_children->clip_node_owner_to_node_map)[layer->id()] = node.id; | |
| 356 } | 361 } |
| 357 | 362 |
| 358 layer->SetClipTreeIndex(data_for_children->clip_tree_parent); | 363 layer->SetClipTreeIndex(data_for_children->clip_tree_parent); |
| 359 // TODO(awoloszyn): Right now when we hit a node with a replica, we reset the | 364 // TODO(awoloszyn): Right now when we hit a node with a replica, we reset the |
| 360 // clip for all children since we may need to draw. We need to figure out a | 365 // clip for all children since we may need to draw. We need to figure out a |
| 361 // better way, since we will need both the clipped and unclipped versions. | 366 // better way, since we will need both the clipped and unclipped versions. |
| 362 } | 367 } |
| 363 | 368 |
| 364 template <typename LayerType> | 369 template <typename LayerType> |
| 365 static inline bool IsAtBoundaryOf3dRenderingContext(LayerType* layer) { | 370 static inline bool IsAtBoundaryOf3dRenderingContext(LayerType* layer) { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 500 layer->SetTransformTreeIndex(parent_index); | 505 layer->SetTransformTreeIndex(parent_index); |
| 501 if (layer->mask_layer()) | 506 if (layer->mask_layer()) |
| 502 layer->mask_layer()->SetTransformTreeIndex(parent_index); | 507 layer->mask_layer()->SetTransformTreeIndex(parent_index); |
| 503 return false; | 508 return false; |
| 504 } | 509 } |
| 505 | 510 |
| 506 data_for_children->transform_tree->Insert(TransformNode(), parent_index); | 511 data_for_children->transform_tree->Insert(TransformNode(), parent_index); |
| 507 | 512 |
| 508 TransformNode* node = data_for_children->transform_tree->back(); | 513 TransformNode* node = data_for_children->transform_tree->back(); |
| 509 layer->SetTransformTreeIndex(node->id); | 514 layer->SetTransformTreeIndex(node->id); |
| 515 (*data_for_children->transform_node_owner_to_node_map)[layer->id()] = | |
| 516 node->id; | |
| 510 if (layer->mask_layer()) | 517 if (layer->mask_layer()) |
| 511 layer->mask_layer()->SetTransformTreeIndex(node->id); | 518 layer->mask_layer()->SetTransformTreeIndex(node->id); |
| 512 | 519 |
| 513 node->data.scrolls = is_scrollable; | 520 node->data.scrolls = is_scrollable; |
| 514 node->data.flattens_inherited_transform = data_for_children->should_flatten; | 521 node->data.flattens_inherited_transform = data_for_children->should_flatten; |
| 515 | 522 |
| 516 node->data.sorting_context_id = layer->sorting_context_id(); | 523 node->data.sorting_context_id = layer->sorting_context_id(); |
| 517 | 524 |
| 518 if (layer == data_from_ancestor.page_scale_layer) | 525 if (layer == data_from_ancestor.page_scale_layer) |
| 519 data_for_children->in_subtree_of_page_scale_layer = true; | 526 data_for_children->in_subtree_of_page_scale_layer = true; |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 854 // Root render surface acts the unbounded and untransformed to draw content | 861 // Root render surface acts the unbounded and untransformed to draw content |
| 855 // into. Transform node created from root layer (includes device scale | 862 // into. Transform node created from root layer (includes device scale |
| 856 // factor) and clip node created from root layer (include viewports) applies | 863 // factor) and clip node created from root layer (include viewports) applies |
| 857 // to root render surface's content, but not root render surface itself. | 864 // to root render surface's content, but not root render surface itself. |
| 858 node.data.transform_id = kRootPropertyTreeNodeId; | 865 node.data.transform_id = kRootPropertyTreeNodeId; |
| 859 node.data.clip_id = kRootPropertyTreeNodeId; | 866 node.data.clip_id = kRootPropertyTreeNodeId; |
| 860 } | 867 } |
| 861 data_for_children->effect_tree_parent = | 868 data_for_children->effect_tree_parent = |
| 862 data_for_children->effect_tree->Insert(node, parent_id); | 869 data_for_children->effect_tree->Insert(node, parent_id); |
| 863 layer->SetEffectTreeIndex(data_for_children->effect_tree_parent); | 870 layer->SetEffectTreeIndex(data_for_children->effect_tree_parent); |
| 871 (*data_for_children->effect_node_owner_to_node_map)[layer->id()] = node.id; | |
| 864 if (should_create_render_surface) { | 872 if (should_create_render_surface) { |
| 865 data_for_children->compound_transform_since_render_target = | 873 data_for_children->compound_transform_since_render_target = |
| 866 gfx::Transform(); | 874 gfx::Transform(); |
| 867 data_for_children->axis_align_since_render_target = true; | 875 data_for_children->axis_align_since_render_target = true; |
| 868 } | 876 } |
| 869 return should_create_render_surface; | 877 return should_create_render_surface; |
| 870 } | 878 } |
| 871 | 879 |
| 872 template <typename LayerType> | 880 template <typename LayerType> |
| 873 void AddScrollNodeIfNeeded( | 881 void AddScrollNodeIfNeeded( |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 932 node.data.element_id = layer->element_id(); | 940 node.data.element_id = layer->element_id(); |
| 933 node.data.transform_id = | 941 node.data.transform_id = |
| 934 data_for_children->transform_tree_parent->transform_tree_index(); | 942 data_for_children->transform_tree_parent->transform_tree_index(); |
| 935 | 943 |
| 936 data_for_children->scroll_tree_parent = | 944 data_for_children->scroll_tree_parent = |
| 937 data_for_children->scroll_tree->Insert(node, parent_id); | 945 data_for_children->scroll_tree->Insert(node, parent_id); |
| 938 data_for_children->main_thread_scrolling_reasons = | 946 data_for_children->main_thread_scrolling_reasons = |
| 939 node.data.main_thread_scrolling_reasons; | 947 node.data.main_thread_scrolling_reasons; |
| 940 data_for_children->scroll_tree_parent_created_by_uninheritable_criteria = | 948 data_for_children->scroll_tree_parent_created_by_uninheritable_criteria = |
| 941 scroll_node_uninheritable_criteria; | 949 scroll_node_uninheritable_criteria; |
| 950 (*data_for_children->scroll_node_owner_to_node_map)[layer->id()] = node.id; | |
| 942 | 951 |
| 943 if (node.data.scrollable) { | 952 if (node.data.scrollable) { |
| 944 data_for_children->scroll_tree->SetBaseScrollOffset( | 953 data_for_children->scroll_tree->SetBaseScrollOffset( |
| 945 layer->id(), layer->CurrentScrollOffset()); | 954 layer->id(), layer->CurrentScrollOffset()); |
| 946 } | 955 } |
| 947 } | 956 } |
| 948 | 957 |
| 949 layer->SetScrollTreeIndex(data_for_children->scroll_tree_parent); | 958 layer->SetScrollTreeIndex(data_for_children->scroll_tree_parent); |
| 950 } | 959 } |
| 951 | 960 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1166 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; | 1175 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; |
| 1167 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; | 1176 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; |
| 1168 data_for_recursion.should_flatten = false; | 1177 data_for_recursion.should_flatten = false; |
| 1169 data_for_recursion.target_is_clipped = false; | 1178 data_for_recursion.target_is_clipped = false; |
| 1170 data_for_recursion.is_hidden = false; | 1179 data_for_recursion.is_hidden = false; |
| 1171 data_for_recursion.main_thread_scrolling_reasons = | 1180 data_for_recursion.main_thread_scrolling_reasons = |
| 1172 MainThreadScrollingReason::kNotScrollingOnMain; | 1181 MainThreadScrollingReason::kNotScrollingOnMain; |
| 1173 data_for_recursion.scroll_tree_parent_created_by_uninheritable_criteria = | 1182 data_for_recursion.scroll_tree_parent_created_by_uninheritable_criteria = |
| 1174 true; | 1183 true; |
| 1175 data_for_recursion.device_transform = &device_transform; | 1184 data_for_recursion.device_transform = &device_transform; |
| 1185 data_for_recursion.transform_node_owner_to_node_map = | |
| 1186 &property_trees->transform_node_owner_to_node_map; | |
| 1187 data_for_recursion.effect_node_owner_to_node_map = | |
| 1188 &property_trees->effect_node_owner_to_node_map; | |
| 1189 data_for_recursion.clip_node_owner_to_node_map = | |
| 1190 &property_trees->clip_node_owner_to_node_map; | |
| 1191 data_for_recursion.scroll_node_owner_to_node_map = | |
| 1192 &property_trees->scroll_node_owner_to_node_map; | |
| 1176 | 1193 |
| 1177 data_for_recursion.transform_tree->clear(); | 1194 data_for_recursion.transform_tree->clear(); |
| 1178 data_for_recursion.clip_tree->clear(); | 1195 data_for_recursion.clip_tree->clear(); |
| 1179 data_for_recursion.effect_tree->clear(); | 1196 data_for_recursion.effect_tree->clear(); |
| 1180 data_for_recursion.scroll_tree->clear(); | 1197 data_for_recursion.scroll_tree->clear(); |
| 1181 data_for_recursion.compound_transform_since_render_target = gfx::Transform(); | 1198 data_for_recursion.compound_transform_since_render_target = gfx::Transform(); |
| 1182 data_for_recursion.axis_align_since_render_target = true; | 1199 data_for_recursion.axis_align_since_render_target = true; |
| 1183 data_for_recursion.sequence_number = property_trees->sequence_number; | 1200 data_for_recursion.sequence_number = property_trees->sequence_number; |
| 1184 data_for_recursion.transform_tree->set_device_scale_factor( | 1201 data_for_recursion.transform_tree->set_device_scale_factor( |
| 1185 device_scale_factor); | 1202 device_scale_factor); |
| 1186 data_for_recursion.safe_opaque_background_color = color; | 1203 data_for_recursion.safe_opaque_background_color = color; |
| 1204 data_for_recursion.transform_node_owner_to_node_map->clear(); | |
| 1205 data_for_recursion.effect_node_owner_to_node_map->clear(); | |
| 1206 data_for_recursion.clip_node_owner_to_node_map->clear(); | |
| 1207 data_for_recursion.scroll_node_owner_to_node_map->clear(); | |
| 1187 | 1208 |
| 1188 ClipNode root_clip; | 1209 ClipNode root_clip; |
| 1189 root_clip.data.resets_clip = true; | 1210 root_clip.data.resets_clip = true; |
| 1190 root_clip.data.applies_local_clip = true; | 1211 root_clip.data.applies_local_clip = true; |
| 1191 root_clip.data.clip = gfx::RectF(viewport); | 1212 root_clip.data.clip = gfx::RectF(viewport); |
| 1192 root_clip.data.transform_id = kRootPropertyTreeNodeId; | 1213 root_clip.data.transform_id = kRootPropertyTreeNodeId; |
| 1193 data_for_recursion.clip_tree_parent = | 1214 data_for_recursion.clip_tree_parent = |
| 1194 data_for_recursion.clip_tree->Insert(root_clip, kRootPropertyTreeNodeId); | 1215 data_for_recursion.clip_tree->Insert(root_clip, kRootPropertyTreeNodeId); |
| 1195 | 1216 |
| 1196 DataForRecursionFromChild<LayerType> data_from_child; | 1217 DataForRecursionFromChild<LayerType> data_from_child; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1273 if (SkColorGetA(color) != 255) | 1294 if (SkColorGetA(color) != 255) |
| 1274 color = SkColorSetA(color, 255); | 1295 color = SkColorSetA(color, 255); |
| 1275 BuildPropertyTreesTopLevelInternal( | 1296 BuildPropertyTreesTopLevelInternal( |
| 1276 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1297 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1277 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1298 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1278 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1299 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1279 device_transform, property_trees, color); | 1300 device_transform, property_trees, color); |
| 1280 } | 1301 } |
| 1281 | 1302 |
| 1282 } // namespace cc | 1303 } // namespace cc |
| OLD | NEW |