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

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

Issue 2495123002: Make all scrollable layers visible to hit testing. (Closed)
Patch Set: rebase 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
« no previous file with comments | « cc/layers/layer_impl.cc ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( 205 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(
206 RenderSurfaceImpl* surface) { 206 RenderSurfaceImpl* surface) {
207 LayerImpl* mask_layer = surface->MaskLayer(); 207 LayerImpl* mask_layer = surface->MaskLayer();
208 if (mask_layer) 208 if (mask_layer)
209 mask_layer->set_is_drawn_render_surface_layer_list_member(false); 209 mask_layer->set_is_drawn_render_surface_layer_list_member(false);
210 } 210 }
211 211
212 static inline void ClearIsDrawnRenderSurfaceLayerListMember( 212 static inline void ClearIsDrawnRenderSurfaceLayerListMember(
213 LayerImplList* layer_list, 213 LayerImplList* layer_list,
214 ScrollTree* scroll_tree) { 214 ScrollTree* scroll_tree) {
215 for (LayerImpl* layer : *layer_list) { 215 for (LayerImpl* layer : *layer_list)
216 if (layer->is_drawn_render_surface_layer_list_member()) {
217 DCHECK_GT(
218 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants,
219 0);
220 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants--;
221 }
222 layer->set_is_drawn_render_surface_layer_list_member(false); 216 layer->set_is_drawn_render_surface_layer_list_member(false);
223 }
224 } 217 }
225 218
226 static bool CdpPerfTracingEnabled() { 219 static bool CdpPerfTracingEnabled() {
227 bool tracing_enabled; 220 bool tracing_enabled;
228 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); 221 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled);
229 return tracing_enabled; 222 return tracing_enabled;
230 } 223 }
231 224
232 static float TranslationFromActiveTreeLayerScreenSpaceTransform( 225 static float TranslationFromActiveTreeLayerScreenSpaceTransform(
233 LayerImpl* pending_tree_layer) { 226 LayerImpl* pending_tree_layer) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 279 }
287 } 280 }
288 return jitter; 281 return jitter;
289 } 282 }
290 283
291 enum PropertyTreeOption { 284 enum PropertyTreeOption {
292 BUILD_PROPERTY_TREES_IF_NEEDED, 285 BUILD_PROPERTY_TREES_IF_NEEDED,
293 DONT_BUILD_PROPERTY_TREES 286 DONT_BUILD_PROPERTY_TREES
294 }; 287 };
295 288
296 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl,
297 ScrollTree* scroll_tree) {
298 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) {
299 ScrollNode* node = scroll_tree->Node(i);
300 scroll_tree->parent(node)->num_drawn_descendants +=
301 node->num_drawn_descendants;
302 }
303 for (LayerImpl* layer : *layer_tree_impl) {
304 bool scrolls_drawn_descendant = false;
305 if (layer->scrollable()) {
306 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index());
307 if (node->num_drawn_descendants > 0)
308 scrolls_drawn_descendant = true;
309 }
310 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant);
311 }
312 }
313
314 static void ComputeInitialRenderSurfaceLayerList( 289 static void ComputeInitialRenderSurfaceLayerList(
315 LayerTreeImpl* layer_tree_impl, 290 LayerTreeImpl* layer_tree_impl,
316 PropertyTrees* property_trees, 291 PropertyTrees* property_trees,
317 LayerImplList* render_surface_layer_list, 292 LayerImplList* render_surface_layer_list,
318 bool can_render_to_separate_surface) { 293 bool can_render_to_separate_surface) {
319 ScrollTree* scroll_tree = &property_trees->scroll_tree;
320 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i)
321 scroll_tree->Node(i)->num_drawn_descendants = 0;
322
323 // Add all non-skipped surfaces to the initial render surface layer list. Add 294 // Add all non-skipped surfaces to the initial render surface layer list. Add
324 // all non-skipped layers to the layer list of their target surface, and 295 // all non-skipped layers to the layer list of their target surface, and
325 // add their content rect to their target surface's accumulated content rect. 296 // add their content rect to their target surface's accumulated content rect.
326 for (LayerImpl* layer : *layer_tree_impl) { 297 for (LayerImpl* layer : *layer_tree_impl) {
327 if (layer->render_surface()) { 298 if (layer->render_surface()) {
328 layer->ClearRenderSurfaceLayerList(); 299 layer->ClearRenderSurfaceLayerList();
329 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( 300 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(
330 layer->render_surface()); 301 layer->render_surface());
331 } 302 }
332 layer->set_is_drawn_render_surface_layer_list_member(false); 303 layer->set_is_drawn_render_surface_layer_list_member(false);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 } 355 }
385 } 356 }
386 bool layer_is_drawn = 357 bool layer_is_drawn =
387 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; 358 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn;
388 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( 359 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate(
389 layer, layer_is_drawn, property_trees); 360 layer, layer_is_drawn, property_trees);
390 if (!layer_should_be_drawn) 361 if (!layer_should_be_drawn)
391 continue; 362 continue;
392 363
393 layer->set_is_drawn_render_surface_layer_list_member(true); 364 layer->set_is_drawn_render_surface_layer_list_member(true);
394 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants++;
395 layer->render_target()->layer_list().push_back(layer); 365 layer->render_target()->layer_list().push_back(layer);
396 366
397 // The layer contributes its drawable content rect to its render target. 367 // The layer contributes its drawable content rect to its render target.
398 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); 368 layer->render_target()->AccumulateContentRectFromContributingLayer(layer);
399 } 369 }
400 } 370 }
401 371
402 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, 372 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl,
403 PropertyTrees* property_trees, 373 PropertyTrees* property_trees,
404 LayerImplList* render_surface_layer_list, 374 LayerImplList* render_surface_layer_list,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 // have an empty content rect. After surface content rects are computed, 450 // have an empty content rect. After surface content rects are computed,
481 // produce a final RSLL that omits empty surfaces. 451 // produce a final RSLL that omits empty surfaces.
482 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, 452 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees,
483 &initial_render_surface_list, 453 &initial_render_surface_list,
484 can_render_to_separate_surface); 454 can_render_to_separate_surface);
485 ComputeSurfaceContentRects(layer_tree_impl, property_trees, 455 ComputeSurfaceContentRects(layer_tree_impl, property_trees,
486 &initial_render_surface_list, max_texture_size); 456 &initial_render_surface_list, max_texture_size);
487 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, 457 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees,
488 &initial_render_surface_list, 458 &initial_render_surface_list,
489 render_surface_layer_list); 459 render_surface_layer_list);
490
491 ComputeLayerScrollsDrawnDescendants(layer_tree_impl,
492 &property_trees->scroll_tree);
493 } 460 }
494 461
495 void CalculateDrawPropertiesInternal( 462 void CalculateDrawPropertiesInternal(
496 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, 463 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs,
497 PropertyTreeOption property_tree_option) { 464 PropertyTreeOption property_tree_option) {
498 inputs->render_surface_layer_list->clear(); 465 inputs->render_surface_layer_list->clear();
499 466
500 const bool should_measure_property_tree_performance = 467 const bool should_measure_property_tree_performance =
501 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; 468 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED;
502 469
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 651
685 PropertyTrees* GetPropertyTrees(Layer* layer) { 652 PropertyTrees* GetPropertyTrees(Layer* layer) {
686 return layer->GetLayerTree()->property_trees(); 653 return layer->GetLayerTree()->property_trees();
687 } 654 }
688 655
689 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { 656 PropertyTrees* GetPropertyTrees(LayerImpl* layer) {
690 return layer->layer_tree_impl()->property_trees(); 657 return layer->layer_tree_impl()->property_trees();
691 } 658 }
692 659
693 } // namespace cc 660 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/layer_impl.cc ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698