| 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/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 ui::LatencyInfo* latency, | 21 ui::LatencyInfo* latency, |
| 22 base::TimeTicks time_stamp) { | 22 base::TimeTicks time_stamp) { |
| 23 latency->AddLatencyNumberWithTimestamp(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, | 23 latency->AddLatencyNumberWithTimestamp(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, |
| 24 0, 0, time_stamp, 1); | 24 0, 0, time_stamp, 1); |
| 25 latency->AddLatencyNumberWithTimestamp( | 25 latency->AddLatencyNumberWithTimestamp( |
| 26 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, time_stamp, | 26 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, time_stamp, |
| 27 1); | 27 1); |
| 28 latency->AddLatencyNumberWithTimestamp( | 28 latency->AddLatencyNumberWithTimestamp( |
| 29 ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0, 0, time_stamp, 1); | 29 ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0, 0, time_stamp, 1); |
| 30 latency->AddLatencyNumberWithTimestamp( | 30 latency->AddLatencyNumberWithTimestamp( |
| 31 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, | |
| 32 tracker.latency_component_id(), 0, time_stamp, 1); | |
| 33 latency->AddLatencyNumberWithTimestamp( | |
| 34 ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 0, time_stamp, 1); | 31 ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 0, time_stamp, 1); |
| 35 latency->AddLatencyNumberWithTimestamp( | 32 latency->AddLatencyNumberWithTimestamp( |
| 36 ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0, 0, | 33 ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0, 0, |
| 37 time_stamp, 1); | 34 time_stamp, 1); |
| 38 } | 35 } |
| 39 | 36 |
| 40 void AddFakeComponents(const RenderWidgetHostLatencyTracker& tracker, | 37 void AddFakeComponents(const RenderWidgetHostLatencyTracker& tracker, |
| 41 ui::LatencyInfo* latency) { | 38 ui::LatencyInfo* latency) { |
| 39 latency->AddLatencyNumberWithTimestamp( |
| 40 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 41 tracker.latency_component_id(), 0, base::TimeTicks::Now(), 1); |
| 42 AddFakeComponentsWithTimeStamp(tracker, latency, base::TimeTicks::Now()); | 42 AddFakeComponentsWithTimeStamp(tracker, latency, base::TimeTicks::Now()); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void AddRenderingScheduledComponent(ui::LatencyInfo* latency, | 45 void AddRenderingScheduledComponent(ui::LatencyInfo* latency, |
| 46 bool main, | 46 bool main, |
| 47 base::TimeTicks time_stamp) { | 47 base::TimeTicks time_stamp) { |
| 48 if (main) { | 48 if (main) { |
| 49 latency->AddLatencyNumberWithTimestamp( | 49 latency->AddLatencyNumberWithTimestamp( |
| 50 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT, 0, 0, | 50 ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT, 0, 0, |
| 51 time_stamp, 1); | 51 time_stamp, 1); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 return *histogram_tester_; | 88 return *histogram_tester_; |
| 89 } | 89 } |
| 90 | 90 |
| 91 private: | 91 private: |
| 92 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 92 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
| 93 const int kTestRoutingId = 3; | 93 const int kTestRoutingId = 3; |
| 94 const int kTestProcessId = 1; | 94 const int kTestProcessId = 1; |
| 95 std::unique_ptr<base::HistogramTester> histogram_tester_; | 95 std::unique_ptr<base::HistogramTester> histogram_tester_; |
| 96 RenderWidgetHostLatencyTracker tracker_; | 96 RenderWidgetHostLatencyTracker tracker_; |
| 97 }; | 97 }; |
| 98 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelHistograms) { | 98 |
| 99 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { |
| 99 for (bool rendering_on_main : {false, true}) { | 100 for (bool rendering_on_main : {false, true}) { |
| 100 for (bool is_running_navigation_hint_task : {false, true}) { | 101 for (bool is_running_navigation_hint_task : {false, true}) { |
| 101 ResetHistograms(); | 102 ResetHistograms(); |
| 102 { | 103 { |
| 103 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 104 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 104 blink::WebMouseWheelEvent::PhaseChanged); | 105 blink::WebMouseWheelEvent::PhaseChanged); |
| 105 base::TimeTicks now = base::TimeTicks::Now(); | 106 base::TimeTicks now = base::TimeTicks::Now(); |
| 106 wheel.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); | 107 wheel.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); |
| 107 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); | 108 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); |
| 109 wheel_latency.AddLatencyNumberWithTimestamp( |
| 110 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 111 tracker()->latency_component_id(), 0, now, 1); |
| 108 AddFakeComponentsWithTimeStamp(*tracker(), &wheel_latency, now); | 112 AddFakeComponentsWithTimeStamp(*tracker(), &wheel_latency, now); |
| 109 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main, now); | 113 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main, now); |
| 110 tracker()->OnInputEvent(wheel, &wheel_latency); | 114 tracker()->OnInputEvent(wheel, &wheel_latency); |
| 111 EXPECT_TRUE(wheel_latency.FindLatency( | 115 EXPECT_TRUE(wheel_latency.FindLatency( |
| 112 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 116 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 113 tracker()->latency_component_id(), nullptr)); | 117 tracker()->latency_component_id(), nullptr)); |
| 114 EXPECT_TRUE(wheel_latency.FindLatency( | 118 EXPECT_TRUE(wheel_latency.FindLatency( |
| 115 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 119 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 116 EXPECT_EQ(1U, wheel_latency.input_coordinates_size()); | 120 EXPECT_EQ(1U, wheel_latency.input_coordinates_size()); |
| 117 tracker()->OnInputEventAck(wheel, &wheel_latency, | 121 tracker()->OnInputEventAck(wheel, &wheel_latency, |
| 118 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 122 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 119 tracker()->OnFrameSwapped(wheel_latency, | 123 tracker()->OnFrameSwapped(wheel_latency, |
| 120 is_running_navigation_hint_task); | 124 is_running_navigation_hint_task); |
| 121 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); | 125 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
| 122 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); | 126 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
| 123 | 127 |
| 124 EXPECT_TRUE( | 128 EXPECT_TRUE( |
| 125 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel." | 129 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 126 "TimeToFirstScrollUpdateSwapBegin2", | 130 "TimeToScrollUpdateSwapBegin2", |
| 127 1)); | 131 1)); |
| 132 EXPECT_TRUE(HistogramSizeEq( |
| 133 "Event.Latency.ScrollBegin.Wheel.TimeToHandled2_Main", |
| 134 rendering_on_main ? 1 : 0)); |
| 135 EXPECT_TRUE(HistogramSizeEq( |
| 136 "Event.Latency.ScrollBegin.Wheel.TimeToHandled2_Impl", |
| 137 rendering_on_main ? 0 : 1)); |
| 138 EXPECT_TRUE(HistogramSizeEq( |
| 139 "Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2_Main", |
| 140 rendering_on_main ? 1 : 0)); |
| 141 EXPECT_TRUE(HistogramSizeEq( |
| 142 "Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2_Impl", |
| 143 rendering_on_main ? 0 : 1)); |
| 144 EXPECT_TRUE( |
| 145 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 146 "RendererSwapToBrowserNotified2", |
| 147 1)); |
| 148 EXPECT_TRUE( |
| 149 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 150 "BrowserNotifiedToBeforeGpuSwap2", |
| 151 1)); |
| 152 EXPECT_TRUE( |
| 153 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel.GpuSwap2", 1)); |
| 154 |
| 155 EXPECT_TRUE(HistogramSizeEq( |
| 156 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Main", 0)); |
| 157 EXPECT_TRUE(HistogramSizeEq( |
| 158 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Impl", 0)); |
| 159 EXPECT_TRUE(HistogramSizeEq( |
| 160 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Main", 0)); |
| 161 EXPECT_TRUE(HistogramSizeEq( |
| 162 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", 0)); |
| 163 EXPECT_TRUE(HistogramSizeEq( |
| 164 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", |
| 165 0)); |
| 166 EXPECT_TRUE(HistogramSizeEq( |
| 167 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 168 0)); |
| 169 EXPECT_TRUE( |
| 170 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); |
| 171 } |
| 172 } |
| 173 } |
| 174 } |
| 175 |
| 176 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { |
| 177 for (bool rendering_on_main : {false, true}) { |
| 178 for (bool is_running_navigation_hint_task : {false, true}) { |
| 179 ResetHistograms(); |
| 180 { |
| 181 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 182 blink::WebMouseWheelEvent::PhaseChanged); |
| 183 base::TimeTicks now = base::TimeTicks::Now(); |
| 184 wheel.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); |
| 185 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); |
| 186 wheel_latency.AddLatencyNumberWithTimestamp( |
| 187 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 188 tracker()->latency_component_id(), 0, now, 1); |
| 189 AddFakeComponentsWithTimeStamp(*tracker(), &wheel_latency, now); |
| 190 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main, now); |
| 191 tracker()->OnInputEvent(wheel, &wheel_latency); |
| 192 EXPECT_TRUE(wheel_latency.FindLatency( |
| 193 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 194 tracker()->latency_component_id(), nullptr)); |
| 195 EXPECT_TRUE(wheel_latency.FindLatency( |
| 196 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 197 EXPECT_EQ(1U, wheel_latency.input_coordinates_size()); |
| 198 tracker()->OnInputEventAck(wheel, &wheel_latency, |
| 199 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 200 tracker()->OnFrameSwapped(wheel_latency, |
| 201 is_running_navigation_hint_task); |
| 202 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
| 203 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
| 204 |
| 205 EXPECT_TRUE( |
| 206 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 207 "TimeToScrollUpdateSwapBegin2", |
| 208 0)); |
| 209 EXPECT_TRUE(HistogramSizeEq( |
| 210 "Event.Latency.ScrollBegin.Wheel.TimeToHandled2_Main", 0)); |
| 211 EXPECT_TRUE(HistogramSizeEq( |
| 212 "Event.Latency.ScrollBegin.Wheel.TimeToHandled2_Impl", 0)); |
| 213 EXPECT_TRUE(HistogramSizeEq( |
| 214 "Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2_Main", 0)); |
| 215 EXPECT_TRUE(HistogramSizeEq( |
| 216 "Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2_Impl", 0)); |
| 217 EXPECT_TRUE( |
| 218 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 219 "RendererSwapToBrowserNotified2", |
| 220 0)); |
| 221 EXPECT_TRUE( |
| 222 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel." |
| 223 "BrowserNotifiedToBeforeGpuSwap2", |
| 224 0)); |
| 225 EXPECT_TRUE( |
| 226 HistogramSizeEq("Event.Latency.ScrollBegin.Wheel.GpuSwap2", 0)); |
| 128 | 227 |
| 129 EXPECT_TRUE(HistogramSizeEq( | 228 EXPECT_TRUE(HistogramSizeEq( |
| 130 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Main", | 229 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Main", |
| 131 rendering_on_main ? 1 : 0)); | 230 rendering_on_main ? 1 : 0)); |
| 132 EXPECT_TRUE(HistogramSizeEq( | 231 EXPECT_TRUE(HistogramSizeEq( |
| 133 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Impl", | 232 "Event.Latency.ScrollUpdate.Wheel.TimeToHandled2_Impl", |
| 134 rendering_on_main ? 0 : 1)); | 233 rendering_on_main ? 0 : 1)); |
| 135 EXPECT_TRUE(HistogramSizeEq( | 234 EXPECT_TRUE(HistogramSizeEq( |
| 136 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Main", | 235 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Main", |
| 137 rendering_on_main ? 1 : 0)); | 236 rendering_on_main ? 1 : 0)); |
| 138 EXPECT_TRUE(HistogramSizeEq( | 237 EXPECT_TRUE(HistogramSizeEq( |
| 139 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", | 238 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", |
| 140 rendering_on_main ? 0 : 1)); | 239 rendering_on_main ? 0 : 1)); |
| 141 EXPECT_TRUE(HistogramSizeEq( | 240 EXPECT_TRUE(HistogramSizeEq( |
| 142 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", | 241 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", |
| 143 1)); | 242 1)); |
| 144 EXPECT_TRUE(HistogramSizeEq( | 243 EXPECT_TRUE(HistogramSizeEq( |
| 145 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", | 244 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 146 1)); | 245 1)); |
| 147 EXPECT_TRUE( | 246 EXPECT_TRUE( |
| 148 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); | 247 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); |
| 149 } | 248 } |
| 150 } | 249 } |
| 151 } | 250 } |
| 152 } | 251 } |
| 153 | 252 |
| 154 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchHistograms) { | 253 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { |
| 155 for (bool rendering_on_main : {false, true}) { | 254 for (bool rendering_on_main : {false, true}) { |
| 156 for (bool is_running_navigation_hint_task : {false, true}) { | 255 for (bool is_running_navigation_hint_task : {false, true}) { |
| 157 ResetHistograms(); | 256 ResetHistograms(); |
| 158 { | 257 { |
| 159 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 258 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 160 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | 259 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); |
| 161 base::TimeTicks now = base::TimeTicks::Now(); | 260 base::TimeTicks now = base::TimeTicks::Now(); |
| 162 scroll.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); | 261 scroll.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); |
| 163 ui::LatencyInfo scroll_latency; | 262 ui::LatencyInfo scroll_latency; |
| 263 scroll_latency.AddLatencyNumberWithTimestamp( |
| 264 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 265 tracker()->latency_component_id(), 0, now, 1); |
| 164 AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now); | 266 AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now); |
| 165 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now); | 267 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now); |
| 166 tracker()->OnInputEvent(scroll, &scroll_latency); | 268 tracker()->OnInputEvent(scroll, &scroll_latency); |
| 167 EXPECT_TRUE(scroll_latency.FindLatency( | 269 EXPECT_TRUE(scroll_latency.FindLatency( |
| 168 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 270 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 169 tracker()->latency_component_id(), nullptr)); | 271 tracker()->latency_component_id(), nullptr)); |
| 170 EXPECT_TRUE(scroll_latency.FindLatency( | 272 EXPECT_TRUE(scroll_latency.FindLatency( |
| 171 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 273 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 172 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | 274 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); |
| 173 tracker()->OnInputEventAck(scroll, &scroll_latency, | 275 tracker()->OnInputEventAck(scroll, &scroll_latency, |
| 174 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 276 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 175 } | 277 } |
| 176 | 278 |
| 177 { | 279 { |
| 178 SyntheticWebTouchEvent touch; | 280 SyntheticWebTouchEvent touch; |
| 179 touch.PressPoint(0, 0); | 281 touch.PressPoint(0, 0); |
| 180 touch.PressPoint(1, 1); | 282 touch.PressPoint(1, 1); |
| 181 ui::LatencyInfo touch_latency(ui::SourceEventType::TOUCH); | 283 ui::LatencyInfo touch_latency(ui::SourceEventType::TOUCH); |
| 182 base::TimeTicks now = base::TimeTicks::Now(); | 284 base::TimeTicks now = base::TimeTicks::Now(); |
| 285 touch_latency.AddLatencyNumberWithTimestamp( |
| 286 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 287 tracker()->latency_component_id(), 0, now, 1); |
| 183 AddFakeComponentsWithTimeStamp(*tracker(), &touch_latency, now); | 288 AddFakeComponentsWithTimeStamp(*tracker(), &touch_latency, now); |
| 184 AddRenderingScheduledComponent(&touch_latency, rendering_on_main, now); | 289 AddRenderingScheduledComponent(&touch_latency, rendering_on_main, now); |
| 185 tracker()->OnInputEvent(touch, &touch_latency); | 290 tracker()->OnInputEvent(touch, &touch_latency); |
| 186 EXPECT_TRUE(touch_latency.FindLatency( | 291 EXPECT_TRUE(touch_latency.FindLatency( |
| 187 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 292 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 188 tracker()->latency_component_id(), nullptr)); | 293 tracker()->latency_component_id(), nullptr)); |
| 189 EXPECT_TRUE(touch_latency.FindLatency( | 294 EXPECT_TRUE(touch_latency.FindLatency( |
| 190 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 295 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 191 EXPECT_EQ(2U, touch_latency.input_coordinates_size()); | 296 EXPECT_EQ(2U, touch_latency.input_coordinates_size()); |
| 192 tracker()->OnInputEventAck(touch, &touch_latency, | 297 tracker()->OnInputEventAck(touch, &touch_latency, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 220 rendering_on_main ? 1 : 0)); | 325 rendering_on_main ? 1 : 0)); |
| 221 EXPECT_TRUE(HistogramSizeEq( | 326 EXPECT_TRUE(HistogramSizeEq( |
| 222 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", | 327 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", |
| 223 rendering_on_main ? 0 : 1)); | 328 rendering_on_main ? 0 : 1)); |
| 224 EXPECT_TRUE(HistogramSizeEq( | 329 EXPECT_TRUE(HistogramSizeEq( |
| 225 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); | 330 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); |
| 226 EXPECT_TRUE(HistogramSizeEq( | 331 EXPECT_TRUE(HistogramSizeEq( |
| 227 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); | 332 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); |
| 228 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); | 333 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); |
| 229 EXPECT_TRUE(HistogramSizeEq( | 334 EXPECT_TRUE(HistogramSizeEq( |
| 230 "Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2", | 335 "Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2", 1)); |
| 231 1)); | |
| 232 | 336 |
| 233 EXPECT_TRUE(HistogramSizeEq( | 337 EXPECT_TRUE(HistogramSizeEq( |
| 234 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2", 0)); | 338 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2", 0)); |
| 235 | 339 |
| 340 EXPECT_TRUE( |
| 341 HistogramSizeEq("Event.Latency.ScrollBegin.Touch.TimeToHandled2_Main", |
| 342 rendering_on_main ? 1 : 0)); |
| 343 EXPECT_TRUE( |
| 344 HistogramSizeEq("Event.Latency.ScrollBegin.Touch.TimeToHandled2_Impl", |
| 345 rendering_on_main ? 0 : 1)); |
| 346 EXPECT_TRUE(HistogramSizeEq( |
| 347 "Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2_Main", |
| 348 rendering_on_main ? 1 : 0)); |
| 349 EXPECT_TRUE(HistogramSizeEq( |
| 350 "Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2_Impl", |
| 351 rendering_on_main ? 0 : 1)); |
| 352 EXPECT_TRUE( |
| 353 HistogramSizeEq("Event.Latency.ScrollBegin.Touch." |
| 354 "RendererSwapToBrowserNotified2", |
| 355 1)); |
| 356 EXPECT_TRUE( |
| 357 HistogramSizeEq("Event.Latency.ScrollBegin.Touch." |
| 358 "BrowserNotifiedToBeforeGpuSwap2", |
| 359 1)); |
| 360 EXPECT_TRUE( |
| 361 HistogramSizeEq("Event.Latency.ScrollBegin.Touch.GpuSwap2", 1)); |
| 362 |
| 363 EXPECT_TRUE(HistogramSizeEq( |
| 364 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Main", 0)); |
| 365 EXPECT_TRUE(HistogramSizeEq( |
| 366 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Impl", 0)); |
| 367 EXPECT_TRUE(HistogramSizeEq( |
| 368 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", 0)); |
| 369 EXPECT_TRUE(HistogramSizeEq( |
| 370 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); |
| 371 EXPECT_TRUE(HistogramSizeEq( |
| 372 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", |
| 373 0)); |
| 374 EXPECT_TRUE(HistogramSizeEq( |
| 375 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", |
| 376 0)); |
| 377 EXPECT_TRUE( |
| 378 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); |
| 379 } |
| 380 } |
| 381 } |
| 382 |
| 383 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { |
| 384 for (bool rendering_on_main : {false, true}) { |
| 385 for (bool is_running_navigation_hint_task : {false, true}) { |
| 386 ResetHistograms(); |
| 387 { |
| 388 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 389 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); |
| 390 base::TimeTicks now = base::TimeTicks::Now(); |
| 391 scroll.timeStampSeconds = (now - base::TimeTicks()).InSecondsF(); |
| 392 ui::LatencyInfo scroll_latency; |
| 393 scroll_latency.AddLatencyNumberWithTimestamp( |
| 394 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 395 tracker()->latency_component_id(), 0, now, 1); |
| 396 AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now); |
| 397 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now); |
| 398 tracker()->OnInputEvent(scroll, &scroll_latency); |
| 399 EXPECT_TRUE(scroll_latency.FindLatency( |
| 400 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 401 tracker()->latency_component_id(), nullptr)); |
| 402 EXPECT_TRUE(scroll_latency.FindLatency( |
| 403 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 404 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); |
| 405 tracker()->OnInputEventAck(scroll, &scroll_latency, |
| 406 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 407 } |
| 408 |
| 409 { |
| 410 SyntheticWebTouchEvent touch; |
| 411 touch.PressPoint(0, 0); |
| 412 touch.PressPoint(1, 1); |
| 413 ui::LatencyInfo touch_latency(ui::SourceEventType::TOUCH); |
| 414 base::TimeTicks now = base::TimeTicks::Now(); |
| 415 touch_latency.AddLatencyNumberWithTimestamp( |
| 416 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, |
| 417 tracker()->latency_component_id(), 0, now, 1); |
| 418 AddFakeComponentsWithTimeStamp(*tracker(), &touch_latency, now); |
| 419 AddRenderingScheduledComponent(&touch_latency, rendering_on_main, now); |
| 420 tracker()->OnInputEvent(touch, &touch_latency); |
| 421 EXPECT_TRUE(touch_latency.FindLatency( |
| 422 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 423 tracker()->latency_component_id(), nullptr)); |
| 424 EXPECT_TRUE(touch_latency.FindLatency( |
| 425 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 426 EXPECT_EQ(2U, touch_latency.input_coordinates_size()); |
| 427 tracker()->OnInputEventAck(touch, &touch_latency, |
| 428 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 429 tracker()->OnFrameSwapped(touch_latency, |
| 430 is_running_navigation_hint_task); |
| 431 } |
| 432 |
| 433 EXPECT_TRUE(HistogramSizeEq( |
| 434 "Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2", 0)); |
| 435 EXPECT_TRUE(HistogramSizeEq( |
| 436 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2", 1)); |
| 437 EXPECT_TRUE(HistogramSizeEq( |
| 438 "Event.Latency.ScrollBegin.Touch.TimeToHandled2_Main", 0)); |
| 439 EXPECT_TRUE(HistogramSizeEq( |
| 440 "Event.Latency.ScrollBegin.Touch.TimeToHandled2_Impl", 0)); |
| 441 EXPECT_TRUE(HistogramSizeEq( |
| 442 "Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2_Main", 0)); |
| 443 EXPECT_TRUE(HistogramSizeEq( |
| 444 "Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2_Impl", 0)); |
| 445 EXPECT_TRUE( |
| 446 HistogramSizeEq("Event.Latency.ScrollBegin.Touch." |
| 447 "RendererSwapToBrowserNotified2", |
| 448 0)); |
| 449 EXPECT_TRUE( |
| 450 HistogramSizeEq("Event.Latency.ScrollBegin.Touch." |
| 451 "BrowserNotifiedToBeforeGpuSwap2", |
| 452 0)); |
| 453 EXPECT_TRUE( |
| 454 HistogramSizeEq("Event.Latency.ScrollBegin.Touch.GpuSwap2", 0)); |
| 455 |
| 236 EXPECT_TRUE(HistogramSizeEq( | 456 EXPECT_TRUE(HistogramSizeEq( |
| 237 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Main", | 457 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Main", |
| 238 rendering_on_main ? 1 : 0)); | 458 rendering_on_main ? 1 : 0)); |
| 239 EXPECT_TRUE(HistogramSizeEq( | 459 EXPECT_TRUE(HistogramSizeEq( |
| 240 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Impl", | 460 "Event.Latency.ScrollUpdate.Touch.TimeToHandled2_Impl", |
| 241 rendering_on_main ? 0 : 1)); | 461 rendering_on_main ? 0 : 1)); |
| 242 EXPECT_TRUE(HistogramSizeEq( | 462 EXPECT_TRUE(HistogramSizeEq( |
| 243 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", | 463 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", |
| 244 rendering_on_main ? 1 : 0)); | 464 rendering_on_main ? 1 : 0)); |
| 245 EXPECT_TRUE(HistogramSizeEq( | 465 EXPECT_TRUE(HistogramSizeEq( |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), | 861 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), |
| 642 ElementsAre(Bucket( | 862 ElementsAre(Bucket( |
| 643 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 863 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
| 644 EXPECT_THAT(histogram_tester().GetAllSamples( | 864 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 645 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), | 865 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), |
| 646 ElementsAre(Bucket( | 866 ElementsAre(Bucket( |
| 647 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 867 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
| 648 } | 868 } |
| 649 | 869 |
| 650 } // namespace content | 870 } // namespace content |
| OLD | NEW |