| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ | 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ |
| 6 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ | 6 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 virtual void SendGestureEventImmediately( | 33 virtual void SendGestureEventImmediately( |
| 34 const GestureEventWithLatencyInfo& event) = 0; | 34 const GestureEventWithLatencyInfo& event) = 0; |
| 35 | 35 |
| 36 virtual void OnGestureEventAck( | 36 virtual void OnGestureEventAck( |
| 37 const GestureEventWithLatencyInfo& event, | 37 const GestureEventWithLatencyInfo& event, |
| 38 InputEventAckState ack_result) = 0; | 38 InputEventAckState ack_result) = 0; |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 // Maintains WebGestureEvents in a queue before forwarding them to the renderer | 41 // Maintains WebGestureEvents in a queue before forwarding them to the renderer |
| 42 // to apply a sequence of filters on them: | 42 // to apply a sequence of filters on them: |
| 43 // 1. Zero-velocity fling-starts from touchpad are filtered. | 43 // 1. The sequence is filtered for bounces. A bounce is when the finger lifts |
| 44 // 2. The sequence is filtered for bounces. A bounce is when the finger lifts | |
| 45 // from the screen briefly during an in-progress scroll. Ifco this happens, | 44 // from the screen briefly during an in-progress scroll. Ifco this happens, |
| 46 // non-GestureScrollUpdate events are queued until the de-bounce interval | 45 // non-GestureScrollUpdate events are queued until the de-bounce interval |
| 47 // passes or another GestureScrollUpdate event occurs. | 46 // passes or another GestureScrollUpdate event occurs. |
| 48 // 3. Unnecessary GestureFlingCancel events are filtered. These are | 47 // 2. Unnecessary GestureFlingCancel events are filtered. These are |
| 49 // GestureFlingCancels that have no corresponding GestureFlingStart in the | 48 // GestureFlingCancels that have no corresponding GestureFlingStart in the |
| 50 // queue. | 49 // queue. |
| 51 // 4. Taps immediately after a GestureFlingCancel (caused by the same tap) are | 50 // 3. Taps immediately after a GestureFlingCancel (caused by the same tap) are |
| 52 // filtered. | 51 // filtered. |
| 53 // 5. Whenever possible, events in the queue are coalesced to have as few events | 52 // 4. Whenever possible, events in the queue are coalesced to have as few events |
| 54 // as possible and therefore maximize the chance that the event stream can be | 53 // as possible and therefore maximize the chance that the event stream can be |
| 55 // handled entirely by the compositor thread. | 54 // handled entirely by the compositor thread. |
| 56 // Events in the queue are forwarded to the renderer one by one; i.e., each | 55 // Events in the queue are forwarded to the renderer one by one; i.e., each |
| 57 // event is sent after receiving the ACK for previous one. The only exception is | 56 // event is sent after receiving the ACK for previous one. The only exception is |
| 58 // that if a GestureScrollUpdate is followed by a GesturePinchUpdate, they are | 57 // that if a GestureScrollUpdate is followed by a GesturePinchUpdate, they are |
| 59 // sent together. | 58 // sent together. |
| 60 // TODO(rjkroege): Possibly refactor into a filter chain: | 59 // TODO(rjkroege): Possibly refactor into a filter chain: |
| 61 // http://crbug.com/148443. | 60 // http://crbug.com/148443. |
| 62 class CONTENT_EXPORT GestureEventQueue { | 61 class CONTENT_EXPORT GestureEventQueue { |
| 63 public: | 62 public: |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 | 134 |
| 136 // Returns |true| if the only event in the queue is the current event and | 135 // Returns |true| if the only event in the queue is the current event and |
| 137 // hence that event should be handled now. | 136 // hence that event should be handled now. |
| 138 bool ShouldHandleEventNow() const; | 137 bool ShouldHandleEventNow() const; |
| 139 | 138 |
| 140 // Merge or append a GestureScrollUpdate or GesturePinchUpdate into | 139 // Merge or append a GestureScrollUpdate or GesturePinchUpdate into |
| 141 // the coalescing queue. | 140 // the coalescing queue. |
| 142 void MergeOrInsertScrollAndPinchEvent( | 141 void MergeOrInsertScrollAndPinchEvent( |
| 143 const GestureEventWithLatencyInfo& gesture_event); | 142 const GestureEventWithLatencyInfo& gesture_event); |
| 144 | 143 |
| 145 // Sub-filter for removing zero-velocity fling-starts from touchpad. | |
| 146 bool ShouldForwardForZeroVelocityFlingStart( | |
| 147 const GestureEventWithLatencyInfo& gesture_event) const; | |
| 148 | |
| 149 // Sub-filter for removing bounces from in-progress scrolls. | 144 // Sub-filter for removing bounces from in-progress scrolls. |
| 150 bool ShouldForwardForBounceReduction( | 145 bool ShouldForwardForBounceReduction( |
| 151 const GestureEventWithLatencyInfo& gesture_event); | 146 const GestureEventWithLatencyInfo& gesture_event); |
| 152 | 147 |
| 153 // Sub-filter for removing unnecessary GestureFlingCancels. | 148 // Sub-filter for removing unnecessary GestureFlingCancels. |
| 154 bool ShouldForwardForGFCFiltering( | 149 bool ShouldForwardForGFCFiltering( |
| 155 const GestureEventWithLatencyInfo& gesture_event) const; | 150 const GestureEventWithLatencyInfo& gesture_event) const; |
| 156 | 151 |
| 157 // Sub-filter for suppressing taps immediately after a GestureFlingCancel. | 152 // Sub-filter for suppressing taps immediately after a GestureFlingCancel. |
| 158 bool ShouldForwardForTapSuppression( | 153 bool ShouldForwardForTapSuppression( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 // Time window in which to debounce scroll/fling ends. Note that an interval | 221 // Time window in which to debounce scroll/fling ends. Note that an interval |
| 227 // of zero effectively disables debouncing. | 222 // of zero effectively disables debouncing. |
| 228 base::TimeDelta debounce_interval_; | 223 base::TimeDelta debounce_interval_; |
| 229 | 224 |
| 230 DISALLOW_COPY_AND_ASSIGN(GestureEventQueue); | 225 DISALLOW_COPY_AND_ASSIGN(GestureEventQueue); |
| 231 }; | 226 }; |
| 232 | 227 |
| 233 } // namespace content | 228 } // namespace content |
| 234 | 229 |
| 235 #endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ | 230 #endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_GESTURE_EVENT_QUEUE_H_ |
| OLD | NEW |