Chromium Code Reviews| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 histogram_tester_->GetAllSamples(histogram_name).size(); | 65 histogram_tester_->GetAllSamples(histogram_name).size(); |
| 66 if (static_cast<uint64_t>(size) == histogram_size) { | 66 if (static_cast<uint64_t>(size) == histogram_size) { |
| 67 return ::testing::AssertionSuccess(); | 67 return ::testing::AssertionSuccess(); |
| 68 } else { | 68 } else { |
| 69 return ::testing::AssertionFailure() << histogram_name << " expected " | 69 return ::testing::AssertionFailure() << histogram_name << " expected " |
| 70 << size << " entries, but had " | 70 << size << " entries, but had " |
| 71 << histogram_size; | 71 << histogram_size; |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 void HistogramTotalCountEq(const std::string& name, int count) { | |
|
tdresser
2016/08/24 12:48:57
Since this contains an expectation, it should have
lanwei
2016/08/25 04:17:11
Done.
| |
| 76 histogram_tester_->ExpectTotalCount(name, count); | |
| 77 } | |
| 78 | |
| 75 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } | 79 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } |
| 76 void ResetHistograms() { | 80 void ResetHistograms() { |
| 77 histogram_tester_.reset(new base::HistogramTester()); | 81 histogram_tester_.reset(new base::HistogramTester()); |
| 78 } | 82 } |
| 79 | 83 |
| 80 const base::HistogramTester& histogram_tester() { | 84 const base::HistogramTester& histogram_tester() { |
| 81 return *histogram_tester_; | 85 return *histogram_tester_; |
| 82 } | 86 } |
| 83 | 87 |
| 84 private: | 88 private: |
| 85 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 89 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
| 86 const int kTestRoutingId = 3; | 90 const int kTestRoutingId = 3; |
| 87 const int kTestProcessId = 1; | 91 const int kTestProcessId = 1; |
| 88 std::unique_ptr<base::HistogramTester> histogram_tester_; | 92 std::unique_ptr<base::HistogramTester> histogram_tester_; |
| 89 RenderWidgetHostLatencyTracker tracker_; | 93 RenderWidgetHostLatencyTracker tracker_; |
| 90 }; | 94 }; |
| 91 | 95 |
| 92 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { | 96 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { |
| 93 for (bool rendering_on_main : { false, true }) { | 97 for (bool rendering_on_main : {false, true}) { |
| 94 for (bool is_running_navigation_hint_task : {false, true}) { | 98 for (bool is_running_navigation_hint_task : {false, true}) { |
| 95 ResetHistograms(); | 99 ResetHistograms(); |
| 96 { | 100 { |
| 97 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 101 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 98 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | 102 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); |
| 99 scroll.timeStampSeconds = | 103 scroll.timeStampSeconds = |
| 100 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); | 104 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
| 101 ui::LatencyInfo scroll_latency; | 105 ui::LatencyInfo scroll_latency; |
| 102 AddFakeComponents(*tracker(), &scroll_latency); | 106 scroll_latency.AddLatencyNumber( |
| 107 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0); | |
| 103 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); | 108 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); |
| 104 tracker()->OnInputEvent(scroll, &scroll_latency); | 109 tracker()->OnInputEvent(scroll, &scroll_latency); |
| 105 EXPECT_TRUE(scroll_latency.FindLatency( | 110 EXPECT_TRUE(scroll_latency.FindLatency( |
| 106 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 111 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 107 tracker()->latency_component_id(), nullptr)); | 112 tracker()->latency_component_id(), nullptr)); |
| 108 EXPECT_TRUE(scroll_latency.FindLatency( | 113 EXPECT_TRUE(scroll_latency.FindLatency( |
| 109 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 114 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 110 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | 115 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); |
| 111 tracker()->OnInputEventAck(scroll, &scroll_latency, | 116 tracker()->OnInputEventAck(scroll, &scroll_latency, |
| 112 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 117 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 EXPECT_TRUE( | 165 EXPECT_TRUE( |
| 161 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin_" | 166 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin_" |
| 162 "IsRunningNavigationHintTask", | 167 "IsRunningNavigationHintTask", |
| 163 is_running_navigation_hint_task ? 1 : 0)); | 168 is_running_navigation_hint_task ? 1 : 0)); |
| 164 EXPECT_TRUE( | 169 EXPECT_TRUE( |
| 165 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); | 170 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); |
| 166 EXPECT_TRUE( | 171 EXPECT_TRUE( |
| 167 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin_" | 172 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin_" |
| 168 "IsRunningNavigationHintTask", | 173 "IsRunningNavigationHintTask", |
| 169 is_running_navigation_hint_task ? 1 : 0)); | 174 is_running_navigation_hint_task ? 1 : 0)); |
| 175 EXPECT_TRUE(HistogramSizeEq( | |
| 176 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Main", | |
| 177 rendering_on_main ? 1 : 0)); | |
| 178 EXPECT_TRUE(HistogramSizeEq( | |
| 179 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Impl", | |
| 180 rendering_on_main ? 0 : 1)); | |
| 181 EXPECT_TRUE(HistogramSizeEq( | |
| 182 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", | |
| 183 rendering_on_main ? 1 : 0)); | |
| 184 EXPECT_TRUE(HistogramSizeEq( | |
| 185 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", | |
| 186 rendering_on_main ? 0 : 1)); | |
| 187 EXPECT_TRUE(HistogramSizeEq( | |
| 188 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 1)); | |
| 189 EXPECT_TRUE(HistogramSizeEq( | |
| 190 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); | |
| 191 EXPECT_TRUE( | |
| 192 HistogramSizeEq("Event.Latency.FirstScrollUpdate.GpuSwap", 1)); | |
| 170 EXPECT_TRUE( | 193 EXPECT_TRUE( |
| 171 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", | 194 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", |
| 172 rendering_on_main ? 1 : 0)); | 195 rendering_on_main ? 1 : 0)); |
| 173 EXPECT_TRUE( | 196 EXPECT_TRUE( |
| 174 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", | 197 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", |
| 175 rendering_on_main ? 0 : 1)); | 198 rendering_on_main ? 0 : 1)); |
| 176 EXPECT_TRUE(HistogramSizeEq( | 199 EXPECT_TRUE(HistogramSizeEq( |
| 177 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", | 200 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", |
| 178 rendering_on_main ? 1 : 0)); | 201 rendering_on_main ? 1 : 0)); |
| 179 EXPECT_TRUE(HistogramSizeEq( | 202 EXPECT_TRUE(HistogramSizeEq( |
| 180 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", | 203 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", |
| 181 rendering_on_main ? 0 : 1)); | 204 rendering_on_main ? 0 : 1)); |
| 182 EXPECT_TRUE(HistogramSizeEq( | 205 EXPECT_TRUE(HistogramSizeEq( |
| 183 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); | 206 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); |
| 184 EXPECT_TRUE(HistogramSizeEq( | 207 EXPECT_TRUE(HistogramSizeEq( |
| 185 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); | 208 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); |
| 186 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); | 209 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); |
| 210 | |
| 211 { | |
| 212 auto second_scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | |
| 213 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | |
| 214 ui::LatencyInfo scroll_latency; | |
| 215 scroll_latency.AddLatencyNumber( | |
| 216 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0); | |
| 217 scroll_latency.AddLatencyNumber( | |
| 218 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); | |
| 219 scroll_latency.AddLatencyNumber( | |
| 220 ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0, 0); | |
| 221 scroll_latency.AddLatencyNumber( | |
| 222 ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 0); | |
| 223 scroll_latency.AddLatencyNumber( | |
| 224 ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0, 0); | |
| 225 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); | |
| 226 tracker()->OnInputEvent(second_scroll, &scroll_latency); | |
| 227 EXPECT_TRUE(scroll_latency.FindLatency( | |
| 228 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | |
| 229 tracker()->latency_component_id(), nullptr)); | |
| 230 EXPECT_TRUE(scroll_latency.FindLatency( | |
| 231 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | |
| 232 EXPECT_FALSE(scroll_latency.FindLatency( | |
| 233 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, 0, | |
| 234 nullptr)); | |
| 235 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | |
| 236 tracker()->OnInputEventAck(second_scroll, &scroll_latency, | |
| 237 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 238 tracker()->OnFrameSwapped(scroll_latency, | |
| 239 is_running_navigation_hint_task); | |
| 240 } | |
| 241 | |
| 242 HistogramTotalCountEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", | |
| 243 1); | |
| 244 HistogramTotalCountEq( | |
| 245 "Event.Latency.TouchToFirstScrollUpdateSwapBegin_" | |
| 246 "IsRunningNavigationHintTask", | |
| 247 is_running_navigation_hint_task ? 1 : 0); | |
| 248 HistogramTotalCountEq("Event.Latency.TouchToScrollUpdateSwapBegin", 2); | |
| 249 HistogramTotalCountEq( | |
| 250 "Event.Latency.TouchToScrollUpdateSwapBegin_" | |
| 251 "IsRunningNavigationHintTask", | |
| 252 is_running_navigation_hint_task ? 2 : 0); | |
| 253 HistogramTotalCountEq( | |
| 254 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Main", | |
| 255 rendering_on_main ? 1 : 0); | |
| 256 HistogramTotalCountEq( | |
| 257 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Impl", | |
| 258 rendering_on_main ? 0 : 1); | |
| 259 HistogramTotalCountEq( | |
| 260 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", | |
| 261 rendering_on_main ? 1 : 0); | |
| 262 HistogramTotalCountEq( | |
| 263 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", | |
| 264 rendering_on_main ? 0 : 1); | |
| 265 HistogramTotalCountEq( | |
| 266 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 1); | |
| 267 HistogramTotalCountEq( | |
| 268 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1); | |
| 269 HistogramTotalCountEq("Event.Latency.FirstScrollUpdate.GpuSwap", 1); | |
| 270 HistogramTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", | |
| 271 rendering_on_main ? 2 : 0); | |
| 272 HistogramTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", | |
| 273 rendering_on_main ? 0 : 2); | |
| 274 HistogramTotalCountEq( | |
| 275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", | |
| 276 rendering_on_main ? 2 : 0); | |
| 277 HistogramTotalCountEq( | |
| 278 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", | |
| 279 rendering_on_main ? 0 : 2); | |
| 280 HistogramTotalCountEq( | |
| 281 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 2); | |
| 282 HistogramTotalCountEq( | |
| 283 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 2); | |
| 284 HistogramTotalCountEq("Event.Latency.ScrollUpdate.GpuSwap", 2); | |
| 187 } | 285 } |
| 188 } | 286 } |
| 189 } | 287 } |
| 190 | 288 |
| 191 TEST_F(RenderWidgetHostLatencyTrackerTest, | 289 TEST_F(RenderWidgetHostLatencyTrackerTest, |
| 192 LatencyTerminatedOnAckIfRenderingNotScheduled) { | 290 LatencyTerminatedOnAckIfRenderingNotScheduled) { |
| 193 { | 291 { |
| 194 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( | 292 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( |
| 195 5.f, -5.f, blink::WebGestureDeviceTouchscreen); | 293 5.f, -5.f, blink::WebGestureDeviceTouchscreen); |
| 196 ui::LatencyInfo scroll_latency; | 294 ui::LatencyInfo scroll_latency; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 EXPECT_TRUE(key_latency.terminated()); | 356 EXPECT_TRUE(key_latency.terminated()); |
| 259 } | 357 } |
| 260 | 358 |
| 261 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); | 359 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
| 262 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); | 360 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); |
| 263 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); | 361 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
| 264 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); | 362 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); |
| 265 EXPECT_TRUE( | 363 EXPECT_TRUE( |
| 266 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); | 364 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); |
| 267 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); | 365 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); |
| 366 EXPECT_TRUE(HistogramSizeEq( | |
| 367 "Event.Latency.FirstScrollUpdate.TouchToHandled_Main", 0)); | |
| 368 EXPECT_TRUE(HistogramSizeEq( | |
| 369 "Event.Latency.FirstScrollUpdate.TouchToHandled_Impl", 0)); | |
| 370 EXPECT_TRUE(HistogramSizeEq( | |
| 371 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", 0)); | |
| 372 EXPECT_TRUE(HistogramSizeEq( | |
| 373 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", 0)); | |
| 374 EXPECT_TRUE(HistogramSizeEq( | |
| 375 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 0)); | |
| 376 EXPECT_TRUE(HistogramSizeEq( | |
| 377 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 0)); | |
| 378 EXPECT_TRUE(HistogramSizeEq("Event.Latency.FirstScrollUpdate.GpuSwap", 0)); | |
| 268 EXPECT_TRUE( | 379 EXPECT_TRUE( |
| 269 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0)); | 380 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0)); |
| 270 EXPECT_TRUE( | 381 EXPECT_TRUE( |
| 271 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0)); | 382 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0)); |
| 272 EXPECT_TRUE(HistogramSizeEq( | 383 EXPECT_TRUE(HistogramSizeEq( |
| 273 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0)); | 384 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0)); |
| 274 EXPECT_TRUE(HistogramSizeEq( | 385 EXPECT_TRUE(HistogramSizeEq( |
| 275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0)); | 386 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0)); |
| 276 EXPECT_TRUE(HistogramSizeEq( | 387 EXPECT_TRUE(HistogramSizeEq( |
| 277 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0)); | 388 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0)); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 572 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), | 683 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), |
| 573 ElementsAre(Bucket( | 684 ElementsAre(Bucket( |
| 574 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 685 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
| 575 EXPECT_THAT(histogram_tester().GetAllSamples( | 686 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 576 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), | 687 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), |
| 577 ElementsAre(Bucket( | 688 ElementsAre(Bucket( |
| 578 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 689 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
| 579 } | 690 } |
| 580 | 691 |
| 581 } // namespace content | 692 } // namespace content |
| OLD | NEW |