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

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

Issue 2907053004: GSB uses delta_hints to calculate scrolling chain. (Closed)
Patch Set: Merge branch 'master' into GSB_checks_delta_hints Created 3 years, 5 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 2790 matching lines...) Expand 10 before | Expand all | Expand 10 after
2801 2801
2802 active_tree_->SetCurrentlyScrollingNode(scrolling_node); 2802 active_tree_->SetCurrentlyScrollingNode(scrolling_node);
2803 // TODO(majidvp): get rid of wheel_scrolling_ and set is_direct_manipulation 2803 // TODO(majidvp): get rid of wheel_scrolling_ and set is_direct_manipulation
2804 // in input_handler_proxy instead. 2804 // in input_handler_proxy instead.
2805 wheel_scrolling_ = IsWheelBasedScroll(type); 2805 wheel_scrolling_ = IsWheelBasedScroll(type);
2806 scroll_state->set_is_direct_manipulation(!wheel_scrolling_); 2806 scroll_state->set_is_direct_manipulation(!wheel_scrolling_);
2807 // Invoke |DistributeScrollDelta| even with zero delta and velocity to ensure 2807 // Invoke |DistributeScrollDelta| even with zero delta and velocity to ensure
2808 // scroll customization callbacks are invoked. 2808 // scroll customization callbacks are invoked.
2809 DistributeScrollDelta(scroll_state); 2809 DistributeScrollDelta(scroll_state);
2810 2810
2811 // If the CurrentlyScrollingNode doesn't exist after distributing scroll
2812 // delta, no scroller can scroll in the given delta hint direction(s).
2813 if (!active_tree_->CurrentlyScrollingNode()) {
2814 scroll_status.thread = InputHandler::SCROLL_IGNORED;
2815 scroll_status.main_thread_scrolling_reasons =
2816 MainThreadScrollingReason::kNotScrollingOnMain;
2817 return scroll_status;
2818 }
2819
2811 client_->RenewTreePriority(); 2820 client_->RenewTreePriority();
2812 RecordCompositorSlowScrollMetric(type, CC_THREAD); 2821 RecordCompositorSlowScrollMetric(type, CC_THREAD);
2813 2822
2814 UpdateScrollSourceInfo(wheel_scrolling_); 2823 UpdateScrollSourceInfo(wheel_scrolling_);
2815 2824
2816 return scroll_status; 2825 return scroll_status;
2817 } 2826 }
2818 2827
2819 InputHandler::ScrollStatus LayerTreeHostImpl::RootScrollBegin( 2828 InputHandler::ScrollStatus LayerTreeHostImpl::RootScrollBegin(
2820 ScrollState* scroll_state, 2829 ScrollState* scroll_state,
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2928 } 2937 }
2929 2938
2930 // If |first_scrolling_layer_or_drawn_scrollbar| is not scrollable, it must 2939 // If |first_scrolling_layer_or_drawn_scrollbar| is not scrollable, it must
2931 // be a drawn scrollbar. These hit tests require falling back to main-thread 2940 // be a drawn scrollbar. These hit tests require falling back to main-thread
2932 // scrolling. 2941 // scrolling.
2933 DCHECK(first_scrolling_layer_or_drawn_scrollbar->IsDrawnScrollbar()); 2942 DCHECK(first_scrolling_layer_or_drawn_scrollbar->IsDrawnScrollbar());
2934 return false; 2943 return false;
2935 } 2944 }
2936 2945
2937 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimatedBegin( 2946 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimatedBegin(
2938 const gfx::Point& viewport_point) { 2947 ScrollState* scroll_state) {
2939 InputHandler::ScrollStatus scroll_status; 2948 InputHandler::ScrollStatus scroll_status;
2940 scroll_status.main_thread_scrolling_reasons = 2949 scroll_status.main_thread_scrolling_reasons =
2941 MainThreadScrollingReason::kNotScrollingOnMain; 2950 MainThreadScrollingReason::kNotScrollingOnMain;
2942 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; 2951 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
2943 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); 2952 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
2944 if (scroll_node) { 2953 if (scroll_node) {
2945 gfx::Vector2dF delta; 2954 gfx::Vector2dF delta;
2946 2955
2947 if (ScrollAnimationUpdateTarget(scroll_node, delta, base::TimeDelta())) { 2956 if (ScrollAnimationUpdateTarget(scroll_node, delta, base::TimeDelta())) {
2948 scroll_status.thread = SCROLL_ON_IMPL_THREAD; 2957 scroll_status.thread = SCROLL_ON_IMPL_THREAD;
2949 } else { 2958 } else {
2950 scroll_status.thread = SCROLL_IGNORED; 2959 scroll_status.thread = SCROLL_IGNORED;
2951 scroll_status.main_thread_scrolling_reasons = 2960 scroll_status.main_thread_scrolling_reasons =
2952 MainThreadScrollingReason::kNotScrollable; 2961 MainThreadScrollingReason::kNotScrollable;
2953 } 2962 }
2954 return scroll_status; 2963 return scroll_status;
2955 } 2964 }
2956 ScrollStateData scroll_state_data;
2957 scroll_state_data.position_x = viewport_point.x();
2958 scroll_state_data.position_y = viewport_point.y();
2959 ScrollState scroll_state(scroll_state_data);
2960 2965
2961 // ScrollAnimated is used for animated wheel scrolls. We find the first layer 2966 // ScrollAnimated is used for animated wheel scrolls. We find the first layer
2962 // that can scroll and set up an animation of its scroll offset. Note that 2967 // that can scroll and set up an animation of its scroll offset. Note that
2963 // this does not currently go through the scroll customization machinery 2968 // this does not currently go through the scroll customization machinery
2964 // that ScrollBy uses for non-animated wheel scrolls. 2969 // that ScrollBy uses for non-animated wheel scrolls.
2965 scroll_status = ScrollBegin(&scroll_state, WHEEL); 2970 scroll_status = ScrollBegin(scroll_state, WHEEL);
2966 if (scroll_status.thread == SCROLL_ON_IMPL_THREAD) { 2971 if (scroll_status.thread == SCROLL_ON_IMPL_THREAD) {
2967 scroll_animating_latched_node_id_ = ScrollTree::kInvalidNodeId; 2972 scroll_animating_latched_node_id_ = ScrollTree::kInvalidNodeId;
2968 ScrollStateData scroll_state_end_data; 2973 ScrollStateData scroll_state_end_data;
2969 scroll_state_end_data.is_ending = true; 2974 scroll_state_end_data.is_ending = true;
2970 ScrollState scroll_state_end(scroll_state_end_data); 2975 ScrollState scroll_state_end(scroll_state_end_data);
2971 ScrollEnd(&scroll_state_end); 2976 ScrollEnd(&scroll_state_end);
2972 } 2977 }
2973 return scroll_status; 2978 return scroll_status;
2974 } 2979 }
2975 2980
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
3129 scroll_status.thread == SCROLL_ON_IMPL_THREAD) { 3134 scroll_status.thread == SCROLL_ON_IMPL_THREAD) {
3130 // If we get to here, we shouldn't return SCROLL_ON_IMPL_THREAD as otherwise 3135 // If we get to here, we shouldn't return SCROLL_ON_IMPL_THREAD as otherwise
3131 // we'll mark the scroll as handled and the scroll won't bubble. 3136 // we'll mark the scroll as handled and the scroll won't bubble.
3132 scroll_status.thread = SCROLL_IGNORED; 3137 scroll_status.thread = SCROLL_IGNORED;
3133 scroll_status.main_thread_scrolling_reasons = 3138 scroll_status.main_thread_scrolling_reasons =
3134 MainThreadScrollingReason::kNotScrollable; 3139 MainThreadScrollingReason::kNotScrollable;
3135 } 3140 }
3136 return scroll_status; 3141 return scroll_status;
3137 } 3142 }
3138 3143
3139 gfx::Vector2dF LayerTreeHostImpl::ScrollNodeWithViewportSpaceDelta( 3144 bool LayerTreeHostImpl::CalculateLocalScrollDeltaAndStartPoint(
3140 ScrollNode* scroll_node, 3145 const ScrollNode& scroll_node,
3141 const gfx::PointF& viewport_point, 3146 const gfx::PointF& viewport_point,
3142 const gfx::Vector2dF& viewport_delta, 3147 const gfx::Vector2dF& viewport_delta,
3143 ScrollTree* scroll_tree) { 3148 const ScrollTree& scroll_tree,
3149 gfx::Vector2dF* out_local_scroll_delta,
3150 gfx::PointF* out_local_start_point /*= nullptr*/) {
3144 // Layers with non-invertible screen space transforms should not have passed 3151 // Layers with non-invertible screen space transforms should not have passed
3145 // the scroll hit test in the first place. 3152 // the scroll hit test in the first place.
3146 const gfx::Transform screen_space_transform = 3153 const gfx::Transform screen_space_transform =
3147 scroll_tree->ScreenSpaceTransform(scroll_node->id); 3154 scroll_tree.ScreenSpaceTransform(scroll_node.id);
3148 DCHECK(screen_space_transform.IsInvertible()); 3155 DCHECK(screen_space_transform.IsInvertible());
3149 gfx::Transform inverse_screen_space_transform( 3156 gfx::Transform inverse_screen_space_transform(
3150 gfx::Transform::kSkipInitialization); 3157 gfx::Transform::kSkipInitialization);
3151 bool did_invert = 3158 bool did_invert =
3152 screen_space_transform.GetInverse(&inverse_screen_space_transform); 3159 screen_space_transform.GetInverse(&inverse_screen_space_transform);
3153 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root 3160 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root
3154 // layers, we may need to explicitly handle uninvertible transforms here. 3161 // layers, we may need to explicitly handle uninvertible transforms here.
3155 DCHECK(did_invert); 3162 DCHECK(did_invert);
3156 3163
3157 float scale_from_viewport_to_screen_space = 3164 float scale_from_viewport_to_screen_space =
3158 active_tree_->device_scale_factor(); 3165 active_tree_->device_scale_factor();
3159 gfx::PointF screen_space_point = 3166 gfx::PointF screen_space_point =
3160 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space); 3167 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space);
3161 3168
3162 gfx::Vector2dF screen_space_delta = viewport_delta; 3169 gfx::Vector2dF screen_space_delta = viewport_delta;
3163 screen_space_delta.Scale(scale_from_viewport_to_screen_space); 3170 screen_space_delta.Scale(scale_from_viewport_to_screen_space);
3164 3171
3165 // First project the scroll start and end points to local layer space to find 3172 // Project the scroll start and end points to local layer space to find the
3166 // the scroll delta in layer coordinates. 3173 // scroll delta in layer coordinates.
3167 bool start_clipped, end_clipped; 3174 bool start_clipped, end_clipped;
3168 gfx::PointF screen_space_end_point = screen_space_point + screen_space_delta; 3175 gfx::PointF screen_space_end_point = screen_space_point + screen_space_delta;
3169 gfx::PointF local_start_point = MathUtil::ProjectPoint( 3176 gfx::PointF local_start_point = MathUtil::ProjectPoint(
3170 inverse_screen_space_transform, screen_space_point, &start_clipped); 3177 inverse_screen_space_transform, screen_space_point, &start_clipped);
3171 gfx::PointF local_end_point = MathUtil::ProjectPoint( 3178 gfx::PointF local_end_point = MathUtil::ProjectPoint(
3172 inverse_screen_space_transform, screen_space_end_point, &end_clipped); 3179 inverse_screen_space_transform, screen_space_end_point, &end_clipped);
3180 DCHECK(out_local_scroll_delta);
3181 *out_local_scroll_delta = local_end_point - local_start_point;
3173 3182
3174 // In general scroll point coordinates should not get clipped. 3183 if (out_local_start_point)
3175 DCHECK(!start_clipped); 3184 *out_local_start_point = local_start_point;
3176 DCHECK(!end_clipped); 3185
3177 if (start_clipped || end_clipped) 3186 if (start_clipped || end_clipped)
3187 return false;
3188
3189 return true;
3190 }
3191
3192 gfx::Vector2dF LayerTreeHostImpl::ScrollNodeWithViewportSpaceDelta(
3193 ScrollNode* scroll_node,
3194 const gfx::PointF& viewport_point,
3195 const gfx::Vector2dF& viewport_delta,
3196 ScrollTree* scroll_tree) {
3197 gfx::PointF local_start_point;
3198 gfx::Vector2dF local_scroll_delta;
3199 if (!CalculateLocalScrollDeltaAndStartPoint(
3200 *scroll_node, viewport_point, viewport_delta, *scroll_tree,
3201 &local_scroll_delta, &local_start_point)) {
3178 return gfx::Vector2dF(); 3202 return gfx::Vector2dF();
3203 }
3179 3204
3180 // Apply the scroll delta. 3205 // Apply the scroll delta.
3181 gfx::ScrollOffset previous_offset = 3206 gfx::ScrollOffset previous_offset =
3182 scroll_tree->current_scroll_offset(scroll_node->element_id); 3207 scroll_tree->current_scroll_offset(scroll_node->element_id);
3183 scroll_tree->ScrollBy(scroll_node, local_end_point - local_start_point, 3208 scroll_tree->ScrollBy(scroll_node, local_scroll_delta, active_tree());
3184 active_tree());
3185 gfx::ScrollOffset scrolled = 3209 gfx::ScrollOffset scrolled =
3186 scroll_tree->current_scroll_offset(scroll_node->element_id) - 3210 scroll_tree->current_scroll_offset(scroll_node->element_id) -
3187 previous_offset; 3211 previous_offset;
3188 3212
3189 // Get the end point in the layer's content space so we can apply its 3213 // Get the end point in the layer's content space so we can apply its
3190 // ScreenSpaceTransform. 3214 // ScreenSpaceTransform.
3191 gfx::PointF actual_local_end_point = 3215 gfx::PointF actual_local_end_point =
3192 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y()); 3216 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y());
3193 3217
3194 // Calculate the applied scroll delta in viewport space coordinates. 3218 // Calculate the applied scroll delta in viewport space coordinates.
3219 bool end_clipped;
3220 const gfx::Transform screen_space_transform =
3221 scroll_tree->ScreenSpaceTransform(scroll_node->id);
3195 gfx::PointF actual_screen_space_end_point = MathUtil::MapPoint( 3222 gfx::PointF actual_screen_space_end_point = MathUtil::MapPoint(
3196 screen_space_transform, actual_local_end_point, &end_clipped); 3223 screen_space_transform, actual_local_end_point, &end_clipped);
3197 DCHECK(!end_clipped); 3224 DCHECK(!end_clipped);
3198 if (end_clipped) 3225 if (end_clipped)
3199 return gfx::Vector2dF(); 3226 return gfx::Vector2dF();
3227
3228 float scale_from_viewport_to_screen_space =
3229 active_tree_->device_scale_factor();
3200 gfx::PointF actual_viewport_end_point = gfx::ScalePoint( 3230 gfx::PointF actual_viewport_end_point = gfx::ScalePoint(
3201 actual_screen_space_end_point, 1.f / scale_from_viewport_to_screen_space); 3231 actual_screen_space_end_point, 1.f / scale_from_viewport_to_screen_space);
3202 return actual_viewport_end_point - viewport_point; 3232 return actual_viewport_end_point - viewport_point;
3203 } 3233 }
3204 3234
3205 static gfx::Vector2dF ScrollNodeWithLocalDelta( 3235 static gfx::Vector2dF ScrollNodeWithLocalDelta(
3206 ScrollNode* scroll_node, 3236 ScrollNode* scroll_node,
3207 const gfx::Vector2dF& local_delta, 3237 const gfx::Vector2dF& local_delta,
3208 float page_scale_factor, 3238 float page_scale_factor,
3209 LayerTreeImpl* layer_tree_impl) { 3239 LayerTreeImpl* layer_tree_impl) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
3320 } 3350 }
3321 3351
3322 void LayerTreeHostImpl::DistributeScrollDelta(ScrollState* scroll_state) { 3352 void LayerTreeHostImpl::DistributeScrollDelta(ScrollState* scroll_state) {
3323 // TODO(majidvp): in Blink we compute scroll chain only at scroll begin which 3353 // TODO(majidvp): in Blink we compute scroll chain only at scroll begin which
3324 // is not the case here. We eventually want to have the same behaviour on both 3354 // is not the case here. We eventually want to have the same behaviour on both
3325 // sides but it may become a non issue if we get rid of scroll chaining (see 3355 // sides but it may become a non issue if we get rid of scroll chaining (see
3326 // crbug.com/526462) 3356 // crbug.com/526462)
3327 std::list<ScrollNode*> current_scroll_chain; 3357 std::list<ScrollNode*> current_scroll_chain;
3328 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; 3358 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
3329 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); 3359 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
3330 ScrollNode* viewport_scroll_node = OuterViewportScrollNode(); 3360 ScrollNode* viewport_scroll_node =
3361 viewport()->MainScrollLayer()
3362 ? scroll_tree.Node(viewport()->MainScrollLayer()->scroll_tree_index())
3363 : nullptr;
3331 if (scroll_node) { 3364 if (scroll_node) {
3332 // TODO(bokan): The loop checks for a null parent but don't we still want to 3365 // TODO(bokan): The loop checks for a null parent but don't we still want to
3333 // distribute to the root scroll node? 3366 // distribute to the root scroll node?
3334 for (; scroll_tree.parent(scroll_node); 3367 for (; scroll_tree.parent(scroll_node);
3335 scroll_node = scroll_tree.parent(scroll_node)) { 3368 scroll_node = scroll_tree.parent(scroll_node)) {
3336 if (scroll_node == viewport_scroll_node) { 3369 if (scroll_node == viewport_scroll_node) {
3337 // Don't chain scrolls past the outer viewport scroll layer. Once we 3370 // Don't chain scrolls past the outer viewport scroll layer. Once we
3338 // reach that, we should scroll the viewport which is represented by the 3371 // reach that, we should scroll the viewport which is represented by the
3339 // main viewport scroll layer. 3372 // main viewport scroll layer.
3340 DCHECK(viewport_scroll_node); 3373 DCHECK(viewport_scroll_node);
3341 current_scroll_chain.push_front(viewport_scroll_node); 3374 current_scroll_chain.push_front(viewport_scroll_node);
3342 break; 3375 break;
3343 } 3376 }
3344 3377
3345 if (!scroll_node->scrollable) 3378 if (!scroll_node->scrollable)
3346 continue; 3379 continue;
3347 3380
3348 current_scroll_chain.push_front(scroll_node); 3381 if (CanConsumeDelta(scroll_node, *scroll_state))
3382 current_scroll_chain.push_front(scroll_node);
3349 } 3383 }
3350 } 3384 }
3385 active_tree_->SetCurrentlyScrollingNode(
3386 current_scroll_chain.empty() ? nullptr : current_scroll_chain.back());
3351 scroll_state->set_scroll_chain_and_layer_tree(current_scroll_chain, 3387 scroll_state->set_scroll_chain_and_layer_tree(current_scroll_chain,
3352 active_tree()); 3388 active_tree());
3353 scroll_state->DistributeToScrollChainDescendant(); 3389 scroll_state->DistributeToScrollChainDescendant();
3354 } 3390 }
3355 3391
3392 bool LayerTreeHostImpl::CanConsumeDelta(ScrollNode* scroll_node,
3393 const ScrollState& scroll_state) {
3394 DCHECK(scroll_node);
3395 gfx::Vector2dF delta_to_scroll;
3396 if (scroll_state.is_beginning()) {
3397 delta_to_scroll = gfx::Vector2dF(scroll_state.delta_x_hint(),
3398 scroll_state.delta_y_hint());
3399 } else {
3400 delta_to_scroll =
3401 gfx::Vector2dF(scroll_state.delta_x(), scroll_state.delta_y());
3402 }
3403
3404 if (delta_to_scroll == gfx::Vector2dF())
3405 return true;
3406
3407 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
3408 if (scroll_state.is_direct_manipulation()) {
3409 gfx::Vector2dF local_scroll_delta;
3410 if (!CalculateLocalScrollDeltaAndStartPoint(
3411 *scroll_node,
3412 gfx::PointF(scroll_state.position_x(), scroll_state.position_y()),
3413 delta_to_scroll, scroll_tree, &local_scroll_delta)) {
3414 return false;
3415 }
3416 delta_to_scroll = local_scroll_delta;
3417 }
3418
3419 if (ComputeScrollDelta(scroll_node, delta_to_scroll) != gfx::Vector2dF())
3420 return true;
3421
3422 return false;
3423 }
3424
3356 InputHandlerScrollResult LayerTreeHostImpl::ScrollBy( 3425 InputHandlerScrollResult LayerTreeHostImpl::ScrollBy(
3357 ScrollState* scroll_state) { 3426 ScrollState* scroll_state) {
3358 DCHECK(scroll_state); 3427 DCHECK(scroll_state);
3359 3428
3360 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBy"); 3429 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBy");
3361 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; 3430 ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
3362 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); 3431 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
3363 3432
3364 if (!scroll_node) 3433 if (!scroll_node)
3365 return InputHandlerScrollResult(); 3434 return InputHandlerScrollResult();
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after
4327 4396
4328 void LayerTreeHostImpl::ShowScrollbarsForImplScroll(ElementId element_id) { 4397 void LayerTreeHostImpl::ShowScrollbarsForImplScroll(ElementId element_id) {
4329 if (!element_id) 4398 if (!element_id)
4330 return; 4399 return;
4331 if (ScrollbarAnimationController* animation_controller = 4400 if (ScrollbarAnimationController* animation_controller =
4332 ScrollbarAnimationControllerForElementId(element_id)) 4401 ScrollbarAnimationControllerForElementId(element_id))
4333 animation_controller->DidScrollUpdate(); 4402 animation_controller->DidScrollUpdate();
4334 } 4403 }
4335 4404
4336 } // namespace cc 4405 } // 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