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

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

Issue 2495123002: Make all scrollable layers visible to hit testing. (Closed)
Patch Set: Created 4 years, 1 month 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_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
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( 258 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(
259 RenderSurfaceImpl* surface) { 259 RenderSurfaceImpl* surface) {
260 LayerImpl* mask_layer = surface->MaskLayer(); 260 LayerImpl* mask_layer = surface->MaskLayer();
261 if (mask_layer) 261 if (mask_layer)
262 mask_layer->set_is_drawn_render_surface_layer_list_member(false); 262 mask_layer->set_is_drawn_render_surface_layer_list_member(false);
263 } 263 }
264 264
265 static inline void ClearIsDrawnRenderSurfaceLayerListMember( 265 static inline void ClearIsDrawnRenderSurfaceLayerListMember(
266 LayerImplList* layer_list, 266 LayerImplList* layer_list,
267 ScrollTree* scroll_tree) { 267 ScrollTree* scroll_tree) {
268 for (LayerImpl* layer : *layer_list) { 268 for (LayerImpl* layer : *layer_list)
269 if (layer->is_drawn_render_surface_layer_list_member()) {
270 DCHECK_GT(
271 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants,
272 0);
273 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants--;
274 }
275 layer->set_is_drawn_render_surface_layer_list_member(false); 269 layer->set_is_drawn_render_surface_layer_list_member(false);
276 }
277 } 270 }
278 271
279 static bool CdpPerfTracingEnabled() { 272 static bool CdpPerfTracingEnabled() {
280 bool tracing_enabled; 273 bool tracing_enabled;
281 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); 274 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled);
282 return tracing_enabled; 275 return tracing_enabled;
283 } 276 }
284 277
285 static float TranslationFromActiveTreeLayerScreenSpaceTransform( 278 static float TranslationFromActiveTreeLayerScreenSpaceTransform(
286 LayerImpl* pending_tree_layer) { 279 LayerImpl* pending_tree_layer) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 332 }
340 } 333 }
341 return jitter; 334 return jitter;
342 } 335 }
343 336
344 enum PropertyTreeOption { 337 enum PropertyTreeOption {
345 BUILD_PROPERTY_TREES_IF_NEEDED, 338 BUILD_PROPERTY_TREES_IF_NEEDED,
346 DONT_BUILD_PROPERTY_TREES 339 DONT_BUILD_PROPERTY_TREES
347 }; 340 };
348 341
349 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl,
350 ScrollTree* scroll_tree) {
351 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) {
352 ScrollNode* node = scroll_tree->Node(i);
353 scroll_tree->parent(node)->num_drawn_descendants +=
354 node->num_drawn_descendants;
355 }
356 for (LayerImpl* layer : *layer_tree_impl) {
357 bool scrolls_drawn_descendant = false;
358 if (layer->scrollable()) {
359 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index());
360 if (node->num_drawn_descendants > 0)
361 scrolls_drawn_descendant = true;
362 }
363 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant);
364 }
365 }
366
367 static void ComputeInitialRenderSurfaceLayerList( 342 static void ComputeInitialRenderSurfaceLayerList(
368 LayerTreeImpl* layer_tree_impl, 343 LayerTreeImpl* layer_tree_impl,
369 PropertyTrees* property_trees, 344 PropertyTrees* property_trees,
370 LayerImplList* render_surface_layer_list, 345 LayerImplList* render_surface_layer_list,
371 bool can_render_to_separate_surface) { 346 bool can_render_to_separate_surface) {
372 ScrollTree* scroll_tree = &property_trees->scroll_tree;
373 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i)
374 scroll_tree->Node(i)->num_drawn_descendants = 0;
375
376 // Add all non-skipped surfaces to the initial render surface layer list. Add 347 // Add all non-skipped surfaces to the initial render surface layer list. Add
377 // all non-skipped layers to the layer list of their target surface, and 348 // all non-skipped layers to the layer list of their target surface, and
378 // add their content rect to their target surface's accumulated content rect. 349 // add their content rect to their target surface's accumulated content rect.
379 for (LayerImpl* layer : *layer_tree_impl) { 350 for (LayerImpl* layer : *layer_tree_impl) {
380 if (layer->render_surface()) { 351 if (layer->render_surface()) {
381 layer->ClearRenderSurfaceLayerList(); 352 layer->ClearRenderSurfaceLayerList();
382 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( 353 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(
383 layer->render_surface()); 354 layer->render_surface());
384 } 355 }
385 layer->set_is_drawn_render_surface_layer_list_member(false); 356 layer->set_is_drawn_render_surface_layer_list_member(false);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 } 408 }
438 } 409 }
439 bool layer_is_drawn = 410 bool layer_is_drawn =
440 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; 411 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn;
441 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( 412 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate(
442 layer, layer_is_drawn, property_trees); 413 layer, layer_is_drawn, property_trees);
443 if (!layer_should_be_drawn) 414 if (!layer_should_be_drawn)
444 continue; 415 continue;
445 416
446 layer->set_is_drawn_render_surface_layer_list_member(true); 417 layer->set_is_drawn_render_surface_layer_list_member(true);
447 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants++;
448 layer->render_target()->layer_list().push_back(layer); 418 layer->render_target()->layer_list().push_back(layer);
449 419
450 // The layer contributes its drawable content rect to its render target. 420 // The layer contributes its drawable content rect to its render target.
451 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); 421 layer->render_target()->AccumulateContentRectFromContributingLayer(layer);
452 } 422 }
453 } 423 }
454 424
455 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, 425 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl,
456 PropertyTrees* property_trees, 426 PropertyTrees* property_trees,
457 LayerImplList* render_surface_layer_list, 427 LayerImplList* render_surface_layer_list,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // have an empty content rect. After surface content rects are computed, 503 // have an empty content rect. After surface content rects are computed,
534 // produce a final RSLL that omits empty surfaces. 504 // produce a final RSLL that omits empty surfaces.
535 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, 505 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees,
536 &initial_render_surface_list, 506 &initial_render_surface_list,
537 can_render_to_separate_surface); 507 can_render_to_separate_surface);
538 ComputeSurfaceContentRects(layer_tree_impl, property_trees, 508 ComputeSurfaceContentRects(layer_tree_impl, property_trees,
539 &initial_render_surface_list, max_texture_size); 509 &initial_render_surface_list, max_texture_size);
540 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, 510 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees,
541 &initial_render_surface_list, 511 &initial_render_surface_list,
542 render_surface_layer_list); 512 render_surface_layer_list);
543
544 ComputeLayerScrollsDrawnDescendants(layer_tree_impl,
545 &property_trees->scroll_tree);
546 } 513 }
547 514
548 void CalculateDrawPropertiesInternal( 515 void CalculateDrawPropertiesInternal(
549 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, 516 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs,
550 PropertyTreeOption property_tree_option) { 517 PropertyTreeOption property_tree_option) {
551 inputs->render_surface_layer_list->clear(); 518 inputs->render_surface_layer_list->clear();
552 519
553 const bool should_measure_property_tree_performance = 520 const bool should_measure_property_tree_performance =
554 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; 521 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED;
555 522
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 704
738 PropertyTrees* GetPropertyTrees(Layer* layer) { 705 PropertyTrees* GetPropertyTrees(Layer* layer) {
739 return layer->GetLayerTree()->property_trees(); 706 return layer->GetLayerTree()->property_trees();
740 } 707 }
741 708
742 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { 709 PropertyTrees* GetPropertyTrees(LayerImpl* layer) {
743 return layer->layer_tree_impl()->property_trees(); 710 return layer->layer_tree_impl()->property_trees();
744 } 711 }
745 712
746 } // namespace cc 713 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698