| 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 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/events/gesture_detection/motion_event_buffer.h" | 9 #include "ui/events/gesture_detection/motion_event_buffer.h" |
| 10 #include "ui/events/test/mock_motion_event.h" | 10 #include "ui/events/test/motion_event_test_utils.h" |
| 11 | 11 |
| 12 using base::TimeDelta; | 12 using base::TimeDelta; |
| 13 using base::TimeTicks; | 13 using base::TimeTicks; |
| 14 using ui::test::MockMotionEvent; | 14 using ui::test::MockMotionEvent; |
| 15 | 15 |
| 16 namespace ui { | 16 namespace ui { |
| 17 | 17 |
| 18 const int kSmallDeltaMs = 1; | 18 const int kSmallDeltaMs = 1; |
| 19 const int kLargeDeltaMs = 50; | 19 const int kLargeDeltaMs = 50; |
| 20 const int kResampleDeltaMs = 5; | 20 const int kResampleDeltaMs = 5; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 34 #define EXPECT_EVENT_HISTORY_EQ(A, I, B) \ | 34 #define EXPECT_EVENT_HISTORY_EQ(A, I, B) \ |
| 35 { \ | 35 { \ |
| 36 SCOPED_TRACE(testing::Message()); \ | 36 SCOPED_TRACE(testing::Message()); \ |
| 37 ExpectEqualsHistoryIndex((A), (I), (B)); \ | 37 ExpectEqualsHistoryIndex((A), (I), (B)); \ |
| 38 } | 38 } |
| 39 | 39 |
| 40 class MotionEventBufferTest : public testing::Test, | 40 class MotionEventBufferTest : public testing::Test, |
| 41 public MotionEventBufferClient { | 41 public MotionEventBufferClient { |
| 42 public: | 42 public: |
| 43 MotionEventBufferTest() : needs_flush_(false) {} | 43 MotionEventBufferTest() : needs_flush_(false) {} |
| 44 virtual ~MotionEventBufferTest() {} | 44 ~MotionEventBufferTest() override {} |
| 45 | 45 |
| 46 // MotionEventBufferClient implementation. | 46 // MotionEventBufferClient implementation. |
| 47 virtual void ForwardMotionEvent(const MotionEvent& event) override { | 47 void ForwardMotionEvent(const MotionEvent& event) override { |
| 48 forwarded_events_.push_back(event.Clone().release()); | 48 forwarded_events_.push_back(event.Clone().release()); |
| 49 } | 49 } |
| 50 | 50 |
| 51 virtual void SetNeedsFlush() override { needs_flush_ = true; } | 51 void SetNeedsFlush() override { needs_flush_ = true; } |
| 52 | 52 |
| 53 bool GetAndResetNeedsFlush() { | 53 bool GetAndResetNeedsFlush() { |
| 54 bool needs_flush = needs_flush_; | 54 bool needs_flush = needs_flush_; |
| 55 needs_flush_ = false; | 55 needs_flush_ = false; |
| 56 return needs_flush; | 56 return needs_flush; |
| 57 } | 57 } |
| 58 | 58 |
| 59 ScopedVector<MotionEvent> GetAndResetForwardedEvents() { | 59 ScopedVector<MotionEvent> GetAndResetForwardedEvents() { |
| 60 ScopedVector<MotionEvent> forwarded_events; | 60 ScopedVector<MotionEvent> forwarded_events; |
| 61 forwarded_events.swap(forwarded_events_); | 61 forwarded_events.swap(forwarded_events_); |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 // The flushed event should only include the latest move event. | 337 // The flushed event should only include the latest move event. |
| 338 buffer.Flush(event_time); | 338 buffer.Flush(event_time); |
| 339 ScopedVector<MotionEvent> events = GetAndResetForwardedEvents(); | 339 ScopedVector<MotionEvent> events = GetAndResetForwardedEvents(); |
| 340 ASSERT_EQ(3U, events.size()); | 340 ASSERT_EQ(3U, events.size()); |
| 341 EXPECT_EVENT_EQ(move2, *events.back()); | 341 EXPECT_EVENT_EQ(move2, *events.back()); |
| 342 EXPECT_FALSE(GetAndResetNeedsFlush()); | 342 EXPECT_FALSE(GetAndResetNeedsFlush()); |
| 343 | 343 |
| 344 event_time += base::TimeDelta::FromMilliseconds(5); | 344 event_time += base::TimeDelta::FromMilliseconds(5); |
| 345 | 345 |
| 346 // Events with different pointer ids should not combine. | 346 // Events with different pointer ids should not combine. |
| 347 PointerProperties pointer0(5.f, 5.f); | 347 PointerProperties pointer0(5.f, 5.f, 1.f); |
| 348 pointer0.id = 1; | 348 pointer0.id = 1; |
| 349 PointerProperties pointer1(10.f, 10.f); | 349 PointerProperties pointer1(10.f, 10.f, 2.f); |
| 350 pointer1.id = 2; | 350 pointer1.id = 2; |
| 351 MotionEventGeneric move3(MotionEvent::ACTION_MOVE, event_time, pointer0); | 351 MotionEventGeneric move3(MotionEvent::ACTION_MOVE, event_time, pointer0); |
| 352 move3.PushPointer(pointer1); | 352 move3.PushPointer(pointer1); |
| 353 buffer.OnMotionEvent(move3); | 353 buffer.OnMotionEvent(move3); |
| 354 ASSERT_FALSE(GetLastEvent()); | 354 ASSERT_FALSE(GetLastEvent()); |
| 355 EXPECT_TRUE(GetAndResetNeedsFlush()); | 355 EXPECT_TRUE(GetAndResetNeedsFlush()); |
| 356 | 356 |
| 357 MotionEventGeneric move4(MotionEvent::ACTION_MOVE, event_time, pointer0); | 357 MotionEventGeneric move4(MotionEvent::ACTION_MOVE, event_time, pointer0); |
| 358 pointer1.id = 7; | 358 pointer1.id = 7; |
| 359 move4.PushPointer(pointer1); | 359 move4.PushPointer(pointer1); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 buffer.Flush(flush_time); | 400 buffer.Flush(flush_time); |
| 401 EXPECT_FALSE(GetAndResetNeedsFlush()); | 401 EXPECT_FALSE(GetAndResetNeedsFlush()); |
| 402 ASSERT_TRUE(GetLastEvent()); | 402 ASSERT_TRUE(GetLastEvent()); |
| 403 EXPECT_EVENT_EQ(move, *GetLastEvent()); | 403 EXPECT_EVENT_EQ(move, *GetLastEvent()); |
| 404 } | 404 } |
| 405 | 405 |
| 406 TEST_F(MotionEventBufferTest, OutOfOrderPointersBuffered) { | 406 TEST_F(MotionEventBufferTest, OutOfOrderPointersBuffered) { |
| 407 base::TimeTicks event_time = base::TimeTicks::Now(); | 407 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 408 MotionEventBuffer buffer(this, true); | 408 MotionEventBuffer buffer(this, true); |
| 409 | 409 |
| 410 PointerProperties p0(1.f, 2.f); | 410 PointerProperties p0(1.f, 2.f, 3.f); |
| 411 p0.id = 1; | 411 p0.id = 1; |
| 412 PointerProperties p1(2.f, 1.f); | 412 PointerProperties p1(2.f, 1.f, 0.5f); |
| 413 p1.id = 2; | 413 p1.id = 2; |
| 414 | 414 |
| 415 MotionEventGeneric move0(MotionEvent::ACTION_MOVE, event_time, p0); | 415 MotionEventGeneric move0(MotionEvent::ACTION_MOVE, event_time, p0); |
| 416 move0.PushPointer(p1); | 416 move0.PushPointer(p1); |
| 417 buffer.OnMotionEvent(move0); | 417 buffer.OnMotionEvent(move0); |
| 418 EXPECT_TRUE(GetAndResetNeedsFlush()); | 418 EXPECT_TRUE(GetAndResetNeedsFlush()); |
| 419 ASSERT_FALSE(GetLastEvent()); | 419 ASSERT_FALSE(GetLastEvent()); |
| 420 | 420 |
| 421 event_time += base::TimeDelta::FromMilliseconds(5); | 421 event_time += base::TimeDelta::FromMilliseconds(5); |
| 422 | 422 |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 TEST_F(MotionEventBufferTest, Resampling150to60) { | 862 TEST_F(MotionEventBufferTest, Resampling150to60) { |
| 863 base::TimeDelta flush_time_delta = | 863 base::TimeDelta flush_time_delta = |
| 864 base::TimeDelta::FromMillisecondsD(1000. / 60.); | 864 base::TimeDelta::FromMillisecondsD(1000. / 60.); |
| 865 base::TimeDelta event_time_delta = | 865 base::TimeDelta event_time_delta = |
| 866 base::TimeDelta::FromMillisecondsD(1000. / 150.); | 866 base::TimeDelta::FromMillisecondsD(1000. / 150.); |
| 867 | 867 |
| 868 RunResample(flush_time_delta, event_time_delta); | 868 RunResample(flush_time_delta, event_time_delta); |
| 869 } | 869 } |
| 870 | 870 |
| 871 } // namespace ui | 871 } // namespace ui |
| OLD | NEW |