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

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

Issue 1408213002: Add hooks for flushing input from BeginFrame dispatch on Aura (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix build for real Created 5 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
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 <math.h> 5 #include <math.h>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 } 289 }
290 290
291 bool TouchEventQueueEmpty() const { 291 bool TouchEventQueueEmpty() const {
292 return input_router()->touch_event_queue_.empty(); 292 return input_router()->touch_event_queue_.empty();
293 } 293 }
294 294
295 bool TouchEventTimeoutEnabled() const { 295 bool TouchEventTimeoutEnabled() const {
296 return input_router()->touch_event_queue_.IsAckTimeoutEnabled(); 296 return input_router()->touch_event_queue_.IsAckTimeoutEnabled();
297 } 297 }
298 298
299 void RequestNotificationWhenFlushed() const { 299 void FlushInput() const {
300 return input_router_->RequestNotificationWhenFlushed(); 300 return input_router_->FlushInput(base::TimeTicks::Now());
301 } 301 }
302 302
303 size_t GetAndResetDidFlushCount() { 303 size_t GetAndResetDidFlushCount() {
304 return client_->GetAndResetDidFlushCount(); 304 return client_->GetAndResetDidFlushCount();
305 } 305 }
306 306
307 bool HasPendingEvents() const { 307 bool HasPendingEvents() const {
308 return input_router_->HasPendingEvents(); 308 return input_router_->HasPendingEvents();
309 } 309 }
310 310
(...skipping 1247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED); 1558 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED);
1559 EXPECT_EQ(0, client_->in_flight_event_count()); 1559 EXPECT_EQ(0, client_->in_flight_event_count());
1560 } 1560 }
1561 1561
1562 // Test that the router will call the client's |DidFlush| after all events have 1562 // Test that the router will call the client's |DidFlush| after all events have
1563 // been dispatched following a call to |Flush|. 1563 // been dispatched following a call to |Flush|.
1564 TEST_F(InputRouterImplTest, InputFlush) { 1564 TEST_F(InputRouterImplTest, InputFlush) {
1565 EXPECT_FALSE(HasPendingEvents()); 1565 EXPECT_FALSE(HasPendingEvents());
1566 1566
1567 // Flushing an empty router should immediately trigger DidFlush. 1567 // Flushing an empty router should immediately trigger DidFlush.
1568 RequestNotificationWhenFlushed(); 1568 FlushInput();
1569 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1569 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1570 EXPECT_FALSE(HasPendingEvents()); 1570 EXPECT_FALSE(HasPendingEvents());
1571 1571
1572 // Queue a TouchStart. 1572 // Queue a TouchStart.
1573 OnHasTouchEventHandlers(true); 1573 OnHasTouchEventHandlers(true);
1574 PressTouchPoint(1, 1); 1574 PressTouchPoint(1, 1);
1575 uint32 touch_press_event_id = SendTouchEvent(); 1575 uint32 touch_press_event_id = SendTouchEvent();
1576 EXPECT_TRUE(HasPendingEvents()); 1576 EXPECT_TRUE(HasPendingEvents());
1577 1577
1578 // DidFlush should be called only after the event is ack'ed. 1578 // DidFlush should be called only after the event is ack'ed.
1579 RequestNotificationWhenFlushed(); 1579 FlushInput();
1580 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1580 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1581 SendTouchEventACK(WebInputEvent::TouchStart, 1581 SendTouchEventACK(WebInputEvent::TouchStart,
1582 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id); 1582 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id);
1583 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1583 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1584 1584
1585 // Ensure different types of enqueued events will prevent the DidFlush call 1585 // Ensure different types of enqueued events will prevent the DidFlush call
1586 // until all such events have been fully dispatched. 1586 // until all such events have been fully dispatched.
1587 MoveTouchPoint(0, 50, 50); 1587 MoveTouchPoint(0, 50, 50);
1588 uint32 touch_move_event_id = SendTouchEvent(); 1588 uint32 touch_move_event_id = SendTouchEvent();
1589 ASSERT_TRUE(HasPendingEvents()); 1589 ASSERT_TRUE(HasPendingEvents());
1590 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1590 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1591 blink::WebGestureDeviceTouchscreen); 1591 blink::WebGestureDeviceTouchscreen);
1592 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, 1592 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate,
1593 blink::WebGestureDeviceTouchscreen); 1593 blink::WebGestureDeviceTouchscreen);
1594 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, 1594 SimulateGestureEvent(WebInputEvent::GesturePinchBegin,
1595 blink::WebGestureDeviceTouchscreen); 1595 blink::WebGestureDeviceTouchscreen);
1596 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, 1596 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate,
1597 blink::WebGestureDeviceTouchscreen); 1597 blink::WebGestureDeviceTouchscreen);
1598 RequestNotificationWhenFlushed(); 1598 FlushInput();
1599 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1599 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1600 1600
1601 // Repeated flush calls should have no effect. 1601 // Repeated flush calls should have no effect.
1602 RequestNotificationWhenFlushed(); 1602 FlushInput();
1603 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1603 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1604 1604
1605 // There are still pending gestures. 1605 // There are still pending gestures.
1606 SendTouchEventACK(WebInputEvent::TouchMove, 1606 SendTouchEventACK(WebInputEvent::TouchMove,
1607 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id); 1607 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id);
1608 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1608 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1609 EXPECT_TRUE(HasPendingEvents()); 1609 EXPECT_TRUE(HasPendingEvents());
1610 1610
1611 // One more gesture to go. 1611 // One more gesture to go.
1612 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1612 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
(...skipping 14 matching lines...) Expand all
1627 EXPECT_FALSE(HasPendingEvents()); 1627 EXPECT_FALSE(HasPendingEvents());
1628 1628
1629 // Simulate a fling. 1629 // Simulate a fling.
1630 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1630 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1631 blink::WebGestureDeviceTouchscreen); 1631 blink::WebGestureDeviceTouchscreen);
1632 SimulateGestureEvent(WebInputEvent::GestureFlingStart, 1632 SimulateGestureEvent(WebInputEvent::GestureFlingStart,
1633 blink::WebGestureDeviceTouchscreen); 1633 blink::WebGestureDeviceTouchscreen);
1634 EXPECT_TRUE(HasPendingEvents()); 1634 EXPECT_TRUE(HasPendingEvents());
1635 1635
1636 // If the fling is unconsumed, the flush is complete. 1636 // If the fling is unconsumed, the flush is complete.
1637 RequestNotificationWhenFlushed(); 1637 FlushInput();
1638 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1638 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1639 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1639 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1640 blink::WebGestureDeviceTouchscreen); 1640 blink::WebGestureDeviceTouchscreen);
1641 SendInputEventACK(WebInputEvent::GestureFlingStart, 1641 SendInputEventACK(WebInputEvent::GestureFlingStart,
1642 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1642 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1643 EXPECT_FALSE(HasPendingEvents()); 1643 EXPECT_FALSE(HasPendingEvents());
1644 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1644 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1645 1645
1646 // Simulate a second fling. 1646 // Simulate a second fling.
1647 SimulateGestureEvent(WebInputEvent::GestureFlingStart, 1647 SimulateGestureEvent(WebInputEvent::GestureFlingStart,
1648 blink::WebGestureDeviceTouchscreen); 1648 blink::WebGestureDeviceTouchscreen);
1649 EXPECT_TRUE(HasPendingEvents()); 1649 EXPECT_TRUE(HasPendingEvents());
1650 1650
1651 // If the fling is consumed, the flush is complete only when the renderer 1651 // If the fling is consumed, the flush is complete only when the renderer
1652 // reports that is has ended. 1652 // reports that is has ended.
1653 RequestNotificationWhenFlushed(); 1653 FlushInput();
1654 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1654 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1655 SendInputEventACK(WebInputEvent::GestureFlingStart, 1655 SendInputEventACK(WebInputEvent::GestureFlingStart,
1656 INPUT_EVENT_ACK_STATE_CONSUMED); 1656 INPUT_EVENT_ACK_STATE_CONSUMED);
1657 EXPECT_TRUE(HasPendingEvents()); 1657 EXPECT_TRUE(HasPendingEvents());
1658 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1658 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1659 1659
1660 // The fling end notification should signal that the router is flushed. 1660 // The fling end notification should signal that the router is flushed.
1661 input_router()->OnMessageReceived(InputHostMsg_DidStopFlinging(0)); 1661 input_router()->OnMessageReceived(InputHostMsg_DidStopFlinging(0));
1662 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1662 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1663 1663
1664 // Even flings consumed by the client require a fling-end notification. 1664 // Even flings consumed by the client require a fling-end notification.
1665 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); 1665 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED);
1666 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1666 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1667 blink::WebGestureDeviceTouchscreen); 1667 blink::WebGestureDeviceTouchscreen);
1668 SimulateGestureEvent(WebInputEvent::GestureFlingStart, 1668 SimulateGestureEvent(WebInputEvent::GestureFlingStart,
1669 blink::WebGestureDeviceTouchscreen); 1669 blink::WebGestureDeviceTouchscreen);
1670 ASSERT_TRUE(HasPendingEvents()); 1670 ASSERT_TRUE(HasPendingEvents());
1671 RequestNotificationWhenFlushed(); 1671 FlushInput();
1672 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1672 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1673 input_router()->OnMessageReceived(InputHostMsg_DidStopFlinging(0)); 1673 input_router()->OnMessageReceived(InputHostMsg_DidStopFlinging(0));
1674 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1674 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1675 } 1675 }
1676 1676
1677 // Test that GesturePinchUpdate is handled specially for trackpad 1677 // Test that GesturePinchUpdate is handled specially for trackpad
1678 TEST_F(InputRouterImplTest, TouchpadPinchUpdate) { 1678 TEST_F(InputRouterImplTest, TouchpadPinchUpdate) {
1679 // GesturePinchUpdate for trackpad sends synthetic wheel events. 1679 // GesturePinchUpdate for trackpad sends synthetic wheel events.
1680 // Note that the Touchscreen case is verified as NOT doing this as 1680 // Note that the Touchscreen case is verified as NOT doing this as
1681 // part of the ShowPressIsInOrder test. 1681 // part of the ShowPressIsInOrder test.
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 client_overscroll = client_->GetAndResetOverscroll(); 1811 client_overscroll = client_->GetAndResetOverscroll();
1812 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, 1812 EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
1813 client_overscroll.accumulated_overscroll); 1813 client_overscroll.accumulated_overscroll);
1814 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, 1814 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
1815 client_overscroll.latest_overscroll_delta); 1815 client_overscroll.latest_overscroll_delta);
1816 EXPECT_EQ(wheel_overscroll.current_fling_velocity, 1816 EXPECT_EQ(wheel_overscroll.current_fling_velocity,
1817 client_overscroll.current_fling_velocity); 1817 client_overscroll.current_fling_velocity);
1818 } 1818 }
1819 1819
1820 } // namespace content 1820 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698