| 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/test/histogram_tester.h" | 5 #include "base/test/histogram_tester.h" |
| 6 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker
.h" | 6 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker
.h" |
| 7 #include "content/common/input/synthetic_web_input_event_builders.h" | 7 #include "content/common/input/synthetic_web_input_event_builders.h" |
| 8 #include "content/public/browser/native_web_keyboard_event.h" | 8 #include "content/public/browser/native_web_keyboard_event.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 11 |
| 12 using base::Bucket; |
| 11 using blink::WebInputEvent; | 13 using blink::WebInputEvent; |
| 14 using testing::ElementsAre; |
| 12 | 15 |
| 13 namespace content { | 16 namespace content { |
| 14 namespace { | 17 namespace { |
| 15 | 18 |
| 16 void AddFakeComponents(const RenderWidgetHostLatencyTracker& tracker, | 19 void AddFakeComponents(const RenderWidgetHostLatencyTracker& tracker, |
| 17 ui::LatencyInfo* latency) { | 20 ui::LatencyInfo* latency) { |
| 18 latency->AddLatencyNumberWithTimestamp( | 21 latency->AddLatencyNumberWithTimestamp( |
| 19 ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0, base::TimeTicks::Now(), 1); | 22 ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0, base::TimeTicks::Now(), 1); |
| 20 latency->AddLatencyNumberWithTimestamp( | 23 latency->AddLatencyNumberWithTimestamp( |
| 21 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, | 24 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 << size << " entries, but had " | 70 << size << " entries, but had " |
| 68 << histogram_size; | 71 << histogram_size; |
| 69 } | 72 } |
| 70 } | 73 } |
| 71 | 74 |
| 72 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } | 75 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } |
| 73 void ResetHistograms() { | 76 void ResetHistograms() { |
| 74 histogram_tester_.reset(new base::HistogramTester()); | 77 histogram_tester_.reset(new base::HistogramTester()); |
| 75 } | 78 } |
| 76 | 79 |
| 80 const base::HistogramTester& histogram_tester() { |
| 81 return *histogram_tester_; |
| 82 } |
| 83 |
| 77 private: | 84 private: |
| 78 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 85 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
| 79 const int kTestRoutingId = 3; | 86 const int kTestRoutingId = 3; |
| 80 const int kTestProcessId = 1; | 87 const int kTestProcessId = 1; |
| 81 scoped_ptr<base::HistogramTester> histogram_tester_; | 88 scoped_ptr<base::HistogramTester> histogram_tester_; |
| 82 RenderWidgetHostLatencyTracker tracker_; | 89 RenderWidgetHostLatencyTracker tracker_; |
| 83 }; | 90 }; |
| 84 | 91 |
| 85 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { | 92 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { |
| 86 for (bool rendering_on_main : { false, true }) { | 93 for (bool rendering_on_main : { false, true }) { |
| 87 ResetHistograms(); | 94 ResetHistograms(); |
| 88 { | 95 { |
| 89 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 96 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 90 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | 97 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); |
| 91 scroll.timeStampSeconds = | 98 scroll.timeStampSeconds = |
| 92 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); | 99 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
| 93 ui::LatencyInfo scroll_latency; | 100 ui::LatencyInfo scroll_latency; |
| 94 AddFakeComponents(*tracker(), &scroll_latency); | 101 AddFakeComponents(*tracker(), &scroll_latency); |
| 95 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); | 102 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); |
| 96 tracker()->OnInputEvent(scroll, &scroll_latency); | 103 tracker()->OnInputEvent(scroll, &scroll_latency); |
| 97 EXPECT_TRUE(scroll_latency.FindLatency( | 104 EXPECT_TRUE(scroll_latency.FindLatency( |
| 98 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 105 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 99 tracker()->latency_component_id(), nullptr)); | 106 tracker()->latency_component_id(), nullptr)); |
| 100 EXPECT_TRUE(scroll_latency.FindLatency( | 107 EXPECT_TRUE(scroll_latency.FindLatency( |
| 101 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 108 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 102 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | 109 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); |
| 103 tracker()->OnInputEventAck(scroll, &scroll_latency); | 110 tracker()->OnInputEventAck(scroll, &scroll_latency, false); |
| 104 } | 111 } |
| 105 | 112 |
| 106 { | 113 { |
| 107 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 114 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 108 blink::WebMouseWheelEvent::PhaseChanged); | 115 blink::WebMouseWheelEvent::PhaseChanged); |
| 109 wheel.timeStampSeconds = | 116 wheel.timeStampSeconds = |
| 110 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); | 117 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
| 111 ui::LatencyInfo wheel_latency; | 118 ui::LatencyInfo wheel_latency; |
| 112 AddFakeComponents(*tracker(), &wheel_latency); | 119 AddFakeComponents(*tracker(), &wheel_latency); |
| 113 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main); | 120 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main); |
| 114 tracker()->OnInputEvent(wheel, &wheel_latency); | 121 tracker()->OnInputEvent(wheel, &wheel_latency); |
| 115 EXPECT_TRUE(wheel_latency.FindLatency( | 122 EXPECT_TRUE(wheel_latency.FindLatency( |
| 116 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 123 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 117 tracker()->latency_component_id(), nullptr)); | 124 tracker()->latency_component_id(), nullptr)); |
| 118 EXPECT_TRUE(wheel_latency.FindLatency( | 125 EXPECT_TRUE(wheel_latency.FindLatency( |
| 119 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 126 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 120 EXPECT_EQ(1U, wheel_latency.input_coordinates_size()); | 127 EXPECT_EQ(1U, wheel_latency.input_coordinates_size()); |
| 121 tracker()->OnInputEventAck(wheel, &wheel_latency); | 128 tracker()->OnInputEventAck(wheel, &wheel_latency, false); |
| 122 } | 129 } |
| 123 | 130 |
| 124 { | 131 { |
| 125 SyntheticWebTouchEvent touch; | 132 SyntheticWebTouchEvent touch; |
| 126 touch.PressPoint(0, 0); | 133 touch.PressPoint(0, 0); |
| 127 touch.PressPoint(1, 1); | 134 touch.PressPoint(1, 1); |
| 128 ui::LatencyInfo touch_latency; | 135 ui::LatencyInfo touch_latency; |
| 129 AddFakeComponents(*tracker(), &touch_latency); | 136 AddFakeComponents(*tracker(), &touch_latency); |
| 130 AddRenderingScheduledComponent(&touch_latency, rendering_on_main); | 137 AddRenderingScheduledComponent(&touch_latency, rendering_on_main); |
| 131 tracker()->OnInputEvent(touch, &touch_latency); | 138 tracker()->OnInputEvent(touch, &touch_latency); |
| 132 EXPECT_TRUE(touch_latency.FindLatency( | 139 EXPECT_TRUE(touch_latency.FindLatency( |
| 133 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 140 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 134 tracker()->latency_component_id(), nullptr)); | 141 tracker()->latency_component_id(), nullptr)); |
| 135 EXPECT_TRUE(touch_latency.FindLatency( | 142 EXPECT_TRUE(touch_latency.FindLatency( |
| 136 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 143 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 137 EXPECT_EQ(2U, touch_latency.input_coordinates_size()); | 144 EXPECT_EQ(2U, touch_latency.input_coordinates_size()); |
| 138 tracker()->OnInputEventAck(touch, &touch_latency); | 145 tracker()->OnInputEventAck(touch, &touch_latency, false); |
| 139 tracker()->OnFrameSwapped(touch_latency); | 146 tracker()->OnFrameSwapped(touch_latency); |
| 140 } | 147 } |
| 141 | 148 |
| 142 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); | 149 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
| 143 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); | 150 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); |
| 144 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); | 151 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
| 145 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); | 152 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); |
| 146 EXPECT_TRUE( | 153 EXPECT_TRUE( |
| 147 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); | 154 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); |
| 148 EXPECT_TRUE( | 155 EXPECT_TRUE( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 169 | 176 |
| 170 TEST_F(RenderWidgetHostLatencyTrackerTest, | 177 TEST_F(RenderWidgetHostLatencyTrackerTest, |
| 171 LatencyTerminatedOnAckIfRenderingNotScheduled) { | 178 LatencyTerminatedOnAckIfRenderingNotScheduled) { |
| 172 { | 179 { |
| 173 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin(5.f, -5.f); | 180 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin(5.f, -5.f); |
| 174 ui::LatencyInfo scroll_latency; | 181 ui::LatencyInfo scroll_latency; |
| 175 AddFakeComponents(*tracker(), &scroll_latency); | 182 AddFakeComponents(*tracker(), &scroll_latency); |
| 176 // Don't include the rendering schedule component, since we're testing the | 183 // Don't include the rendering schedule component, since we're testing the |
| 177 // case where rendering isn't scheduled. | 184 // case where rendering isn't scheduled. |
| 178 tracker()->OnInputEvent(scroll, &scroll_latency); | 185 tracker()->OnInputEvent(scroll, &scroll_latency); |
| 179 tracker()->OnInputEventAck(scroll, &scroll_latency); | 186 tracker()->OnInputEventAck(scroll, &scroll_latency, false); |
| 180 EXPECT_TRUE(scroll_latency.FindLatency( | 187 EXPECT_TRUE(scroll_latency.FindLatency( |
| 181 ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT, 0, nullptr)); | 188 ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT, 0, nullptr)); |
| 182 EXPECT_TRUE(scroll_latency.terminated()); | 189 EXPECT_TRUE(scroll_latency.terminated()); |
| 183 } | 190 } |
| 184 | 191 |
| 185 { | 192 { |
| 186 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 193 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 187 blink::WebMouseWheelEvent::PhaseChanged); | 194 blink::WebMouseWheelEvent::PhaseChanged); |
| 188 ui::LatencyInfo wheel_latency; | 195 ui::LatencyInfo wheel_latency; |
| 189 AddFakeComponents(*tracker(), &wheel_latency); | 196 AddFakeComponents(*tracker(), &wheel_latency); |
| 190 tracker()->OnInputEvent(wheel, &wheel_latency); | 197 tracker()->OnInputEvent(wheel, &wheel_latency); |
| 191 tracker()->OnInputEventAck(wheel, &wheel_latency); | 198 tracker()->OnInputEventAck(wheel, &wheel_latency, false); |
| 192 EXPECT_TRUE(wheel_latency.FindLatency( | 199 EXPECT_TRUE(wheel_latency.FindLatency( |
| 193 ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT, 0, nullptr)); | 200 ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT, 0, nullptr)); |
| 194 EXPECT_TRUE(wheel_latency.terminated()); | 201 EXPECT_TRUE(wheel_latency.terminated()); |
| 195 } | 202 } |
| 196 | 203 |
| 197 { | 204 { |
| 198 SyntheticWebTouchEvent touch; | 205 SyntheticWebTouchEvent touch; |
| 199 touch.PressPoint(0, 0); | 206 touch.PressPoint(0, 0); |
| 200 ui::LatencyInfo touch_latency; | 207 ui::LatencyInfo touch_latency; |
| 201 AddFakeComponents(*tracker(), &touch_latency); | 208 AddFakeComponents(*tracker(), &touch_latency); |
| 202 tracker()->OnInputEvent(touch, &touch_latency); | 209 tracker()->OnInputEvent(touch, &touch_latency); |
| 203 tracker()->OnInputEventAck(touch, &touch_latency); | 210 tracker()->OnInputEventAck(touch, &touch_latency, false); |
| 204 EXPECT_TRUE(touch_latency.FindLatency( | 211 EXPECT_TRUE(touch_latency.FindLatency( |
| 205 ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT, 0, nullptr)); | 212 ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT, 0, nullptr)); |
| 206 EXPECT_TRUE(touch_latency.terminated()); | 213 EXPECT_TRUE(touch_latency.terminated()); |
| 207 tracker()->OnFrameSwapped(touch_latency); | 214 tracker()->OnFrameSwapped(touch_latency); |
| 208 } | 215 } |
| 209 | 216 |
| 210 { | 217 { |
| 211 auto mouse_move = SyntheticWebMouseEventBuilder::Build( | 218 auto mouse_move = SyntheticWebMouseEventBuilder::Build( |
| 212 blink::WebMouseEvent::MouseMove); | 219 blink::WebMouseEvent::MouseMove); |
| 213 ui::LatencyInfo mouse_latency; | 220 ui::LatencyInfo mouse_latency; |
| 214 AddFakeComponents(*tracker(), &mouse_latency); | 221 AddFakeComponents(*tracker(), &mouse_latency); |
| 215 tracker()->OnInputEvent(mouse_move, &mouse_latency); | 222 tracker()->OnInputEvent(mouse_move, &mouse_latency); |
| 216 tracker()->OnInputEventAck(mouse_move, &mouse_latency); | 223 tracker()->OnInputEventAck(mouse_move, &mouse_latency, false); |
| 217 EXPECT_TRUE(mouse_latency.FindLatency( | 224 EXPECT_TRUE(mouse_latency.FindLatency( |
| 218 ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT, 0, nullptr)); | 225 ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT, 0, nullptr)); |
| 219 EXPECT_TRUE(mouse_latency.terminated()); | 226 EXPECT_TRUE(mouse_latency.terminated()); |
| 220 } | 227 } |
| 221 | 228 |
| 222 { | 229 { |
| 223 auto key_event = SyntheticWebKeyboardEventBuilder::Build( | 230 auto key_event = SyntheticWebKeyboardEventBuilder::Build( |
| 224 blink::WebKeyboardEvent::Char); | 231 blink::WebKeyboardEvent::Char); |
| 225 ui::LatencyInfo key_latency; | 232 ui::LatencyInfo key_latency; |
| 226 AddFakeComponents(*tracker(), &key_latency); | 233 AddFakeComponents(*tracker(), &key_latency); |
| 227 tracker()->OnInputEvent(key_event, &key_latency); | 234 tracker()->OnInputEvent(key_event, &key_latency); |
| 228 tracker()->OnInputEventAck(key_event, &key_latency); | 235 tracker()->OnInputEventAck(key_event, &key_latency, false); |
| 229 EXPECT_TRUE(key_latency.FindLatency( | 236 EXPECT_TRUE(key_latency.FindLatency( |
| 230 ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT, 0, nullptr)); | 237 ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT, 0, nullptr)); |
| 231 EXPECT_TRUE(key_latency.terminated()); | 238 EXPECT_TRUE(key_latency.terminated()); |
| 232 } | 239 } |
| 233 | 240 |
| 234 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); | 241 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
| 235 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); | 242 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); |
| 236 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); | 243 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
| 237 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); | 244 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); |
| 238 EXPECT_TRUE( | 245 EXPECT_TRUE( |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 tracker()->latency_component_id(), nullptr)); | 362 tracker()->latency_component_id(), nullptr)); |
| 356 EXPECT_FALSE(scroll_latency.FindLatency( | 363 EXPECT_FALSE(scroll_latency.FindLatency( |
| 357 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, | 364 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 358 tracker()->latency_component_id(), nullptr)); | 365 tracker()->latency_component_id(), nullptr)); |
| 359 EXPECT_TRUE(scroll_latency.FindLatency( | 366 EXPECT_TRUE(scroll_latency.FindLatency( |
| 360 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, | 367 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 361 tracker()->latency_component_id(), nullptr)); | 368 tracker()->latency_component_id(), nullptr)); |
| 362 EXPECT_EQ(3U, scroll_latency.latency_components().size()); | 369 EXPECT_EQ(3U, scroll_latency.latency_components().size()); |
| 363 } | 370 } |
| 364 | 371 |
| 372 TEST_F(RenderWidgetHostLatencyTrackerTest, TouchBlockingAndQueueingTime) { |
| 373 for (bool blocking : {false, true}) { |
| 374 SyntheticWebTouchEvent event; |
| 375 event.PressPoint(1, 1); |
| 376 |
| 377 ui::LatencyInfo latency_start; |
| 378 tracker()->OnInputEvent(event, &latency_start); |
| 379 tracker()->OnForwardEventToRenderer(event, &latency_start); |
| 380 tracker()->OnInputEventAck(event, &latency_start, blocking); |
| 381 |
| 382 ui::LatencyInfo latency_move; |
| 383 event.MovePoint(0, 20, 20); |
| 384 tracker()->OnInputEvent(event, &latency_move); |
| 385 tracker()->OnForwardEventToRenderer(event, &latency_move); |
| 386 |
| 387 EXPECT_TRUE(latency_move.FindLatency( |
| 388 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 389 EXPECT_TRUE( |
| 390 latency_move.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 391 tracker()->latency_component_id(), nullptr)); |
| 392 EXPECT_TRUE(latency_move.FindLatency( |
| 393 ui::INPUT_EVENT_LATENCY_REACHED_RWH_COMPONENT, 0, nullptr)); |
| 394 |
| 395 EXPECT_EQ(3U, latency_move.latency_components().size()); |
| 396 |
| 397 ui::LatencyInfo fake_latency_move; |
| 398 fake_latency_move.AddLatencyNumberWithTimestamp( |
| 399 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 400 tracker()->latency_component_id(), 0, |
| 401 base::TimeTicks() + base::TimeDelta::FromMicroseconds(1), 1); |
| 402 |
| 403 fake_latency_move.AddLatencyNumberWithTimestamp( |
| 404 ui::INPUT_EVENT_LATENCY_REACHED_RWH_COMPONENT, 0, 0, |
| 405 base::TimeTicks() + base::TimeDelta::FromMicroseconds(5), 1); |
| 406 |
| 407 fake_latency_move.AddLatencyNumberWithTimestamp( |
| 408 ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT, 0, 0, |
| 409 base::TimeTicks() + base::TimeDelta::FromMicroseconds(12), 1); |
| 410 |
| 411 // Call ComputeInputLatencyHistograms directly to avoid OnInputEventAck |
| 412 // overwriting components. |
| 413 tracker()->ComputeInputLatencyHistograms(event.type, |
| 414 tracker()->latency_component_id(), |
| 415 fake_latency_move, blocking); |
| 416 } |
| 417 |
| 418 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 419 "Event.Latency.QueueingTime.TouchMoveDefaultPrevented"), |
| 420 ElementsAre(Bucket(4, 1))); |
| 421 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 422 "Event.Latency.QueueingTime.TouchMoveDefaultAllowed"), |
| 423 ElementsAre(Bucket(4, 1))); |
| 424 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 425 "Event.Latency.BlockingTime.TouchMoveDefaultPrevented"), |
| 426 ElementsAre(Bucket(7, 1))); |
| 427 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 428 "Event.Latency.BlockingTime.TouchMoveDefaultAllowed"), |
| 429 ElementsAre(Bucket(7, 1))); |
| 430 } |
| 431 |
| 365 } // namespace content | 432 } // namespace content |
| OLD | NEW |