| Index: content/browser/renderer_host/render_widget_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
|
| index c0196dee6140393cb403eaa4d5a7b024e484e1c2..f378a26e4c57ce18ce58914b42f9f38973ceeb98 100644
|
| --- a/content/browser/renderer_host/render_widget_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
| @@ -964,22 +964,41 @@ void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo(
|
| input_router_->SendGestureEvent(gesture_with_latency);
|
| }
|
|
|
| -void RenderWidgetHostImpl::ForwardTouchEvent(
|
| +void RenderWidgetHostImpl::ForwardEmulatedTouchEvent(
|
| const blink::WebTouchEvent& touch_event) {
|
| - ForwardTouchEventWithLatencyInfo(touch_event, ui::LatencyInfo());
|
| + ForwardTouchEventWithLatencyInfoFromStream(
|
| + touch_event, ui::LatencyInfo(), TouchStreamTracker::EMULATED_STREAM);
|
| }
|
|
|
| void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo(
|
| const blink::WebTouchEvent& touch_event,
|
| const ui::LatencyInfo& ui_latency) {
|
| + ForwardTouchEventWithLatencyInfoFromStream(
|
| + touch_event, ui_latency, TouchStreamTracker::NATIVE_STREAM);
|
| +}
|
| +
|
| +void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfoFromStream(
|
| + const blink::WebTouchEvent& touch_event,
|
| + const ui::LatencyInfo& ui_latency,
|
| + TouchStreamTracker::TouchStream stream) {
|
| TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent");
|
|
|
| - // Always forward TouchEvents for touch stream consistency. They will be
|
| - // ignored if appropriate in FilterInputEvent().
|
| + // Always forward TouchEvents from active touch stream for consistency.
|
| + // They will be ignored if appropriate in FilterInputEvent().
|
|
|
| ui::LatencyInfo latency_info =
|
| CreateRWHLatencyInfoIfNotExist(&ui_latency, touch_event.type);
|
| TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info);
|
| +
|
| + if (touch_stream_tracker_) {
|
| + InputEventAckState ack_result =
|
| + touch_stream_tracker_->FilterTouchEventFromStream(touch_event, stream);
|
| + if (ack_result != INPUT_EVENT_ACK_STATE_UNKNOWN) {
|
| + OnTouchEventAckFromStream(touch_with_latency, ack_result, stream);
|
| + return;
|
| + }
|
| + }
|
| +
|
| input_router_->SendTouchEvent(touch_with_latency);
|
| }
|
|
|
| @@ -1629,8 +1648,10 @@ void RenderWidgetHostImpl::OnSetTouchEventEmulationEnabled(
|
| delegate_->OnTouchEmulationEnabled(enabled);
|
|
|
| if (enabled) {
|
| - if (!touch_emulator_)
|
| + if (!touch_emulator_) {
|
| + touch_stream_tracker_.reset(new TouchStreamTracker());
|
| touch_emulator_.reset(new TouchEmulator(this));
|
| + }
|
| touch_emulator_->Enable(allow_pinch);
|
| } else {
|
| if (touch_emulator_)
|
| @@ -1891,6 +1912,16 @@ void RenderWidgetHostImpl::OnGestureEventAck(
|
| void RenderWidgetHostImpl::OnTouchEventAck(
|
| const TouchEventWithLatencyInfo& event,
|
| InputEventAckState ack_result) {
|
| + TouchStreamTracker::TouchStream stream = TouchStreamTracker::NATIVE_STREAM;
|
| + if (touch_stream_tracker_)
|
| + stream = touch_stream_tracker_->OnTouchEventAck(event, ack_result);
|
| + OnTouchEventAckFromStream(event, ack_result, stream);
|
| +}
|
| +
|
| +void RenderWidgetHostImpl::OnTouchEventAckFromStream(
|
| + const TouchEventWithLatencyInfo& event,
|
| + InputEventAckState ack_result,
|
| + TouchStreamTracker::TouchStream stream) {
|
| TouchEventWithLatencyInfo touch_event = event;
|
| touch_event.latency.AddLatencyNumber(
|
| ui::INPUT_EVENT_LATENCY_ACKED_TOUCH_COMPONENT, 0, 0);
|
| @@ -1902,9 +1933,13 @@ void RenderWidgetHostImpl::OnTouchEventAck(
|
| }
|
| ComputeTouchLatency(touch_event.latency);
|
|
|
| - if (touch_emulator_ && touch_emulator_->HandleTouchEventAck(ack_result))
|
| + if (stream == TouchStreamTracker::EMULATED_STREAM) {
|
| + DCHECK(touch_emulator_);
|
| + touch_emulator_->HandleTouchEventAck(ack_result);
|
| return;
|
| + }
|
|
|
| + DCHECK(stream == TouchStreamTracker::NATIVE_STREAM);
|
| if (view_)
|
| view_->ProcessAckedTouchEvent(touch_event, ack_result);
|
| }
|
|
|