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

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

Issue 1003023002: Signal input flush when all flings have terminated (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test compile Created 5 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 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 #include <vector> 5 #include <vector>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 } 166 }
167 167
168 WebGestureEvent GestureEventQueueEventAt(int i) { 168 WebGestureEvent GestureEventQueueEventAt(int i) {
169 return queue()->coalesced_gesture_events_.at(i).event; 169 return queue()->coalesced_gesture_events_.at(i).event;
170 } 170 }
171 171
172 bool ScrollingInProgress() { 172 bool ScrollingInProgress() {
173 return queue()->scrolling_in_progress_; 173 return queue()->scrolling_in_progress_;
174 } 174 }
175 175
176 bool FlingInProgress() { 176 int ActiveFlingCount() { return queue()->active_fling_count_; }
177 return queue()->fling_in_progress_;
178 }
179 177
180 bool WillIgnoreNextACK() { 178 bool WillIgnoreNextACK() {
181 return queue()->ignore_next_ack_; 179 return queue()->ignore_next_ack_;
182 } 180 }
183 181
184 GestureEventQueue* queue() const { 182 GestureEventQueue* queue() const {
185 return queue_.get(); 183 return queue_.get();
186 } 184 }
187 185
188 private: 186 private:
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 953
956 #if GTEST_HAS_PARAM_TEST 954 #if GTEST_HAS_PARAM_TEST
957 TEST_P(GestureEventQueueWithSourceTest, GestureFlingCancelsFiltered) { 955 TEST_P(GestureEventQueueWithSourceTest, GestureFlingCancelsFiltered) {
958 WebGestureDevice source_device = GetParam(); 956 WebGestureDevice source_device = GetParam();
959 957
960 // GFC without previous GFS is dropped. 958 // GFC without previous GFS is dropped.
961 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 959 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
962 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); 960 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
963 EXPECT_EQ(0U, GestureEventQueueSize()); 961 EXPECT_EQ(0U, GestureEventQueueSize());
964 962
963 // GFC after unconsumed fling is dropped.
964 SimulateGestureEvent(WebInputEvent::GestureFlingStart, source_device);
965 SendInputEventACK(WebInputEvent::GestureFlingStart,
966 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
967 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
968 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
969 EXPECT_EQ(0U, GestureEventQueueSize());
970 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
971 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
972 EXPECT_EQ(0U, GestureEventQueueSize());
973
974 // GFC after fling has ended is dropped.
975 SimulateGestureEvent(WebInputEvent::GestureFlingStart, source_device);
976 SendInputEventACK(WebInputEvent::GestureFlingStart,
977 INPUT_EVENT_ACK_STATE_CONSUMED);
978 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
979 EXPECT_EQ(0U, GestureEventQueueSize());
980 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
981
982 EXPECT_EQ(1, ActiveFlingCount());
983 queue()->DidStopFlinging();
984 EXPECT_EQ(0, ActiveFlingCount());
985
986 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
987 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
988 EXPECT_EQ(0U, GestureEventQueueSize());
989
965 // GFC after previous GFS is dispatched and acked. 990 // GFC after previous GFS is dispatched and acked.
966 SimulateGestureFlingStartEvent(0, -10, source_device); 991 SimulateGestureFlingStartEvent(0, -10, source_device);
967 EXPECT_TRUE(FlingInProgress());
968 SendInputEventACK(WebInputEvent::GestureFlingStart, 992 SendInputEventACK(WebInputEvent::GestureFlingStart,
969 INPUT_EVENT_ACK_STATE_CONSUMED); 993 INPUT_EVENT_ACK_STATE_CONSUMED);
994 EXPECT_EQ(1, ActiveFlingCount());
970 RunUntilIdle(); 995 RunUntilIdle();
971 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); 996 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
972 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 997 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
973 EXPECT_FALSE(FlingInProgress()); 998 queue()->DidStopFlinging();
999 EXPECT_EQ(0, ActiveFlingCount());
974 EXPECT_EQ(2U, GetAndResetSentGestureEventCount()); 1000 EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
975 SendInputEventACK(WebInputEvent::GestureFlingCancel, 1001 SendInputEventACK(WebInputEvent::GestureFlingCancel,
976 INPUT_EVENT_ACK_STATE_CONSUMED); 1002 INPUT_EVENT_ACK_STATE_CONSUMED);
977 RunUntilIdle(); 1003 RunUntilIdle();
978 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); 1004 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
979 EXPECT_EQ(0U, GestureEventQueueSize()); 1005 EXPECT_EQ(0U, GestureEventQueueSize());
980 1006
981 // GFC before previous GFS is acked. 1007 // GFC before previous GFS is acked.
982 SimulateGestureFlingStartEvent(0, -10, source_device); 1008 SimulateGestureFlingStartEvent(0, -10, source_device);
983 EXPECT_TRUE(FlingInProgress());
984 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 1009 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
985 EXPECT_FALSE(FlingInProgress());
986 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); 1010 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
987 EXPECT_EQ(2U, GestureEventQueueSize()); 1011 EXPECT_EQ(2U, GestureEventQueueSize());
988 1012
989 // Advance state realistically. 1013 // Advance state realistically.
990 SendInputEventACK(WebInputEvent::GestureFlingStart, 1014 SendInputEventACK(WebInputEvent::GestureFlingStart,
991 INPUT_EVENT_ACK_STATE_CONSUMED); 1015 INPUT_EVENT_ACK_STATE_CONSUMED);
992 RunUntilIdle(); 1016 RunUntilIdle();
993 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); 1017 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
994 SendInputEventACK(WebInputEvent::GestureFlingCancel, 1018 SendInputEventACK(WebInputEvent::GestureFlingCancel,
995 INPUT_EVENT_ACK_STATE_CONSUMED); 1019 INPUT_EVENT_ACK_STATE_CONSUMED);
996 RunUntilIdle(); 1020 RunUntilIdle();
997 EXPECT_EQ(2U, GetAndResetAckedGestureEventCount()); 1021 EXPECT_EQ(2U, GetAndResetAckedGestureEventCount());
998 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); 1022 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
999 EXPECT_EQ(0U, GestureEventQueueSize()); 1023 EXPECT_EQ(0U, GestureEventQueueSize());
1000 1024
1001 // GFS is added to the queue if another event is pending 1025 // GFS is added to the queue if another event is pending
1002 SimulateGestureScrollUpdateEvent(8, -7, 0); 1026 SimulateGestureScrollUpdateEvent(8, -7, 0);
1003 SimulateGestureFlingStartEvent(0, -10, source_device); 1027 SimulateGestureFlingStartEvent(0, -10, source_device);
1004 EXPECT_EQ(2U, GestureEventQueueSize()); 1028 EXPECT_EQ(2U, GestureEventQueueSize());
1005 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); 1029 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
1006 WebGestureEvent merged_event = GestureEventLastQueueEvent(); 1030 WebGestureEvent merged_event = GestureEventLastQueueEvent();
1007 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); 1031 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
1008 EXPECT_TRUE(FlingInProgress());
1009 EXPECT_EQ(2U, GestureEventQueueSize()); 1032 EXPECT_EQ(2U, GestureEventQueueSize());
1010 1033
1011 // GFS in queue means that a GFC is added to the queue 1034 // GFS in queue means that a GFC is added to the queue
1012 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 1035 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1013 merged_event =GestureEventLastQueueEvent(); 1036 merged_event =GestureEventLastQueueEvent();
1014 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 1037 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
1015 EXPECT_FALSE(FlingInProgress());
1016 EXPECT_EQ(3U, GestureEventQueueSize()); 1038 EXPECT_EQ(3U, GestureEventQueueSize());
1017 1039
1018 // Adding a second GFC is dropped. 1040 // Adding a second GFC is dropped.
1019 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 1041 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1020 EXPECT_FALSE(FlingInProgress());
1021 EXPECT_EQ(3U, GestureEventQueueSize()); 1042 EXPECT_EQ(3U, GestureEventQueueSize());
1022 1043
1023 // Adding another GFS will add it to the queue. 1044 // Adding another GFS will add it to the queue.
1024 SimulateGestureFlingStartEvent(0, -10, source_device); 1045 SimulateGestureFlingStartEvent(0, -10, source_device);
1025 merged_event = GestureEventLastQueueEvent(); 1046 merged_event = GestureEventLastQueueEvent();
1026 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); 1047 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
1027 EXPECT_TRUE(FlingInProgress());
1028 EXPECT_EQ(4U, GestureEventQueueSize()); 1048 EXPECT_EQ(4U, GestureEventQueueSize());
1029 1049
1030 // GFS in queue means that a GFC is added to the queue 1050 // GFS in queue means that a GFC is added to the queue
1031 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 1051 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1032 merged_event = GestureEventLastQueueEvent(); 1052 merged_event = GestureEventLastQueueEvent();
1033 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 1053 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
1034 EXPECT_FALSE(FlingInProgress());
1035 EXPECT_EQ(5U, GestureEventQueueSize()); 1054 EXPECT_EQ(5U, GestureEventQueueSize());
1036 1055
1037 // Adding another GFC with a GFC already there is dropped. 1056 // Adding another GFC with a GFC already there is dropped.
1038 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 1057 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1039 merged_event = GestureEventLastQueueEvent(); 1058 merged_event = GestureEventLastQueueEvent();
1040 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 1059 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
1041 EXPECT_FALSE(FlingInProgress());
1042 EXPECT_EQ(5U, GestureEventQueueSize()); 1060 EXPECT_EQ(5U, GestureEventQueueSize());
1043 } 1061 }
1044 1062
1045 INSTANTIATE_TEST_CASE_P(AllSources, 1063 INSTANTIATE_TEST_CASE_P(AllSources,
1046 GestureEventQueueWithSourceTest, 1064 GestureEventQueueWithSourceTest,
1047 testing::Values(blink::WebGestureDeviceTouchscreen, 1065 testing::Values(blink::WebGestureDeviceTouchscreen,
1048 blink::WebGestureDeviceTouchpad)); 1066 blink::WebGestureDeviceTouchpad));
1049 #endif // GTEST_HAS_PARAM_TEST 1067 #endif // GTEST_HAS_PARAM_TEST
1050 1068
1051 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the 1069 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 WebInputEvent::GestureScrollUpdate}; 1164 WebInputEvent::GestureScrollUpdate};
1147 1165
1148 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type); 1166 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type);
1149 i++) { 1167 i++) {
1150 WebGestureEvent merged_event = GestureEventQueueEventAt(i); 1168 WebGestureEvent merged_event = GestureEventQueueEventAt(i);
1151 EXPECT_EQ(expected[i], merged_event.type); 1169 EXPECT_EQ(expected[i], merged_event.type);
1152 } 1170 }
1153 } 1171 }
1154 1172
1155 } // namespace content 1173 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/gesture_event_queue.cc ('k') | content/browser/renderer_host/input/input_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698