Chromium Code Reviews| Index: content/renderer/input/passive_event_queue.cc |
| diff --git a/content/renderer/input/passive_event_queue.cc b/content/renderer/input/passive_event_queue.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6120e4b05e3ee76f884333826ba4bca4fdfefb89 |
| --- /dev/null |
| +++ b/content/renderer/input/passive_event_queue.cc |
| @@ -0,0 +1,70 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/renderer/input/passive_event_queue.h" |
| + |
| +namespace content { |
| + |
| +PassiveEventQueue::PassiveEventQueue(int routing_id, |
| + PassiveEventQueueClient* client) |
| + : routing_id_(routing_id), client_(client) {} |
| + |
| +PassiveEventQueue::~PassiveEventQueue() {} |
| + |
| +void PassiveEventQueue::HandleNonBlockingEvent( |
| + const blink::WebInputEvent* event, |
| + const ui::LatencyInfo& latency) { |
| + if (event->type == blink::WebInputEvent::MouseWheel) { |
| + if (wheel_events_.state() == |
| + WebInputEventQueue< |
| + MouseWheelEventWithLatencyInfo>::State::ITEM_PENDING) { |
| + wheel_events_.Queue(MouseWheelEventWithLatencyInfo( |
|
Rick Byers
2016/01/26 19:17:21
I think you'll need to coalesce events somewhere j
Rick Byers
2016/01/26 19:20:52
Oh, I see it now in WebInputEventQueue. That clas
|
| + *static_cast<const blink::WebMouseWheelEvent*>(event), latency)); |
| + } else { |
| + wheel_events_.set_state( |
| + WebInputEventQueue< |
| + MouseWheelEventWithLatencyInfo>::State::ITEM_PENDING); |
| + client_->SendPassiveEvent(routing_id_, event, latency); |
| + } |
| + } else if (blink::WebInputEvent::isTouchEventType(event->type)) { |
| + if (touch_events_.state() == |
| + WebInputEventQueue<TouchEventWithLatencyInfo>::State::ITEM_PENDING) { |
| + touch_events_.Queue(TouchEventWithLatencyInfo( |
| + *static_cast<const blink::WebTouchEvent*>(event), latency)); |
| + } else { |
| + touch_events_.set_state( |
| + WebInputEventQueue<TouchEventWithLatencyInfo>::State::ITEM_PENDING); |
| + client_->SendPassiveEvent(routing_id_, event, latency); |
| + } |
| + } else { |
| + NOTREACHED() << "Invalid passive event type"; |
| + } |
| +} |
| + |
| +void PassiveEventQueue::EventHandled(blink::WebInputEvent::Type type) { |
| + if (type == blink::WebInputEvent::MouseWheel) { |
| + if (!wheel_events_.empty()) { |
| + scoped_ptr<MouseWheelEventWithLatencyInfo> event = wheel_events_.Deque(); |
| + |
| + client_->SendPassiveEvent(routing_id_, &event->event, event->latency); |
| + } else { |
| + wheel_events_.set_state( |
| + WebInputEventQueue< |
| + MouseWheelEventWithLatencyInfo>::State::ITEM_NOT_PENDING); |
| + } |
| + } else if (blink::WebInputEvent::isTouchEventType(type)) { |
| + if (!touch_events_.empty()) { |
| + scoped_ptr<TouchEventWithLatencyInfo> event = touch_events_.Deque(); |
| + client_->SendPassiveEvent(routing_id_, &event->event, event->latency); |
| + } else { |
| + touch_events_.set_state( |
| + WebInputEventQueue< |
| + TouchEventWithLatencyInfo>::State::ITEM_NOT_PENDING); |
| + } |
| + } else { |
| + NOTREACHED() << "Invalid passive event type"; |
| + } |
| +} |
| + |
| +} // namespace content |