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

Side by Side Diff: content/browser/renderer_host/input/input_router_impl.cc

Issue 1780953003: Change the non-blocking event queue to the main thread event queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_regression_5
Patch Set: Fix android Created 4 years, 9 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/browser/renderer_host/input/input_router_impl.h" 5 #include "content/browser/renderer_host/input/input_router_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 OfferToHandlers(input_event, latency_info); 357 OfferToHandlers(input_event, latency_info);
358 } 358 }
359 359
360 void InputRouterImpl::OfferToHandlers(const WebInputEvent& input_event, 360 void InputRouterImpl::OfferToHandlers(const WebInputEvent& input_event,
361 const ui::LatencyInfo& latency_info) { 361 const ui::LatencyInfo& latency_info) {
362 output_stream_validator_.Validate(input_event); 362 output_stream_validator_.Validate(input_event);
363 363
364 if (OfferToClient(input_event, latency_info)) 364 if (OfferToClient(input_event, latency_info))
365 return; 365 return;
366 366
367 OfferToRenderer(input_event, latency_info);
368
369 // Touch events should always indicate in the event whether they are 367 // Touch events should always indicate in the event whether they are
370 // cancelable (respect ACK disposition) or not except touchmove. 368 // cancelable (respect ACK disposition) or not except touchmove.
371 bool needs_synthetic_ack = 369 bool should_block = WebInputEventTraits::ShouldBlockEventStream(input_event);
372 !WebInputEventTraits::WillReceiveAckFromRenderer(input_event); 370
371 OfferToRenderer(input_event, latency_info,
372 should_block
373 ? InputEventDispatchType::DISPATCH_TYPE_BLOCKING
374 : InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING);
373 375
374 if (WebInputEvent::isTouchEventType(input_event.type) && 376 if (WebInputEvent::isTouchEventType(input_event.type) &&
375 input_event.type != WebInputEvent::TouchMove) { 377 input_event.type != WebInputEvent::TouchMove) {
376 const WebTouchEvent& touch = static_cast<const WebTouchEvent&>(input_event); 378 const WebTouchEvent& touch = static_cast<const WebTouchEvent&>(input_event);
377 DCHECK_EQ(needs_synthetic_ack, !touch.cancelable); 379 DCHECK_EQ(should_block, touch.cancelable);
378 } 380 }
379 381
380 // The synthetic acks are sent immediately. 382 // Generate a synthetic ack if the event was sent so it doesn't block.
381 if (needs_synthetic_ack) { 383 if (!should_block) {
382 ProcessInputEventAck( 384 ProcessInputEventAck(
383 input_event.type, INPUT_EVENT_ACK_STATE_IGNORED, latency_info, 385 input_event.type, INPUT_EVENT_ACK_STATE_IGNORED, latency_info,
384 WebInputEventTraits::GetUniqueTouchEventId(input_event), 386 WebInputEventTraits::GetUniqueTouchEventId(input_event),
385 IGNORING_DISPOSITION); 387 IGNORING_DISPOSITION);
386 } 388 }
387 } 389 }
388 390
389 bool InputRouterImpl::OfferToClient(const WebInputEvent& input_event, 391 bool InputRouterImpl::OfferToClient(const WebInputEvent& input_event,
390 const ui::LatencyInfo& latency_info) { 392 const ui::LatencyInfo& latency_info) {
391 bool consumed = false; 393 bool consumed = false;
(...skipping 16 matching lines...) Expand all
408 consumed = true; 410 consumed = true;
409 break; 411 break;
410 default: 412 default:
411 break; 413 break;
412 } 414 }
413 415
414 return consumed; 416 return consumed;
415 } 417 }
416 418
417 bool InputRouterImpl::OfferToRenderer(const WebInputEvent& input_event, 419 bool InputRouterImpl::OfferToRenderer(const WebInputEvent& input_event,
418 const ui::LatencyInfo& latency_info) { 420 const ui::LatencyInfo& latency_info,
421 InputEventDispatchType dispatch_type) {
419 // This conversion is temporary. WebInputEvent should be generated 422 // This conversion is temporary. WebInputEvent should be generated
420 // directly from ui::Event with the viewport coordinates. See 423 // directly from ui::Event with the viewport coordinates. See
421 // crbug.com/563730. 424 // crbug.com/563730.
422 scoped_ptr<blink::WebInputEvent> event_in_viewport = 425 scoped_ptr<blink::WebInputEvent> event_in_viewport =
423 ui::ScaleWebInputEvent(input_event, device_scale_factor_); 426 ui::ScaleWebInputEvent(input_event, device_scale_factor_);
424 const WebInputEvent* event_to_send = 427 const WebInputEvent* event_to_send =
425 event_in_viewport ? event_in_viewport.get() : &input_event; 428 event_in_viewport ? event_in_viewport.get() : &input_event;
426 429
427 if (Send(new InputMsg_HandleInputEvent( 430 if (Send(new InputMsg_HandleInputEvent(routing_id(), event_to_send,
428 routing_id(), event_to_send, latency_info, 431 latency_info, dispatch_type))) {
429 InputEventDispatchType::DISPATCH_TYPE_NORMAL))) {
430 // Ack messages for ignored ack event types should never be sent by the 432 // Ack messages for ignored ack event types should never be sent by the
431 // renderer. Consequently, such event types should not affect event time 433 // renderer. Consequently, such event types should not affect event time
432 // or in-flight event count metrics. 434 // or in-flight event count metrics.
433 if (WebInputEventTraits::WillReceiveAckFromRenderer(*event_to_send)) { 435 if (dispatch_type == InputEventDispatchType::DISPATCH_TYPE_BLOCKING) {
434 input_event_start_time_ = TimeTicks::Now(); 436 input_event_start_time_ = TimeTicks::Now();
435 client_->IncrementInFlightEventCount(); 437 client_->IncrementInFlightEventCount();
436 } 438 }
437 return true; 439 return true;
438 } 440 }
439 return false; 441 return false;
440 } 442 }
441 443
442 void InputRouterImpl::OnInputEventAck(const InputEventAck& ack) { 444 void InputRouterImpl::OnInputEventAck(const InputEventAck& ack) {
443 client_->DecrementInFlightEventCount(); 445 client_->DecrementInFlightEventCount();
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 638
637 flush_requested_ = false; 639 flush_requested_ = false;
638 client_->DidFlush(); 640 client_->DidFlush();
639 } 641 }
640 642
641 void InputRouterImpl::SetFrameTreeNodeId(int frameTreeNodeId) { 643 void InputRouterImpl::SetFrameTreeNodeId(int frameTreeNodeId) {
642 frame_tree_node_id_ = frameTreeNodeId; 644 frame_tree_node_id_ = frameTreeNodeId;
643 } 645 }
644 646
645 } // namespace content 647 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698