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

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

Issue 63253002: Rename WebKit namespace to blink (part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
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/touch_event_queue.h" 5 #include "content/browser/renderer_host/input/touch_event_queue.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 10
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 touch_queue_.push_back(new CoalescedWebTouchEvent(event)); 113 touch_queue_.push_back(new CoalescedWebTouchEvent(event));
114 } 114 }
115 115
116 void TouchEventQueue::ProcessTouchAck(InputEventAckState ack_result, 116 void TouchEventQueue::ProcessTouchAck(InputEventAckState ack_result,
117 const ui::LatencyInfo& latency_info) { 117 const ui::LatencyInfo& latency_info) {
118 DCHECK(!dispatching_touch_ack_); 118 DCHECK(!dispatching_touch_ack_);
119 if (touch_queue_.empty()) 119 if (touch_queue_.empty())
120 return; 120 return;
121 121
122 // Update the ACK status for each touch point in the ACKed event. 122 // Update the ACK status for each touch point in the ACKed event.
123 const WebKit::WebTouchEvent& event = 123 const blink::WebTouchEvent& event =
124 touch_queue_.front()->coalesced_event().event; 124 touch_queue_.front()->coalesced_event().event;
125 if (event.type == WebKit::WebInputEvent::TouchEnd || 125 if (event.type == blink::WebInputEvent::TouchEnd ||
126 event.type == WebKit::WebInputEvent::TouchCancel) { 126 event.type == blink::WebInputEvent::TouchCancel) {
127 // The points have been released. Erase the ACK states. 127 // The points have been released. Erase the ACK states.
128 for (unsigned i = 0; i < event.touchesLength; ++i) { 128 for (unsigned i = 0; i < event.touchesLength; ++i) {
129 const WebKit::WebTouchPoint& point = event.touches[i]; 129 const blink::WebTouchPoint& point = event.touches[i];
130 if (point.state == WebKit::WebTouchPoint::StateReleased || 130 if (point.state == blink::WebTouchPoint::StateReleased ||
131 point.state == WebKit::WebTouchPoint::StateCancelled) 131 point.state == blink::WebTouchPoint::StateCancelled)
132 touch_ack_states_.erase(point.id); 132 touch_ack_states_.erase(point.id);
133 } 133 }
134 } else if (event.type == WebKit::WebInputEvent::TouchStart) { 134 } else if (event.type == blink::WebInputEvent::TouchStart) {
135 for (unsigned i = 0; i < event.touchesLength; ++i) { 135 for (unsigned i = 0; i < event.touchesLength; ++i) {
136 const WebKit::WebTouchPoint& point = event.touches[i]; 136 const blink::WebTouchPoint& point = event.touches[i];
137 if (point.state == WebKit::WebTouchPoint::StatePressed) 137 if (point.state == blink::WebTouchPoint::StatePressed)
138 touch_ack_states_[point.id] = ack_result; 138 touch_ack_states_[point.id] = ack_result;
139 } 139 }
140 } 140 }
141 141
142 PopTouchEventToClient(ack_result, latency_info); 142 PopTouchEventToClient(ack_result, latency_info);
143 TryForwardNextEventToRenderer(); 143 TryForwardNextEventToRenderer();
144 } 144 }
145 145
146 void TouchEventQueue::TryForwardNextEventToRenderer() { 146 void TouchEventQueue::TryForwardNextEventToRenderer() {
147 DCHECK(!dispatching_touch_ack_); 147 DCHECK(!dispatching_touch_ack_);
148 // If there are queued touch events, then try to forward them to the renderer 148 // If there are queued touch events, then try to forward them to the renderer
149 // immediately, or ACK the events back to the client if appropriate. 149 // immediately, or ACK the events back to the client if appropriate.
150 while (!touch_queue_.empty()) { 150 while (!touch_queue_.empty()) {
151 const TouchEventWithLatencyInfo& touch = 151 const TouchEventWithLatencyInfo& touch =
152 touch_queue_.front()->coalesced_event(); 152 touch_queue_.front()->coalesced_event();
153 if (ShouldForwardToRenderer(touch.event)) { 153 if (ShouldForwardToRenderer(touch.event)) {
154 client_->SendTouchEventImmediately(touch); 154 client_->SendTouchEventImmediately(touch);
155 break; 155 break;
156 } 156 }
157 PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, 157 PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
158 ui::LatencyInfo()); 158 ui::LatencyInfo());
159 } 159 }
160 } 160 }
161 161
162 void TouchEventQueue::OnGestureScrollEvent( 162 void TouchEventQueue::OnGestureScrollEvent(
163 const GestureEventWithLatencyInfo& gesture_event) { 163 const GestureEventWithLatencyInfo& gesture_event) {
164 WebKit::WebInputEvent::Type type = gesture_event.event.type; 164 blink::WebInputEvent::Type type = gesture_event.event.type;
165 if (type == WebKit::WebInputEvent::GestureScrollBegin) { 165 if (type == blink::WebInputEvent::GestureScrollBegin) {
166 // We assume the scroll event are generated synchronously from 166 // We assume the scroll event are generated synchronously from
167 // dispatching a touch event ack, so that we can fake a cancel 167 // dispatching a touch event ack, so that we can fake a cancel
168 // event that has the correct touch ids as the touch event that 168 // event that has the correct touch ids as the touch event that
169 // is being acked. If not, we don't do the touch-cancel optimization. 169 // is being acked. If not, we don't do the touch-cancel optimization.
170 if (no_touch_to_renderer_ || !dispatching_touch_ack_) 170 if (no_touch_to_renderer_ || !dispatching_touch_ack_)
171 return; 171 return;
172 no_touch_to_renderer_ = true; 172 no_touch_to_renderer_ = true;
173 // Fake a TouchCancel to cancel the touch points of the touch event 173 // Fake a TouchCancel to cancel the touch points of the touch event
174 // that is currently being acked. 174 // that is currently being acked.
175 TouchEventWithLatencyInfo cancel_event = 175 TouchEventWithLatencyInfo cancel_event =
176 dispatching_touch_ack_->coalesced_event(); 176 dispatching_touch_ack_->coalesced_event();
177 cancel_event.event.type = WebKit::WebInputEvent::TouchCancel; 177 cancel_event.event.type = blink::WebInputEvent::TouchCancel;
178 for (size_t i = 0; i < cancel_event.event.touchesLength; i++) 178 for (size_t i = 0; i < cancel_event.event.touchesLength; i++)
179 cancel_event.event.touches[i].state = 179 cancel_event.event.touches[i].state =
180 WebKit::WebTouchPoint::StateCancelled; 180 blink::WebTouchPoint::StateCancelled;
181 CoalescedWebTouchEvent* coalesced_cancel_event = 181 CoalescedWebTouchEvent* coalesced_cancel_event =
182 new CoalescedWebTouchEvent(cancel_event); 182 new CoalescedWebTouchEvent(cancel_event);
183 // Ignore the ack of the touch cancel so when it is acked, it won't get 183 // Ignore the ack of the touch cancel so when it is acked, it won't get
184 // sent to gesture recognizer. 184 // sent to gesture recognizer.
185 coalesced_cancel_event->set_ignore_ack(true); 185 coalesced_cancel_event->set_ignore_ack(true);
186 // |dispatching_touch_ack_| is non-null when we reach here, meaning we 186 // |dispatching_touch_ack_| is non-null when we reach here, meaning we
187 // are in the scope of PopTouchEventToClient() and that no touch event 187 // are in the scope of PopTouchEventToClient() and that no touch event
188 // in the queue is waiting for ack from renderer. So we can just insert 188 // in the queue is waiting for ack from renderer. So we can just insert
189 // the touch cancel at the beginning of the queue. 189 // the touch cancel at the beginning of the queue.
190 touch_queue_.push_front(coalesced_cancel_event); 190 touch_queue_.push_front(coalesced_cancel_event);
191 } else if (type == WebKit::WebInputEvent::GestureScrollEnd || 191 } else if (type == blink::WebInputEvent::GestureScrollEnd ||
192 type == WebKit::WebInputEvent::GestureFlingStart) { 192 type == blink::WebInputEvent::GestureFlingStart) {
193 no_touch_to_renderer_ = false; 193 no_touch_to_renderer_ = false;
194 } 194 }
195 } 195 }
196 196
197 void TouchEventQueue::FlushQueue() { 197 void TouchEventQueue::FlushQueue() {
198 DCHECK(!dispatching_touch_ack_); 198 DCHECK(!dispatching_touch_ack_);
199 while (!touch_queue_.empty()) 199 while (!touch_queue_.empty())
200 PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, 200 PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
201 ui::LatencyInfo()); 201 ui::LatencyInfo());
202 } 202 }
(...skipping 24 matching lines...) Expand all
227 227
228 for (WebTouchEventWithLatencyList::iterator iter = acked_event->begin(), 228 for (WebTouchEventWithLatencyList::iterator iter = acked_event->begin(),
229 end = acked_event->end(); 229 end = acked_event->end();
230 iter != end; ++iter) { 230 iter != end; ++iter) {
231 iter->latency.AddNewLatencyFrom(renderer_latency_info); 231 iter->latency.AddNewLatencyFrom(renderer_latency_info);
232 client_->OnTouchEventAck((*iter), ack_result); 232 client_->OnTouchEventAck((*iter), ack_result);
233 } 233 }
234 } 234 }
235 235
236 bool TouchEventQueue::ShouldForwardToRenderer( 236 bool TouchEventQueue::ShouldForwardToRenderer(
237 const WebKit::WebTouchEvent& event) const { 237 const blink::WebTouchEvent& event) const {
238 if (no_touch_to_renderer_ && 238 if (no_touch_to_renderer_ &&
239 event.type != WebKit::WebInputEvent::TouchCancel) 239 event.type != blink::WebInputEvent::TouchCancel)
240 return false; 240 return false;
241 241
242 // Touch press events should always be forwarded to the renderer. 242 // Touch press events should always be forwarded to the renderer.
243 if (event.type == WebKit::WebInputEvent::TouchStart) 243 if (event.type == blink::WebInputEvent::TouchStart)
244 return true; 244 return true;
245 245
246 for (unsigned int i = 0; i < event.touchesLength; ++i) { 246 for (unsigned int i = 0; i < event.touchesLength; ++i) {
247 const WebKit::WebTouchPoint& point = event.touches[i]; 247 const blink::WebTouchPoint& point = event.touches[i];
248 // If a point has been stationary, then don't take it into account. 248 // If a point has been stationary, then don't take it into account.
249 if (point.state == WebKit::WebTouchPoint::StateStationary) 249 if (point.state == blink::WebTouchPoint::StateStationary)
250 continue; 250 continue;
251 251
252 if (touch_ack_states_.count(point.id) > 0) { 252 if (touch_ack_states_.count(point.id) > 0) {
253 if (touch_ack_states_.find(point.id)->second != 253 if (touch_ack_states_.find(point.id)->second !=
254 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) 254 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS)
255 return true; 255 return true;
256 } else { 256 } else {
257 // If the ACK status of a point is unknown, then the event should be 257 // If the ACK status of a point is unknown, then the event should be
258 // forwarded to the renderer. 258 // forwarded to the renderer.
259 return true; 259 return true;
260 } 260 }
261 } 261 }
262 262
263 return false; 263 return false;
264 } 264 }
265 265
266 } // namespace content 266 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698