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

Side by Side Diff: content/renderer/gpu/input_handler_proxy.cc

Issue 15927023: Explicit interface for synchronous InputHandlerProxy input handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 7 years, 6 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "content/renderer/gpu/input_handler_proxy.h" 5 #include "content/renderer/gpu/input_handler_proxy.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/renderer/gpu/input_handler_proxy_client.h" 9 #include "content/renderer/gpu/input_handler_proxy_client.h"
10 #include "third_party/WebKit/public/platform/Platform.h" 10 #include "third_party/WebKit/public/platform/Platform.h"
(...skipping 28 matching lines...) Expand all
39 input_handler_ = NULL; 39 input_handler_ = NULL;
40 DCHECK(client_); 40 DCHECK(client_);
41 client_->WillShutdown(); 41 client_->WillShutdown();
42 } 42 }
43 43
44 void InputHandlerProxy::SetClient(InputHandlerProxyClient* client) { 44 void InputHandlerProxy::SetClient(InputHandlerProxyClient* client) {
45 DCHECK(!client_ || !client); 45 DCHECK(!client_ || !client);
46 client_ = client; 46 client_ = client;
47 } 47 }
48 48
49 void InputHandlerProxy::HandleInputEvent(const WebInputEvent& event) { 49 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleInputEvent(
50 const WebInputEvent& event) {
50 DCHECK(client_); 51 DCHECK(client_);
51 DCHECK(input_handler_); 52 DCHECK(input_handler_);
52 53
53 InputHandlerProxy::EventDisposition disposition = 54 InputHandlerProxy::EventDisposition disposition =
54 HandleInputEventInternal(event); 55 HandleInputEventInternal(event);
55 switch (disposition) {
56 case DidHandle:
57 client_->DidHandleInputEvent();
58 break;
59 case DidNotHandle:
60 client_->DidNotHandleInputEvent(true /* send_to_widget */);
61 break;
62 case DropEvent:
63 client_->DidNotHandleInputEvent(false /* send_to_widget */);
64 break;
65 }
66 if (event.modifiers & WebInputEvent::IsLastInputEventForCurrentVSync) { 56 if (event.modifiers & WebInputEvent::IsLastInputEventForCurrentVSync) {
67 input_handler_->DidReceiveLastInputEventForBeginFrame( 57 input_handler_->DidReceiveLastInputEventForBeginFrame(
68 base::TimeTicks::FromInternalValue(event.timeStampSeconds * 58 base::TimeTicks::FromInternalValue(event.timeStampSeconds *
69 base::Time::kMicrosecondsPerSecond)); 59 base::Time::kMicrosecondsPerSecond));
70 } 60 }
61 return disposition;
71 } 62 }
72 63
73 InputHandlerProxy::EventDisposition 64 InputHandlerProxy::EventDisposition
74 InputHandlerProxy::HandleInputEventInternal(const WebInputEvent& event) { 65 InputHandlerProxy::HandleInputEventInternal(const WebInputEvent& event) {
75 if (event.type == WebInputEvent::MouseWheel) { 66 if (event.type == WebInputEvent::MouseWheel) {
76 const WebMouseWheelEvent& wheel_event = 67 const WebMouseWheelEvent& wheel_event =
77 *static_cast<const WebMouseWheelEvent*>(&event); 68 *static_cast<const WebMouseWheelEvent*>(&event);
78 if (wheel_event.scrollByPage) { 69 if (wheel_event.scrollByPage) {
79 // TODO(jamesr): We don't properly handle scroll by page in the compositor 70 // TODO(jamesr): We don't properly handle scroll by page in the compositor
80 // thread, so punt it to the main thread. http://crbug.com/236639 71 // thread, so punt it to the main thread. http://crbug.com/236639
81 return DidNotHandle; 72 return EVENT_DISPOSITION_DID_NOT_HANDLE;
82 } 73 }
83 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 74 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
84 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::Wheel); 75 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::Wheel);
85 switch (scroll_status) { 76 switch (scroll_status) {
86 case cc::InputHandler::ScrollStarted: { 77 case cc::InputHandler::ScrollStarted: {
87 TRACE_EVENT_INSTANT2( 78 TRACE_EVENT_INSTANT2(
88 "renderer", 79 "renderer",
89 "InputHandlerProxy::handle_input wheel scroll", 80 "InputHandlerProxy::handle_input wheel scroll",
90 TRACE_EVENT_SCOPE_THREAD, 81 TRACE_EVENT_SCOPE_THREAD,
91 "deltaX", 82 "deltaX",
92 -wheel_event.deltaX, 83 -wheel_event.deltaX,
93 "deltaY", 84 "deltaY",
94 -wheel_event.deltaY); 85 -wheel_event.deltaY);
95 bool did_scroll = input_handler_->ScrollBy( 86 bool did_scroll = input_handler_->ScrollBy(
96 gfx::Point(wheel_event.x, wheel_event.y), 87 gfx::Point(wheel_event.x, wheel_event.y),
97 gfx::Vector2dF(-wheel_event.deltaX, -wheel_event.deltaY)); 88 gfx::Vector2dF(-wheel_event.deltaX, -wheel_event.deltaY));
98 input_handler_->ScrollEnd(); 89 input_handler_->ScrollEnd();
99 return did_scroll ? DidHandle : DropEvent; 90 return did_scroll ? EVENT_DISPOSITION_DID_HANDLE
91 : EVENT_DISPOSITION_DROP_EVENT;
100 } 92 }
101 case cc::InputHandler::ScrollIgnored: 93 case cc::InputHandler::ScrollIgnored:
102 // TODO(jamesr): This should be DropEvent, but in cases where we fail to 94 // TODO(jamesr): This should be EVENT_DISPOSITION_DROP_EVENT, but in
103 // properly sync scrollability it's safer to send the 95 // cases where we fail to properly sync scrollability it's safer to send
104 // event to the main thread. Change back to DropEvent once we have 96 // the event to the main thread. Change back to
105 // synchronization bugs sorted out. 97 // EVENT_DISPOSITION_DROP_EVENT once we have synchronization bugs sorted
106 return DidNotHandle; 98 // out.
99 return EVENT_DISPOSITION_DID_NOT_HANDLE;
107 case cc::InputHandler::ScrollOnMainThread: 100 case cc::InputHandler::ScrollOnMainThread:
108 return DidNotHandle; 101 return EVENT_DISPOSITION_DID_NOT_HANDLE;
109 } 102 }
110 } else if (event.type == WebInputEvent::GestureScrollBegin) { 103 } else if (event.type == WebInputEvent::GestureScrollBegin) {
111 DCHECK(!gesture_scroll_on_impl_thread_); 104 DCHECK(!gesture_scroll_on_impl_thread_);
112 #ifndef NDEBUG 105 #ifndef NDEBUG
113 DCHECK(!expect_scroll_update_end_); 106 DCHECK(!expect_scroll_update_end_);
114 expect_scroll_update_end_ = true; 107 expect_scroll_update_end_ = true;
115 #endif 108 #endif
116 const WebGestureEvent& gesture_event = 109 const WebGestureEvent& gesture_event =
117 *static_cast<const WebGestureEvent*>(&event); 110 *static_cast<const WebGestureEvent*>(&event);
118 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 111 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
119 gfx::Point(gesture_event.x, gesture_event.y), 112 gfx::Point(gesture_event.x, gesture_event.y),
120 cc::InputHandler::Gesture); 113 cc::InputHandler::Gesture);
121 switch (scroll_status) { 114 switch (scroll_status) {
122 case cc::InputHandler::ScrollStarted: 115 case cc::InputHandler::ScrollStarted:
123 gesture_scroll_on_impl_thread_ = true; 116 gesture_scroll_on_impl_thread_ = true;
124 return DidHandle; 117 return EVENT_DISPOSITION_DID_HANDLE;
125 case cc::InputHandler::ScrollOnMainThread: 118 case cc::InputHandler::ScrollOnMainThread:
126 return DidNotHandle; 119 return EVENT_DISPOSITION_DID_NOT_HANDLE;
127 case cc::InputHandler::ScrollIgnored: 120 case cc::InputHandler::ScrollIgnored:
128 return DropEvent; 121 return EVENT_DISPOSITION_DROP_EVENT;
129 } 122 }
130 } else if (event.type == WebInputEvent::GestureScrollUpdate) { 123 } else if (event.type == WebInputEvent::GestureScrollUpdate) {
131 #ifndef NDEBUG 124 #ifndef NDEBUG
132 DCHECK(expect_scroll_update_end_); 125 DCHECK(expect_scroll_update_end_);
133 #endif 126 #endif
134 127
135 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_) 128 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_)
136 return DidNotHandle; 129 return EVENT_DISPOSITION_DID_NOT_HANDLE;
137 130
138 const WebGestureEvent& gesture_event = 131 const WebGestureEvent& gesture_event =
139 *static_cast<const WebGestureEvent*>(&event); 132 *static_cast<const WebGestureEvent*>(&event);
140 bool did_scroll = input_handler_->ScrollBy( 133 bool did_scroll = input_handler_->ScrollBy(
141 gfx::Point(gesture_event.x, gesture_event.y), 134 gfx::Point(gesture_event.x, gesture_event.y),
142 gfx::Vector2dF(-gesture_event.data.scrollUpdate.deltaX, 135 gfx::Vector2dF(-gesture_event.data.scrollUpdate.deltaX,
143 -gesture_event.data.scrollUpdate.deltaY)); 136 -gesture_event.data.scrollUpdate.deltaY));
144 return did_scroll ? DidHandle : DropEvent; 137 return did_scroll ? EVENT_DISPOSITION_DID_HANDLE
138 : EVENT_DISPOSITION_DROP_EVENT;
145 } else if (event.type == WebInputEvent::GestureScrollEnd) { 139 } else if (event.type == WebInputEvent::GestureScrollEnd) {
146 #ifndef NDEBUG 140 #ifndef NDEBUG
147 DCHECK(expect_scroll_update_end_); 141 DCHECK(expect_scroll_update_end_);
148 expect_scroll_update_end_ = false; 142 expect_scroll_update_end_ = false;
149 #endif 143 #endif
150 if (!gesture_scroll_on_impl_thread_) 144 if (!gesture_scroll_on_impl_thread_)
151 return DidNotHandle; 145 return EVENT_DISPOSITION_DID_NOT_HANDLE;
152 146
153 input_handler_->ScrollEnd(); 147 input_handler_->ScrollEnd();
154 gesture_scroll_on_impl_thread_ = false; 148 gesture_scroll_on_impl_thread_ = false;
155 return DidHandle; 149 return EVENT_DISPOSITION_DID_HANDLE;
156 } else if (event.type == WebInputEvent::GesturePinchBegin) { 150 } else if (event.type == WebInputEvent::GesturePinchBegin) {
157 #ifndef NDEBUG 151 #ifndef NDEBUG
158 DCHECK(!expect_pinch_update_end_); 152 DCHECK(!expect_pinch_update_end_);
159 expect_pinch_update_end_ = true; 153 expect_pinch_update_end_ = true;
160 #endif 154 #endif
161 input_handler_->PinchGestureBegin(); 155 input_handler_->PinchGestureBegin();
162 gesture_pinch_on_impl_thread_ = true; 156 gesture_pinch_on_impl_thread_ = true;
163 return DidHandle; 157 return EVENT_DISPOSITION_DID_HANDLE;
164 } else if (event.type == WebInputEvent::GesturePinchEnd) { 158 } else if (event.type == WebInputEvent::GesturePinchEnd) {
165 #ifndef NDEBUG 159 #ifndef NDEBUG
166 DCHECK(expect_pinch_update_end_); 160 DCHECK(expect_pinch_update_end_);
167 expect_pinch_update_end_ = false; 161 expect_pinch_update_end_ = false;
168 #endif 162 #endif
169 gesture_pinch_on_impl_thread_ = false; 163 gesture_pinch_on_impl_thread_ = false;
170 input_handler_->PinchGestureEnd(); 164 input_handler_->PinchGestureEnd();
171 return DidHandle; 165 return EVENT_DISPOSITION_DID_HANDLE;
172 } else if (event.type == WebInputEvent::GesturePinchUpdate) { 166 } else if (event.type == WebInputEvent::GesturePinchUpdate) {
173 #ifndef NDEBUG 167 #ifndef NDEBUG
174 DCHECK(expect_pinch_update_end_); 168 DCHECK(expect_pinch_update_end_);
175 #endif 169 #endif
176 const WebGestureEvent& gesture_event = 170 const WebGestureEvent& gesture_event =
177 *static_cast<const WebGestureEvent*>(&event); 171 *static_cast<const WebGestureEvent*>(&event);
178 input_handler_->PinchGestureUpdate( 172 input_handler_->PinchGestureUpdate(
179 gesture_event.data.pinchUpdate.scale, 173 gesture_event.data.pinchUpdate.scale,
180 gfx::Point(gesture_event.x, gesture_event.y)); 174 gfx::Point(gesture_event.x, gesture_event.y));
181 return DidHandle; 175 return EVENT_DISPOSITION_DID_HANDLE;
182 } else if (event.type == WebInputEvent::GestureFlingStart) { 176 } else if (event.type == WebInputEvent::GestureFlingStart) {
183 const WebGestureEvent& gesture_event = 177 const WebGestureEvent& gesture_event =
184 *static_cast<const WebGestureEvent*>(&event); 178 *static_cast<const WebGestureEvent*>(&event);
185 return HandleGestureFling(gesture_event); 179 return HandleGestureFling(gesture_event);
186 } else if (event.type == WebInputEvent::GestureFlingCancel) { 180 } else if (event.type == WebInputEvent::GestureFlingCancel) {
187 if (CancelCurrentFling()) 181 if (CancelCurrentFling())
188 return DidHandle; 182 return EVENT_DISPOSITION_DID_HANDLE;
189 else if (!fling_may_be_active_on_main_thread_) 183 else if (!fling_may_be_active_on_main_thread_)
190 return DropEvent; 184 return EVENT_DISPOSITION_DROP_EVENT;
191 } else if (event.type == WebInputEvent::TouchStart) { 185 } else if (event.type == WebInputEvent::TouchStart) {
192 const WebTouchEvent& touch_event = 186 const WebTouchEvent& touch_event =
193 *static_cast<const WebTouchEvent*>(&event); 187 *static_cast<const WebTouchEvent*>(&event);
194 if (!input_handler_->HaveTouchEventHandlersAt(touch_event.touches[0] 188 if (!input_handler_->HaveTouchEventHandlersAt(touch_event.touches[0]
195 .position)) 189 .position))
196 return DropEvent; 190 return EVENT_DISPOSITION_DROP_EVENT;
197 } else if (WebInputEvent::isKeyboardEventType(event.type)) { 191 } else if (WebInputEvent::isKeyboardEventType(event.type)) {
198 CancelCurrentFling(); 192 CancelCurrentFling();
199 } 193 }
200 194
201 return DidNotHandle; 195 return EVENT_DISPOSITION_DID_NOT_HANDLE;
202 } 196 }
203 197
204 InputHandlerProxy::EventDisposition 198 InputHandlerProxy::EventDisposition
205 InputHandlerProxy::HandleGestureFling( 199 InputHandlerProxy::HandleGestureFling(
206 const WebGestureEvent& gesture_event) { 200 const WebGestureEvent& gesture_event) {
207 cc::InputHandler::ScrollStatus scroll_status; 201 cc::InputHandler::ScrollStatus scroll_status;
208 202
209 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { 203 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) {
210 scroll_status = input_handler_->ScrollBegin( 204 scroll_status = input_handler_->ScrollBegin(
211 gfx::Point(gesture_event.x, gesture_event.y), 205 gfx::Point(gesture_event.x, gesture_event.y),
(...skipping 25 matching lines...) Expand all
237 this); 231 this);
238 fling_parameters_.delta = 232 fling_parameters_.delta =
239 WebFloatPoint(gesture_event.data.flingStart.velocityX, 233 WebFloatPoint(gesture_event.data.flingStart.velocityX,
240 gesture_event.data.flingStart.velocityY); 234 gesture_event.data.flingStart.velocityY);
241 fling_parameters_.point = WebPoint(gesture_event.x, gesture_event.y); 235 fling_parameters_.point = WebPoint(gesture_event.x, gesture_event.y);
242 fling_parameters_.globalPoint = 236 fling_parameters_.globalPoint =
243 WebPoint(gesture_event.globalX, gesture_event.globalY); 237 WebPoint(gesture_event.globalX, gesture_event.globalY);
244 fling_parameters_.modifiers = gesture_event.modifiers; 238 fling_parameters_.modifiers = gesture_event.modifiers;
245 fling_parameters_.sourceDevice = gesture_event.sourceDevice; 239 fling_parameters_.sourceDevice = gesture_event.sourceDevice;
246 input_handler_->ScheduleAnimation(); 240 input_handler_->ScheduleAnimation();
247 return DidHandle; 241 return EVENT_DISPOSITION_DID_HANDLE;
248 } 242 }
249 case cc::InputHandler::ScrollOnMainThread: { 243 case cc::InputHandler::ScrollOnMainThread: {
250 TRACE_EVENT_INSTANT0("renderer", 244 TRACE_EVENT_INSTANT0("renderer",
251 "InputHandlerProxy::HandleGestureFling::" 245 "InputHandlerProxy::HandleGestureFling::"
252 "scroll_on_main_thread", 246 "scroll_on_main_thread",
253 TRACE_EVENT_SCOPE_THREAD); 247 TRACE_EVENT_SCOPE_THREAD);
254 fling_may_be_active_on_main_thread_ = true; 248 fling_may_be_active_on_main_thread_ = true;
255 return DidNotHandle; 249 return EVENT_DISPOSITION_DID_NOT_HANDLE;
256 } 250 }
257 case cc::InputHandler::ScrollIgnored: { 251 case cc::InputHandler::ScrollIgnored: {
258 TRACE_EVENT_INSTANT0( 252 TRACE_EVENT_INSTANT0(
259 "renderer", 253 "renderer",
260 "InputHandlerProxy::HandleGestureFling::ignored", 254 "InputHandlerProxy::HandleGestureFling::ignored",
261 TRACE_EVENT_SCOPE_THREAD); 255 TRACE_EVENT_SCOPE_THREAD);
262 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { 256 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) {
263 // We still pass the curve to the main thread if there's nothing 257 // We still pass the curve to the main thread if there's nothing
264 // scrollable, in case something 258 // scrollable, in case something
265 // registers a handler before the curve is over. 259 // registers a handler before the curve is over.
266 return DidNotHandle; 260 return EVENT_DISPOSITION_DID_NOT_HANDLE;
267 } 261 }
268 return DropEvent; 262 return EVENT_DISPOSITION_DROP_EVENT;
269 } 263 }
270 } 264 }
271 return DidNotHandle; 265 return EVENT_DISPOSITION_DID_NOT_HANDLE;
272 } 266 }
273 267
274 void InputHandlerProxy::Animate(base::TimeTicks time) { 268 void InputHandlerProxy::Animate(base::TimeTicks time) {
275 if (!fling_curve_) 269 if (!fling_curve_)
276 return; 270 return;
277 271
278 double monotonic_time_sec = (time - base::TimeTicks()).InSecondsF(); 272 double monotonic_time_sec = (time - base::TimeTicks()).InSecondsF();
279 if (!fling_parameters_.startTime) { 273 if (!fling_parameters_.startTime) {
280 fling_parameters_.startTime = monotonic_time_sec; 274 fling_parameters_.startTime = monotonic_time_sec;
281 input_handler_->ScheduleAnimation(); 275 input_handler_->ScheduleAnimation();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 synthetic_wheel.hasPreciseScrollingDeltas = true; 328 synthetic_wheel.hasPreciseScrollingDeltas = true;
335 synthetic_wheel.x = fling_parameters_.point.x; 329 synthetic_wheel.x = fling_parameters_.point.x;
336 synthetic_wheel.y = fling_parameters_.point.y; 330 synthetic_wheel.y = fling_parameters_.point.y;
337 synthetic_wheel.globalX = fling_parameters_.globalPoint.x; 331 synthetic_wheel.globalX = fling_parameters_.globalPoint.x;
338 synthetic_wheel.globalY = fling_parameters_.globalPoint.y; 332 synthetic_wheel.globalY = fling_parameters_.globalPoint.y;
339 synthetic_wheel.modifiers = fling_parameters_.modifiers; 333 synthetic_wheel.modifiers = fling_parameters_.modifiers;
340 334
341 InputHandlerProxy::EventDisposition disposition = 335 InputHandlerProxy::EventDisposition disposition =
342 HandleInputEventInternal(synthetic_wheel); 336 HandleInputEventInternal(synthetic_wheel);
343 switch (disposition) { 337 switch (disposition) {
344 case DidHandle: 338 case EVENT_DISPOSITION_DID_HANDLE:
345 return true; 339 return true;
346 case DropEvent: 340 case EVENT_DISPOSITION_DROP_EVENT:
347 break; 341 break;
348 case DidNotHandle: 342 case EVENT_DISPOSITION_DID_NOT_HANDLE:
349 TRACE_EVENT_INSTANT0("renderer", 343 TRACE_EVENT_INSTANT0("renderer",
350 "InputHandlerProxy::scrollBy::AbortFling", 344 "InputHandlerProxy::scrollBy::AbortFling",
351 TRACE_EVENT_SCOPE_THREAD); 345 TRACE_EVENT_SCOPE_THREAD);
352 // If we got a DidNotHandle, that means we need to deliver wheels on the 346 // If we got a EVENT_DISPOSITION_DID_NOT_HANDLE, that means we need to
353 // main thread. In this case we need to schedule a commit and transfer the 347 // deliver wheels on the main thread. In this case we need to schedule a
354 // fling curve over to the main thread and run the rest of the wheels from 348 // commit and transfer the fling curve over to the main thread and run the
355 // there. This can happen when flinging a page that contains a scrollable 349 // rest of the wheels from there. This can happen when flinging a page
356 // subarea that we can't scroll on the thread if the fling starts outside 350 // that contains a scrollable subarea that we can't scroll on the thread
357 // the subarea but then is flung "under" the pointer. 351 // if the fling starts outside the subarea but then is flung "under" the
352 // pointer.
358 client_->TransferActiveWheelFlingAnimation(fling_parameters_); 353 client_->TransferActiveWheelFlingAnimation(fling_parameters_);
359 fling_may_be_active_on_main_thread_ = true; 354 fling_may_be_active_on_main_thread_ = true;
360 CancelCurrentFling(); 355 CancelCurrentFling();
361 break; 356 break;
362 } 357 }
363 358
364 return false; 359 return false;
365 } 360 }
366 361
367 static gfx::Vector2dF ToClientScrollIncrement(const WebFloatSize& increment) { 362 static gfx::Vector2dF ToClientScrollIncrement(const WebFloatSize& increment) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 TRACE_EVENT2("renderer", 397 TRACE_EVENT2("renderer",
403 "InputHandlerProxy::notifyCurrentFlingVelocity", 398 "InputHandlerProxy::notifyCurrentFlingVelocity",
404 "vx", 399 "vx",
405 velocity.width, 400 velocity.width,
406 "vy", 401 "vy",
407 velocity.height); 402 velocity.height);
408 input_handler_->NotifyCurrentFlingVelocity(ToClientScrollIncrement(velocity)); 403 input_handler_->NotifyCurrentFlingVelocity(ToClientScrollIncrement(velocity));
409 } 404 }
410 405
411 } // namespace content 406 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698