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

Side by Side Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 10855200: Defer GestureTapDown events briefly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: proof-reading corrections Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "base/shared_memory.h" 7 #include "base/shared_memory.h"
8 #include "base/timer.h" 8 #include "base/timer.h"
9 #include "content/browser/browser_thread_impl.h" 9 #include "content/browser/browser_thread_impl.h"
10 #include "content/browser/renderer_host/backing_store.h" 10 #include "content/browser/renderer_host/backing_store.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 240 }
241 241
242 unsigned GestureEventLastQueueEventSize() { 242 unsigned GestureEventLastQueueEventSize() {
243 return gesture_event_filter_->coalesced_gesture_events_.size(); 243 return gesture_event_filter_->coalesced_gesture_events_.size();
244 } 244 }
245 245
246 bool FlingInProgress() { 246 bool FlingInProgress() {
247 return gesture_event_filter_->fling_in_progress_; 247 return gesture_event_filter_->fling_in_progress_;
248 } 248 }
249 249
250 void set_maximum_tap_gap_time_ms(int delay_ms) {
251 gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms;
252 }
253
250 protected: 254 protected:
251 virtual void NotifyRendererUnresponsive() OVERRIDE { 255 virtual void NotifyRendererUnresponsive() OVERRIDE {
252 unresponsive_timer_fired_ = true; 256 unresponsive_timer_fired_ = true;
253 } 257 }
254 258
255 private: 259 private:
256 bool unresponsive_timer_fired_; 260 bool unresponsive_timer_fired_;
257 }; 261 };
258 262
259 // MockPaintingObserver -------------------------------------------------------- 263 // MockPaintingObserver --------------------------------------------------------
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 // Simulate gesture events. 806 // Simulate gesture events.
803 807
804 // Sent. 808 // Sent.
805 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin); 809 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin);
806 810
807 // Enqueued. 811 // Enqueued.
808 SimulateGestureEvent(8, -5, 0, WebInputEvent::GestureScrollUpdate); 812 SimulateGestureEvent(8, -5, 0, WebInputEvent::GestureScrollUpdate);
809 813
810 // Make sure that the queue contains what we think it should. 814 // Make sure that the queue contains what we think it should.
811 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); 815 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent();
816 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
812 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); 817 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type);
813 818
814 // Coalesced. 819 // Coalesced.
815 SimulateGestureEvent(8, -6, 0, WebInputEvent::GestureScrollUpdate); 820 SimulateGestureEvent(8, -6, 0, WebInputEvent::GestureScrollUpdate);
816 821
817 // Check that coalescing updated the correct values. 822 // Check that coalescing updated the correct values.
818 merged_event = host_->GestureEventLastQueueEvent(); 823 merged_event = host_->GestureEventLastQueueEvent();
819 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); 824 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type);
820 EXPECT_EQ(0, merged_event.modifiers); 825 EXPECT_EQ(0, merged_event.modifiers);
821 EXPECT_EQ(16, merged_event.deltaX); 826 EXPECT_EQ(16, merged_event.deltaX);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 MessageLoop::current()->RunAllPending(); 893 MessageLoop::current()->RunAllPending();
889 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 894 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
890 895
891 // GFC before previous GFS is acked. 896 // GFC before previous GFS is acked.
892 process_->sink().ClearMessages(); 897 process_->sink().ClearMessages();
893 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); 898 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart);
894 EXPECT_TRUE(host_->FlingInProgress()); 899 EXPECT_TRUE(host_->FlingInProgress());
895 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); 900 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
896 EXPECT_FALSE(host_->FlingInProgress()); 901 EXPECT_FALSE(host_->FlingInProgress());
897 EXPECT_EQ(1U, process_->sink().message_count()); 902 EXPECT_EQ(1U, process_->sink().message_count());
898 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); 903 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
899 904
900 // Advance state realistically. 905 // Advance state realistically.
901 SendInputEventACK(WebInputEvent::GestureFlingStart, true); 906 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
902 MessageLoop::current()->RunAllPending(); 907 MessageLoop::current()->RunAllPending();
903 SendInputEventACK(WebInputEvent::GestureFlingCancel, true); 908 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
904 MessageLoop::current()->RunAllPending(); 909 MessageLoop::current()->RunAllPending();
905 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 910 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
906 911
907 // GFS is added to the queue if another event is pending 912 // GFS is added to the queue if another event is pending
908 process_->sink().ClearMessages(); 913 process_->sink().ClearMessages();
909 SimulateGestureEvent(8, -7, 0, WebInputEvent::GestureScrollUpdate); 914 SimulateGestureEvent(8, -7, 0, WebInputEvent::GestureScrollUpdate);
910 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); 915 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart);
916 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
911 EXPECT_EQ(1U, process_->sink().message_count()); 917 EXPECT_EQ(1U, process_->sink().message_count());
912 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); 918 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent();
913 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); 919 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
914 EXPECT_FALSE(host_->FlingInProgress()); 920 EXPECT_TRUE(host_->FlingInProgress());
915 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); 921 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
916 922
917 // GFS in queue means that a GFC is added to the queue 923 // GFS in queue means that a GFC is added to the queue
918 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); 924 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
919 merged_event =host_->GestureEventLastQueueEvent(); 925 merged_event =host_->GestureEventLastQueueEvent();
920 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 926 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
921 EXPECT_FALSE(host_->FlingInProgress()); 927 EXPECT_FALSE(host_->FlingInProgress());
922 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); 928 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize());
923
924 929
925 // Adding a second GFC is dropped. 930 // Adding a second GFC is dropped.
926 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); 931 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
927 EXPECT_FALSE(host_->FlingInProgress()); 932 EXPECT_FALSE(host_->FlingInProgress());
928 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); 933 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize());
929 934
930 // Adding another GFS will add it to the queue. 935 // Adding another GFS will add it to the queue.
931 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); 936 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart);
932 merged_event = host_->GestureEventLastQueueEvent(); 937 merged_event = host_->GestureEventLastQueueEvent();
933 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); 938 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
934 EXPECT_FALSE(host_->FlingInProgress()); 939 EXPECT_TRUE(host_->FlingInProgress());
935 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize()); 940 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize());
936 941
937 // GFS in queue means that a GFC is added to the queue 942 // GFS in queue means that a GFC is added to the queue
938 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); 943 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
939 merged_event = host_->GestureEventLastQueueEvent(); 944 merged_event = host_->GestureEventLastQueueEvent();
940 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 945 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
941 EXPECT_FALSE(host_->FlingInProgress()); 946 EXPECT_FALSE(host_->FlingInProgress());
942 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize()); 947 EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize());
943 948
944 // Adding another GFC with a GFC already there is dropped. 949 // Adding another GFC with a GFC already there is dropped.
945 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); 950 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
946 merged_event = host_->GestureEventLastQueueEvent(); 951 merged_event = host_->GestureEventLastQueueEvent();
947 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); 952 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
948 EXPECT_FALSE(host_->FlingInProgress()); 953 EXPECT_FALSE(host_->FlingInProgress());
949 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize()); 954 EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize());
955 }
956
957 // Test that GestureTapDown events are deferred.
958 TEST_F(RenderWidgetHostTest, DeferredGestureTapDown) {
959 process_->sink().ClearMessages();
960
961 // Set some sort of short deferral timeout
962 host_->set_maximum_tap_gap_time_ms(5);
963
964 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
965 EXPECT_EQ(0U, process_->sink().message_count());
966 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
967
968 // Wait long enough for first timeout and see if it fired.
969 MessageLoop::current()->PostDelayedTask(
970 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
971 MessageLoop::current()->Run();
972
973 EXPECT_EQ(1U, process_->sink().message_count());
974 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
975 }
976
977 // Test that GestureTapDown events are sent immediately on GestureTap.
978 TEST_F(RenderWidgetHostTest, DeferredGestureTapDownSentOnTap) {
979 process_->sink().ClearMessages();
980
981 // Set some sort of short deferral timeout
982 host_->set_maximum_tap_gap_time_ms(5);
983
984 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
985 EXPECT_EQ(0U, process_->sink().message_count());
986 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
987
988 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTap);
989 EXPECT_EQ(1U, process_->sink().message_count());
990 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
991
992 MessageLoop::current()->PostDelayedTask(
993 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
994 MessageLoop::current()->Run();
995
996 // If the deferral timer incorrectly fired, it sent an extra message.
997 EXPECT_EQ(1U, process_->sink().message_count());
998 }
999
1000 // Test that scroll events during the deferral internal drop the GestureTapDown.
1001 TEST_F(RenderWidgetHostTest, DeferredGestureTapDownAnulledOnScroll) {
1002 process_->sink().ClearMessages();
1003
1004 // Set some sort of short deferral timeout
1005 host_->set_maximum_tap_gap_time_ms(5);
1006
1007 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
1008 EXPECT_EQ(0U, process_->sink().message_count());
1009 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1010
1011 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin);
1012 EXPECT_EQ(1U, process_->sink().message_count());
1013 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1014
1015 MessageLoop::current()->PostDelayedTask(
1016 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
1017 MessageLoop::current()->Run();
1018
1019 // If the deferral timer incorrectly fired, it will send an extra message.
1020 EXPECT_EQ(1U, process_->sink().message_count());
950 } 1021 }
951 1022
952 // Test that the hang monitor timer expires properly if a new timer is started 1023 // Test that the hang monitor timer expires properly if a new timer is started
953 // while one is in progress (see crbug.com/11007). 1024 // while one is in progress (see crbug.com/11007).
954 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { 1025 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) {
955 // Start with a short timeout. 1026 // Start with a short timeout.
956 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); 1027 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10));
957 1028
958 // Immediately try to add a long 30 second timeout. 1029 // Immediately try to add a long 30 second timeout.
959 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1030 EXPECT_FALSE(host_->unresponsive_timer_fired());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 1084 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
1014 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 1085 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
1015 SendInputEventACK(WebInputEvent::RawKeyDown, true); 1086 SendInputEventACK(WebInputEvent::RawKeyDown, true);
1016 1087
1017 // Wait long enough for first timeout and see if it fired. 1088 // Wait long enough for first timeout and see if it fired.
1018 MessageLoop::current()->PostDelayedTask( 1089 MessageLoop::current()->PostDelayedTask(
1019 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40)); 1090 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40));
1020 MessageLoop::current()->Run(); 1091 MessageLoop::current()->Run();
1021 EXPECT_TRUE(host_->unresponsive_timer_fired()); 1092 EXPECT_TRUE(host_->unresponsive_timer_fired());
1022 } 1093 }
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698