Index: content/renderer/input/main_thread_event_queue_unittest.cc |
diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc |
index 81c324cbb5e5c8d3df38789857ef46af93098a0b..b4fc32ee7dfc6640ad6e51087c16811fe173cb4d 100644 |
--- a/content/renderer/input/main_thread_event_queue_unittest.cc |
+++ b/content/renderer/input/main_thread_event_queue_unittest.cc |
@@ -46,7 +46,6 @@ const unsigned kRafAlignedEnabledMouse = 1 << 1; |
// Simulate a 16ms frame signal. |
const base::TimeDelta kFrameInterval = base::TimeDelta::FromMilliseconds(16); |
-const int kTestRoutingID = 13; |
const char* kCoalescedCountHistogram = |
"Event.MainThreadEventQueue.CoalescedCount"; |
@@ -62,8 +61,8 @@ class HandledTask { |
class HandledEvent : public HandledTask { |
public: |
- explicit HandledEvent(const blink::WebCoalescedInputEvent* event) |
- : event_(event->Event(), event->GetCoalescedEventsPointers()) {} |
+ explicit HandledEvent(const blink::WebCoalescedInputEvent& event) |
+ : event_(event.Event(), event.GetCoalescedEventsPointers()) {} |
~HandledEvent() override {} |
blink::WebCoalescedInputEvent* taskAsEvent() override { return &event_; } |
@@ -91,8 +90,34 @@ class HandledClosure : public HandledTask { |
unsigned closure_id_; |
}; |
-class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>, |
- public MainThreadEventQueueClient { |
+class MainThreadEventQueueTest; |
+ |
+class MainThreadEventQueueForTest : public MainThreadEventQueue { |
+ public: |
+ MainThreadEventQueueForTest( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
+ blink::scheduler::RendererScheduler* scheduler, |
+ MainThreadEventQueueTest* test) |
+ : MainThreadEventQueue(main_task_runner, scheduler), test_(test) {} |
+ |
+ InputEventAckState HandleEventOnMainThread( |
+ const blink::WebCoalescedInputEvent& event, |
+ const ui::LatencyInfo& latency, |
+ InputEventDispatchType dispatch_type) override; |
+ |
+ void SendInputEventAck(blink::WebInputEvent::Type type, |
+ InputEventAckState ack_result, |
+ uint32_t touch_event_id) override; |
+ |
+ void NeedsMainFrame() override; |
+ |
+ private: |
+ ~MainThreadEventQueueForTest() override {} |
+ |
+ MainThreadEventQueueTest* test_; |
+}; |
+ |
+class MainThreadEventQueueTest : public testing::TestWithParam<unsigned> { |
public: |
MainThreadEventQueueTest() |
: main_task_runner_(new base::TestSimpleTaskRunner()), |
@@ -117,29 +142,8 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>, |
} |
void SetUp() override { |
- queue_ = new MainThreadEventQueue(kTestRoutingID, this, main_task_runner_, |
- &renderer_scheduler_); |
- } |
- |
- void HandleEventOnMainThread(int routing_id, |
- const blink::WebCoalescedInputEvent* event, |
- const ui::LatencyInfo& latency, |
- InputEventDispatchType type) override { |
- EXPECT_EQ(kTestRoutingID, routing_id); |
- |
- std::unique_ptr<HandledTask> handled_event(new HandledEvent(event)); |
- handled_tasks_.push_back(std::move(handled_event)); |
- |
- queue_->EventHandled(event->Event().GetType(), |
- blink::WebInputEventResult::kHandledApplication, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- } |
- |
- void SendInputEventAck(int routing_id, |
- blink::WebInputEvent::Type type, |
- InputEventAckState ack_result, |
- uint32_t touch_event_id) override { |
- additional_acked_events_.push_back(touch_event_id); |
+ queue_ = new MainThreadEventQueueForTest(main_task_runner_, |
+ &renderer_scheduler_, this); |
} |
bool HandleEvent(WebInputEvent& event, InputEventAckState ack_result) { |
@@ -159,8 +163,6 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>, |
base::Unretained(this), closure_id)); |
} |
- void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; } |
- |
MainThreadEventQueueTaskList& event_queue() { |
return queue_->shared_state_.events_; |
} |
@@ -191,10 +193,11 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>, |
} |
protected: |
+ friend class MainThreadEventQueueForTest; |
base::test::ScopedFeatureList feature_list_; |
scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_; |
blink::scheduler::MockRendererScheduler renderer_scheduler_; |
- scoped_refptr<MainThreadEventQueue> queue_; |
+ scoped_refptr<MainThreadEventQueueForTest> queue_; |
std::vector<std::unique_ptr<HandledTask>> handled_tasks_; |
std::vector<uint32_t> additional_acked_events_; |
@@ -204,6 +207,26 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>, |
unsigned closure_count_; |
}; |
+InputEventAckState MainThreadEventQueueForTest::HandleEventOnMainThread( |
+ const blink::WebCoalescedInputEvent& event, |
+ const ui::LatencyInfo& latency, |
+ InputEventDispatchType dispatch_type) { |
+ std::unique_ptr<HandledTask> handled_event(new HandledEvent(event)); |
+ test_->handled_tasks_.push_back(std::move(handled_event)); |
+ return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
+} |
+ |
+void MainThreadEventQueueForTest::SendInputEventAck( |
+ blink::WebInputEvent::Type type, |
+ InputEventAckState ack_result, |
+ uint32_t touch_event_id) { |
+ test_->additional_acked_events_.push_back(touch_event_id); |
+} |
+ |
+void MainThreadEventQueueForTest::NeedsMainFrame() { |
+ test_->needs_main_frame_ = true; |
+} |
+ |
TEST_P(MainThreadEventQueueTest, NonBlockingWheel) { |
base::HistogramTester histogram_tester; |
@@ -880,20 +903,6 @@ INSTANTIATE_TEST_CASE_P( |
testing::Range(0u, |
(kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1)); |
-class DummyMainThreadEventQueueClient : public MainThreadEventQueueClient { |
- void HandleEventOnMainThread(int routing_id, |
- const blink::WebCoalescedInputEvent* event, |
- const ui::LatencyInfo& latency, |
- InputEventDispatchType dispatch_type) override {} |
- |
- void SendInputEventAck(int routing_id, |
- blink::WebInputEvent::Type type, |
- InputEventAckState ack_result, |
- uint32_t touch_event_id) override {} |
- |
- void NeedsMainFrame(int routing_id) override {} |
-}; |
- |
class MainThreadEventQueueInitializationTest |
: public testing::Test { |
public: |
@@ -914,7 +923,28 @@ class MainThreadEventQueueInitializationTest |
blink::scheduler::MockRendererScheduler renderer_scheduler_; |
scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_; |
std::unique_ptr<base::FieldTrialList> field_trial_list_; |
- DummyMainThreadEventQueueClient dummy_main_thread_event_queue_client_; |
+}; |
+ |
+class MockMainThreadEventQueue : public MainThreadEventQueue { |
+ public: |
+ MockMainThreadEventQueue( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
+ blink::scheduler::RendererScheduler* scheduler) |
+ : MainThreadEventQueue(main_task_runner, scheduler) {} |
+ |
+ MOCK_METHOD3(HandleEventOnMainThread, |
+ InputEventAckState(const blink::WebCoalescedInputEvent& event, |
+ const ui::LatencyInfo& latency, |
+ InputEventDispatchType dispatch_type)); |
+ |
+ MOCK_METHOD3(SendInputEventAck, |
+ void(blink::WebInputEvent::Type type, |
+ InputEventAckState ack_result, |
+ uint32_t touch_event_id)); |
+ MOCK_METHOD0(NeedsMainFrame, void()); |
+ |
+ private: |
+ ~MockMainThreadEventQueue() override {} |
}; |
TEST_F(MainThreadEventQueueInitializationTest, |
@@ -924,9 +954,8 @@ TEST_F(MainThreadEventQueueInitializationTest, |
base::FieldTrialList::CreateFieldTrial( |
"MainThreadResponsivenessScrollIntervention", "Enabled123"); |
- queue_ = new MainThreadEventQueue(kTestRoutingID, |
- &dummy_main_thread_event_queue_client_, |
- main_task_runner_, &renderer_scheduler_); |
+ queue_ = |
+ new MockMainThreadEventQueue(main_task_runner_, &renderer_scheduler_); |
EXPECT_TRUE(enable_non_blocking_due_to_main_thread_responsiveness_flag()); |
EXPECT_EQ(base::TimeDelta::FromMilliseconds(123), |
main_thread_responsiveness_threshold()); |
@@ -936,9 +965,8 @@ TEST_F(MainThreadEventQueueInitializationTest, |
MainThreadResponsivenessThresholdDisabled) { |
base::FieldTrialList::CreateFieldTrial( |
"MainThreadResponsivenessScrollIntervention", "Control"); |
- queue_ = new MainThreadEventQueue(kTestRoutingID, |
- &dummy_main_thread_event_queue_client_, |
- main_task_runner_, &renderer_scheduler_); |
+ queue_ = |
+ new MockMainThreadEventQueue(main_task_runner_, &renderer_scheduler_); |
EXPECT_FALSE(enable_non_blocking_due_to_main_thread_responsiveness_flag()); |
EXPECT_EQ(base::TimeDelta::FromMilliseconds(0), |
main_thread_responsiveness_threshold()); |