OLD | NEW |
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_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 #include "base/containers/adapters.h" | 11 #include "base/containers/adapters.h" |
12 #include "base/trace_event/trace_event.h" | 12 #include "base/trace_event/trace_event.h" |
13 #include "cc/base/math_util.h" | 13 #include "cc/base/math_util.h" |
14 #include "cc/layers/heads_up_display_layer_impl.h" | 14 #include "cc/layers/heads_up_display_layer_impl.h" |
15 #include "cc/layers/layer.h" | 15 #include "cc/layers/layer.h" |
16 #include "cc/layers/layer_impl.h" | 16 #include "cc/layers/layer_impl.h" |
17 #include "cc/layers/layer_iterator.h" | 17 #include "cc/layers/layer_iterator.h" |
18 #include "cc/proto/begin_main_frame_and_commit_state.pb.h" | 18 #include "cc/proto/begin_main_frame_and_commit_state.pb.h" |
19 #include "cc/proto/gfx_conversions.h" | 19 #include "cc/proto/gfx_conversions.h" |
20 #include "cc/trees/draw_property_utils.h" | 20 #include "cc/trees/draw_property_utils.h" |
| 21 #include "cc/trees/effect_node.h" |
21 #include "cc/trees/layer_tree_host.h" | 22 #include "cc/trees/layer_tree_host.h" |
22 #include "cc/trees/layer_tree_impl.h" | 23 #include "cc/trees/layer_tree_impl.h" |
23 #include "cc/trees/property_tree_builder.h" | 24 #include "cc/trees/property_tree_builder.h" |
| 25 #include "cc/trees/scroll_node.h" |
24 #include "ui/gfx/geometry/rect_conversions.h" | 26 #include "ui/gfx/geometry/rect_conversions.h" |
25 #include "ui/gfx/geometry/vector2d_conversions.h" | 27 #include "ui/gfx/geometry/vector2d_conversions.h" |
26 #include "ui/gfx/transform.h" | 28 #include "ui/gfx/transform.h" |
27 #include "ui/gfx/transform_util.h" | 29 #include "ui/gfx/transform_util.h" |
28 | 30 |
29 namespace cc { | 31 namespace cc { |
30 | 32 |
31 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting:: | 33 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting:: |
32 CalcDrawPropsMainInputsForTesting(Layer* root_layer, | 34 CalcDrawPropsMainInputsForTesting(Layer* root_layer, |
33 const gfx::Size& device_viewport_size, | 35 const gfx::Size& device_viewport_size, |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 mask_layer->set_is_drawn_render_surface_layer_list_member(false); | 214 mask_layer->set_is_drawn_render_surface_layer_list_member(false); |
213 if (replica_mask_layer) | 215 if (replica_mask_layer) |
214 replica_mask_layer->set_is_drawn_render_surface_layer_list_member(false); | 216 replica_mask_layer->set_is_drawn_render_surface_layer_list_member(false); |
215 } | 217 } |
216 | 218 |
217 static inline void ClearIsDrawnRenderSurfaceLayerListMember( | 219 static inline void ClearIsDrawnRenderSurfaceLayerListMember( |
218 LayerImplList* layer_list, | 220 LayerImplList* layer_list, |
219 ScrollTree* scroll_tree) { | 221 ScrollTree* scroll_tree) { |
220 for (LayerImpl* layer : *layer_list) { | 222 for (LayerImpl* layer : *layer_list) { |
221 if (layer->is_drawn_render_surface_layer_list_member()) { | 223 if (layer->is_drawn_render_surface_layer_list_member()) { |
222 DCHECK_GT(scroll_tree->Node(layer->scroll_tree_index()) | 224 DCHECK_GT( |
223 ->data.num_drawn_descendants, | 225 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants, |
224 0); | 226 0); |
225 scroll_tree->Node(layer->scroll_tree_index()) | 227 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants--; |
226 ->data.num_drawn_descendants--; | |
227 } | 228 } |
228 layer->set_is_drawn_render_surface_layer_list_member(false); | 229 layer->set_is_drawn_render_surface_layer_list_member(false); |
229 } | 230 } |
230 } | 231 } |
231 | 232 |
232 static bool CdpPerfTracingEnabled() { | 233 static bool CdpPerfTracingEnabled() { |
233 bool tracing_enabled; | 234 bool tracing_enabled; |
234 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); | 235 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); |
235 return tracing_enabled; | 236 return tracing_enabled; |
236 } | 237 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 | 297 |
297 enum PropertyTreeOption { | 298 enum PropertyTreeOption { |
298 BUILD_PROPERTY_TREES_IF_NEEDED, | 299 BUILD_PROPERTY_TREES_IF_NEEDED, |
299 DONT_BUILD_PROPERTY_TREES | 300 DONT_BUILD_PROPERTY_TREES |
300 }; | 301 }; |
301 | 302 |
302 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl, | 303 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl, |
303 ScrollTree* scroll_tree) { | 304 ScrollTree* scroll_tree) { |
304 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) { | 305 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) { |
305 ScrollNode* node = scroll_tree->Node(i); | 306 ScrollNode* node = scroll_tree->Node(i); |
306 scroll_tree->parent(node)->data.num_drawn_descendants += | 307 scroll_tree->parent(node)->num_drawn_descendants += |
307 node->data.num_drawn_descendants; | 308 node->num_drawn_descendants; |
308 } | 309 } |
309 for (LayerImpl* layer : *layer_tree_impl) { | 310 for (LayerImpl* layer : *layer_tree_impl) { |
310 bool scrolls_drawn_descendant = false; | 311 bool scrolls_drawn_descendant = false; |
311 if (layer->scrollable()) { | 312 if (layer->scrollable()) { |
312 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index()); | 313 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index()); |
313 if (node->data.num_drawn_descendants > 0) | 314 if (node->num_drawn_descendants > 0) |
314 scrolls_drawn_descendant = true; | 315 scrolls_drawn_descendant = true; |
315 } | 316 } |
316 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant); | 317 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant); |
317 } | 318 } |
318 } | 319 } |
319 | 320 |
320 static void ComputeInitialRenderSurfaceLayerList( | 321 static void ComputeInitialRenderSurfaceLayerList( |
321 LayerTreeImpl* layer_tree_impl, | 322 LayerTreeImpl* layer_tree_impl, |
322 PropertyTrees* property_trees, | 323 PropertyTrees* property_trees, |
323 LayerImplList* render_surface_layer_list, | 324 LayerImplList* render_surface_layer_list, |
324 bool can_render_to_separate_surface) { | 325 bool can_render_to_separate_surface) { |
325 ScrollTree* scroll_tree = &property_trees->scroll_tree; | 326 ScrollTree* scroll_tree = &property_trees->scroll_tree; |
326 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i) | 327 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i) |
327 scroll_tree->Node(i)->data.num_drawn_descendants = 0; | 328 scroll_tree->Node(i)->num_drawn_descendants = 0; |
328 | 329 |
329 // Add all non-skipped surfaces to the initial render surface layer list. Add | 330 // Add all non-skipped surfaces to the initial render surface layer list. Add |
330 // all non-skipped layers to the layer list of their target surface, and | 331 // all non-skipped layers to the layer list of their target surface, and |
331 // add their content rect to their target surface's accumulated content rect. | 332 // add their content rect to their target surface's accumulated content rect. |
332 for (LayerImpl* layer : *layer_tree_impl) { | 333 for (LayerImpl* layer : *layer_tree_impl) { |
333 if (layer->render_surface()) { | 334 if (layer->render_surface()) { |
334 layer->ClearRenderSurfaceLayerList(); | 335 layer->ClearRenderSurfaceLayerList(); |
335 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( | 336 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( |
336 layer->render_surface()); | 337 layer->render_surface()); |
337 } | 338 } |
338 layer->set_is_drawn_render_surface_layer_list_member(false); | 339 layer->set_is_drawn_render_surface_layer_list_member(false); |
339 | 340 |
340 bool layer_is_drawn = | 341 bool layer_is_drawn = |
341 property_trees->effect_tree.Node(layer->effect_tree_index()) | 342 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; |
342 ->data.is_drawn; | |
343 bool is_root = layer_tree_impl->IsRootLayer(layer); | 343 bool is_root = layer_tree_impl->IsRootLayer(layer); |
344 bool skip_layer = | 344 bool skip_layer = |
345 !is_root && draw_property_utils::LayerShouldBeSkipped( | 345 !is_root && draw_property_utils::LayerShouldBeSkipped( |
346 layer, layer_is_drawn, property_trees->transform_tree, | 346 layer, layer_is_drawn, property_trees->transform_tree, |
347 property_trees->effect_tree); | 347 property_trees->effect_tree); |
348 if (skip_layer) | 348 if (skip_layer) |
349 continue; | 349 continue; |
350 | 350 |
351 bool render_to_separate_surface = | 351 bool render_to_separate_surface = |
352 is_root || (can_render_to_separate_surface && layer->render_surface()); | 352 is_root || (can_render_to_separate_surface && layer->render_surface()); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 surface->SetNearestOcclusionImmuneAncestor( | 392 surface->SetNearestOcclusionImmuneAncestor( |
393 surface->render_target()->nearest_occlusion_immune_ancestor()); | 393 surface->render_target()->nearest_occlusion_immune_ancestor()); |
394 } | 394 } |
395 } | 395 } |
396 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( | 396 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( |
397 layer, layer_is_drawn, property_trees->transform_tree); | 397 layer, layer_is_drawn, property_trees->transform_tree); |
398 if (!layer_should_be_drawn) | 398 if (!layer_should_be_drawn) |
399 continue; | 399 continue; |
400 | 400 |
401 layer->set_is_drawn_render_surface_layer_list_member(true); | 401 layer->set_is_drawn_render_surface_layer_list_member(true); |
402 scroll_tree->Node(layer->scroll_tree_index())->data.num_drawn_descendants++; | 402 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants++; |
403 layer->render_target()->layer_list().push_back(layer); | 403 layer->render_target()->layer_list().push_back(layer); |
404 | 404 |
405 // The layer contributes its drawable content rect to its render target. | 405 // The layer contributes its drawable content rect to its render target. |
406 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); | 406 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); |
407 } | 407 } |
408 } | 408 } |
409 | 409 |
410 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, | 410 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, |
411 PropertyTrees* property_trees, | 411 PropertyTrees* property_trees, |
412 LayerImplList* render_surface_layer_list, | 412 LayerImplList* render_surface_layer_list, |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 689 |
690 PropertyTrees* GetPropertyTrees(Layer* layer) { | 690 PropertyTrees* GetPropertyTrees(Layer* layer) { |
691 return layer->layer_tree_host()->property_trees(); | 691 return layer->layer_tree_host()->property_trees(); |
692 } | 692 } |
693 | 693 |
694 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { | 694 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { |
695 return layer->layer_tree_impl()->property_trees(); | 695 return layer->layer_tree_impl()->property_trees(); |
696 } | 696 } |
697 | 697 |
698 } // namespace cc | 698 } // namespace cc |
OLD | NEW |