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

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

Issue 1646603004: Move scroll event handlers from layer to layer tree view. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_cc_listeners
Patch Set: Rebase Created 4 years, 10 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('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_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 545
546 gfx::PointF device_viewport_point = gfx::ScalePoint( 546 gfx::PointF device_viewport_point = gfx::ScalePoint(
547 gfx::PointF(viewport_point), active_tree_->device_scale_factor()); 547 gfx::PointF(viewport_point), active_tree_->device_scale_factor());
548 548
549 LayerImpl* layer_impl = 549 LayerImpl* layer_impl =
550 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); 550 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point);
551 551
552 bool scroll_on_main_thread = false; 552 bool scroll_on_main_thread = false;
553 uint32_t main_thread_scrolling_reasons; 553 uint32_t main_thread_scrolling_reasons;
554 LayerImpl* test_layer_impl = FindScrollLayerForDeviceViewportPoint( 554 LayerImpl* test_layer_impl = FindScrollLayerForDeviceViewportPoint(
555 device_viewport_point, type, layer_impl, &scroll_on_main_thread, nullptr, 555 device_viewport_point, type, layer_impl, &scroll_on_main_thread,
556 &main_thread_scrolling_reasons); 556 &main_thread_scrolling_reasons);
557 557
558 if (!test_layer_impl) 558 if (!test_layer_impl)
559 return false; 559 return false;
560 560
561 if (scrolling_layer_impl == test_layer_impl) 561 if (scrolling_layer_impl == test_layer_impl)
562 return true; 562 return true;
563 563
564 // For active scrolling state treat the inner/outer viewports interchangeably. 564 // For active scrolling state treat the inner/outer viewports interchangeably.
565 if ((scrolling_layer_impl == InnerViewportScrollLayer() && 565 if ((scrolling_layer_impl == InnerViewportScrollLayer() &&
(...skipping 1860 matching lines...) Expand 10 before | Expand all | Expand 10 after
2426 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2426 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2427 DCHECK(input_handler_client_ == NULL); 2427 DCHECK(input_handler_client_ == NULL);
2428 input_handler_client_ = client; 2428 input_handler_client_ = client;
2429 } 2429 }
2430 2430
2431 LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint( 2431 LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint(
2432 const gfx::PointF& device_viewport_point, 2432 const gfx::PointF& device_viewport_point,
2433 InputHandler::ScrollInputType type, 2433 InputHandler::ScrollInputType type,
2434 LayerImpl* layer_impl, 2434 LayerImpl* layer_impl,
2435 bool* scroll_on_main_thread, 2435 bool* scroll_on_main_thread,
2436 bool* optional_has_ancestor_scroll_handler,
2437 uint32_t* main_thread_scrolling_reasons) const { 2436 uint32_t* main_thread_scrolling_reasons) const {
2438 DCHECK(scroll_on_main_thread); 2437 DCHECK(scroll_on_main_thread);
2439 DCHECK(main_thread_scrolling_reasons); 2438 DCHECK(main_thread_scrolling_reasons);
2440 *main_thread_scrolling_reasons = 2439 *main_thread_scrolling_reasons =
2441 MainThreadScrollingReason::kNotScrollingOnMain; 2440 MainThreadScrollingReason::kNotScrollingOnMain;
2442 2441
2443 // Walk up the hierarchy and look for a scrollable layer. 2442 // Walk up the hierarchy and look for a scrollable layer.
2444 LayerImpl* potentially_scrolling_layer_impl = NULL; 2443 LayerImpl* potentially_scrolling_layer_impl = NULL;
2445 if (layer_impl) { 2444 if (layer_impl) {
2446 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; 2445 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
(...skipping 13 matching lines...) Expand all
2460 DCHECK_GT( 2459 DCHECK_GT(
2461 status.main_thread_scrolling_reasons, 2460 status.main_thread_scrolling_reasons,
2462 MainThreadScrollingReason::kMaxNonTransientScrollingReasons); 2461 MainThreadScrollingReason::kMaxNonTransientScrollingReasons);
2463 } 2462 }
2464 2463
2465 *scroll_on_main_thread = true; 2464 *scroll_on_main_thread = true;
2466 *main_thread_scrolling_reasons = status.main_thread_scrolling_reasons; 2465 *main_thread_scrolling_reasons = status.main_thread_scrolling_reasons;
2467 return NULL; 2466 return NULL;
2468 } 2467 }
2469 2468
2470 if (optional_has_ancestor_scroll_handler &&
2471 layer_impl->have_scroll_event_handlers())
2472 *optional_has_ancestor_scroll_handler = true;
2473
2474 if (status.thread == InputHandler::SCROLL_ON_IMPL_THREAD && 2469 if (status.thread == InputHandler::SCROLL_ON_IMPL_THREAD &&
2475 !potentially_scrolling_layer_impl) { 2470 !potentially_scrolling_layer_impl) {
2476 potentially_scrolling_layer_impl = layer_impl; 2471 potentially_scrolling_layer_impl = layer_impl;
2477 } 2472 }
2478 } 2473 }
2479 } 2474 }
2480 // Falling back to the root scroll layer ensures generation of root overscroll 2475 // Falling back to the root scroll layer ensures generation of root overscroll
2481 // notifications while preventing scroll updates from being unintentionally 2476 // notifications while preventing scroll updates from being unintentionally
2482 // forwarded to the main thread. The inner viewport layer represents the 2477 // forwarded to the main thread. The inner viewport layer represents the
2483 // viewport during scrolling. 2478 // viewport during scrolling.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2591 scroll_status.thread = SCROLL_UNKNOWN; 2586 scroll_status.thread = SCROLL_UNKNOWN;
2592 scroll_status.main_thread_scrolling_reasons = 2587 scroll_status.main_thread_scrolling_reasons =
2593 MainThreadScrollingReason::kFailedHitTest; 2588 MainThreadScrollingReason::kFailedHitTest;
2594 return scroll_status; 2589 return scroll_status;
2595 } 2590 }
2596 } 2591 }
2597 2592
2598 bool scroll_on_main_thread = false; 2593 bool scroll_on_main_thread = false;
2599 LayerImpl* scrolling_layer_impl = FindScrollLayerForDeviceViewportPoint( 2594 LayerImpl* scrolling_layer_impl = FindScrollLayerForDeviceViewportPoint(
2600 device_viewport_point, type, layer_impl, &scroll_on_main_thread, 2595 device_viewport_point, type, layer_impl, &scroll_on_main_thread,
2601 &scroll_affects_scroll_handler_,
2602 &scroll_status.main_thread_scrolling_reasons); 2596 &scroll_status.main_thread_scrolling_reasons);
2603 2597
2598 if (scrolling_layer_impl)
2599 scroll_affects_scroll_handler_ =
2600 scrolling_layer_impl->layer_tree_impl()->have_scroll_event_handlers();
2601
2604 if (scroll_on_main_thread) { 2602 if (scroll_on_main_thread) {
2605 RecordCompositorSlowScrollMetric(type, MAIN_THREAD); 2603 RecordCompositorSlowScrollMetric(type, MAIN_THREAD);
2606 2604
2607 // TODO(lanwei): Will remove this metric in M50 when we have used the new 2605 // TODO(lanwei): Will remove this metric in M50 when we have used the new
2608 // metrics for one milestone, see https://crbug.com/557787. 2606 // metrics for one milestone, see https://crbug.com/557787.
2609 UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true); 2607 UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true);
2610 scroll_status.thread = SCROLL_ON_MAIN_THREAD; 2608 scroll_status.thread = SCROLL_ON_MAIN_THREAD;
2611 return scroll_status; 2609 return scroll_status;
2612 } 2610 }
2613 2611
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
3068 LayerImpl* layer_impl = 3066 LayerImpl* layer_impl =
3069 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); 3067 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point);
3070 HandleMouseOverScrollbar(layer_impl); 3068 HandleMouseOverScrollbar(layer_impl);
3071 if (scroll_layer_id_when_mouse_over_scrollbar_ != Layer::INVALID_ID) 3069 if (scroll_layer_id_when_mouse_over_scrollbar_ != Layer::INVALID_ID)
3072 return; 3070 return;
3073 3071
3074 bool scroll_on_main_thread = false; 3072 bool scroll_on_main_thread = false;
3075 uint32_t main_thread_scrolling_reasons; 3073 uint32_t main_thread_scrolling_reasons;
3076 LayerImpl* scroll_layer_impl = FindScrollLayerForDeviceViewportPoint( 3074 LayerImpl* scroll_layer_impl = FindScrollLayerForDeviceViewportPoint(
3077 device_viewport_point, InputHandler::GESTURE, layer_impl, 3075 device_viewport_point, InputHandler::GESTURE, layer_impl,
3078 &scroll_on_main_thread, NULL, &main_thread_scrolling_reasons); 3076 &scroll_on_main_thread, &main_thread_scrolling_reasons);
3079 if (scroll_layer_impl == InnerViewportScrollLayer()) 3077 if (scroll_layer_impl == InnerViewportScrollLayer())
3080 scroll_layer_impl = OuterViewportScrollLayer(); 3078 scroll_layer_impl = OuterViewportScrollLayer();
3081 if (scroll_on_main_thread || !scroll_layer_impl) 3079 if (scroll_on_main_thread || !scroll_layer_impl)
3082 return; 3080 return;
3083 3081
3084 ScrollbarAnimationController* animation_controller = 3082 ScrollbarAnimationController* animation_controller =
3085 ScrollbarAnimationControllerForId(scroll_layer_impl->id()); 3083 ScrollbarAnimationControllerForId(scroll_layer_impl->id());
3086 if (!animation_controller) 3084 if (!animation_controller)
3087 return; 3085 return;
3088 3086
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
3877 return task_runner_provider_->HasImplThread(); 3875 return task_runner_provider_->HasImplThread();
3878 } 3876 }
3879 3877
3880 bool LayerTreeHostImpl::CommitToActiveTree() const { 3878 bool LayerTreeHostImpl::CommitToActiveTree() const {
3881 // In single threaded mode we skip the pending tree and commit directly to the 3879 // In single threaded mode we skip the pending tree and commit directly to the
3882 // active tree. 3880 // active tree.
3883 return !task_runner_provider_->HasImplThread(); 3881 return !task_runner_provider_->HasImplThread();
3884 } 3882 }
3885 3883
3886 } // namespace cc 3884 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698