| 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 "content/browser/renderer_host/input/render_widget_host_latency_tracker
.h" |
| 6 #include "base/metrics/metrics_hashes.h" |
| 5 #include "base/test/histogram_tester.h" | 7 #include "base/test/histogram_tester.h" |
| 8 #include "components/metrics/proto/ukm/entry.pb.h" |
| 6 #include "components/rappor/public/rappor_utils.h" | 9 #include "components/rappor/public/rappor_utils.h" |
| 7 #include "components/rappor/test_rappor_service.h" | 10 #include "components/rappor/test_rappor_service.h" |
| 8 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker
.h" | 11 #include "components/ukm/test_ukm_recorder.h" |
| 12 #include "components/ukm/ukm_source.h" |
| 9 #include "content/common/input/synthetic_web_input_event_builders.h" | 13 #include "content/common/input/synthetic_web_input_event_builders.h" |
| 10 #include "content/public/browser/native_web_keyboard_event.h" | 14 #include "content/public/browser/native_web_keyboard_event.h" |
| 11 #include "content/test/test_content_browser_client.h" | 15 #include "content/test/test_content_browser_client.h" |
| 12 #include "content/test/test_render_view_host.h" | 16 #include "content/test/test_render_view_host.h" |
| 13 #include "content/test/test_web_contents.h" | 17 #include "content/test/test_web_contents.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 20 |
| 17 using base::Bucket; | 21 using base::Bucket; |
| 18 using blink::WebInputEvent; | 22 using blink::WebInputEvent; |
| 19 using testing::ElementsAre; | 23 using testing::ElementsAre; |
| 20 | 24 |
| 21 namespace content { | 25 namespace content { |
| 22 namespace { | 26 namespace { |
| 23 | 27 |
| 28 const char kUrl[] = "http://www.foo.bar.com/subpage/1"; |
| 29 |
| 24 void AddFakeComponentsWithTimeStamp( | 30 void AddFakeComponentsWithTimeStamp( |
| 25 const RenderWidgetHostLatencyTracker& tracker, | 31 const RenderWidgetHostLatencyTracker& tracker, |
| 26 ui::LatencyInfo* latency, | 32 ui::LatencyInfo* latency, |
| 27 base::TimeTicks time_stamp) { | 33 base::TimeTicks time_stamp) { |
| 28 latency->AddLatencyNumberWithTimestamp(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, | 34 latency->AddLatencyNumberWithTimestamp(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, |
| 29 0, 0, time_stamp, 1); | 35 0, 0, time_stamp, 1); |
| 30 latency->AddLatencyNumberWithTimestamp( | 36 latency->AddLatencyNumberWithTimestamp( |
| 31 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, time_stamp, | 37 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0, time_stamp, |
| 32 1); | 38 1); |
| 33 latency->AddLatencyNumberWithTimestamp( | 39 latency->AddLatencyNumberWithTimestamp( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 ~RenderWidgetHostLatencyTrackerTestBrowserClient() override {} | 76 ~RenderWidgetHostLatencyTrackerTestBrowserClient() override {} |
| 71 | 77 |
| 72 rappor::RapporService* GetRapporService() override { | 78 rappor::RapporService* GetRapporService() override { |
| 73 return &rappor_service_; | 79 return &rappor_service_; |
| 74 } | 80 } |
| 75 | 81 |
| 76 rappor::TestRapporServiceImpl* getTestRapporService() { | 82 rappor::TestRapporServiceImpl* getTestRapporService() { |
| 77 return &rappor_service_; | 83 return &rappor_service_; |
| 78 } | 84 } |
| 79 | 85 |
| 86 ukm::TestUkmRecorder* GetTestUkmRecorder() { return &test_ukm_recorder_; } |
| 87 |
| 80 private: | 88 private: |
| 81 rappor::TestRapporServiceImpl rappor_service_; | 89 rappor::TestRapporServiceImpl rappor_service_; |
| 90 ukm::TestUkmRecorder test_ukm_recorder_; |
| 82 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient); | 91 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient); |
| 83 }; | 92 }; |
| 84 | 93 |
| 85 class RenderWidgetHostLatencyTrackerTest | 94 class RenderWidgetHostLatencyTrackerTest |
| 86 : public RenderViewHostImplTestHarness { | 95 : public RenderViewHostImplTestHarness { |
| 87 public: | 96 public: |
| 88 RenderWidgetHostLatencyTrackerTest() : old_browser_client_(NULL) { | 97 RenderWidgetHostLatencyTrackerTest() : old_browser_client_(NULL) { |
| 89 tracker_.Initialize(kTestRoutingId, kTestProcessId); | 98 tracker_.Initialize(kTestRoutingId, kTestProcessId); |
| 90 ResetHistograms(); | 99 ResetHistograms(); |
| 91 } | 100 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 return ::testing::AssertionSuccess(); | 135 return ::testing::AssertionSuccess(); |
| 127 } else { | 136 } else { |
| 128 if (!sample_obj) | 137 if (!sample_obj) |
| 129 return ::testing::AssertionSuccess(); | 138 return ::testing::AssertionSuccess(); |
| 130 else | 139 else |
| 131 return ::testing::AssertionFailure() << rappor_name | 140 return ::testing::AssertionFailure() << rappor_name |
| 132 << " rappor sample should be null"; | 141 << " rappor sample should be null"; |
| 133 } | 142 } |
| 134 } | 143 } |
| 135 | 144 |
| 145 ::testing::AssertionResult AssertUkmReported(const char* event_name, |
| 146 const char* metric_name) { |
| 147 const ukm::TestUkmRecorder* ukm_recoder = |
| 148 test_browser_client_.GetTestUkmRecorder(); |
| 149 size_t actual_event_count = 0; |
| 150 for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) { |
| 151 const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i); |
| 152 if (entry->event_hash != base::HashMetricName(event_name)) |
| 153 continue; |
| 154 |
| 155 const ukm::UkmSource* source = |
| 156 ukm_recoder->GetSourceForSourceId(entry->source_id); |
| 157 if (!source) |
| 158 return ::testing::AssertionFailure() << "Source should not be null"; |
| 159 |
| 160 if (actual_event_count >= 1) |
| 161 break; |
| 162 |
| 163 if (GURL(kUrl) != source->url()) |
| 164 return ::testing::AssertionFailure() << "Incorrect URL is reported."; |
| 165 |
| 166 actual_event_count++; |
| 167 if (entry->metrics.size() != 1) |
| 168 return ::testing::AssertionFailure() |
| 169 << event_name << " entry expected only 1 metric but got " |
| 170 << entry->metrics.size(); |
| 171 |
| 172 if (entry->metrics[0]->metric_hash != base::HashMetricName(metric_name)) |
| 173 return ::testing::AssertionFailure() |
| 174 << "Expected a metric named " << metric_name; |
| 175 } |
| 176 if (actual_event_count != 1) |
| 177 return ::testing::AssertionFailure() |
| 178 << event_name << " expected " << 1 << " entry but got " |
| 179 << actual_event_count; |
| 180 return ::testing::AssertionSuccess(); |
| 181 } |
| 182 |
| 136 ::testing::AssertionResult HistogramSizeEq(const char* histogram_name, | 183 ::testing::AssertionResult HistogramSizeEq(const char* histogram_name, |
| 137 int size) { | 184 int size) { |
| 138 uint64_t histogram_size = | 185 uint64_t histogram_size = |
| 139 histogram_tester_->GetAllSamples(histogram_name).size(); | 186 histogram_tester_->GetAllSamples(histogram_name).size(); |
| 140 if (static_cast<uint64_t>(size) == histogram_size) { | 187 if (static_cast<uint64_t>(size) == histogram_size) { |
| 141 return ::testing::AssertionSuccess(); | 188 return ::testing::AssertionSuccess(); |
| 142 } else { | 189 } else { |
| 143 return ::testing::AssertionFailure() << histogram_name << " expected " | 190 return ::testing::AssertionFailure() << histogram_name << " expected " |
| 144 << size << " entries, but had " | 191 << size << " entries, but had " |
| 145 << histogram_size; | 192 << histogram_size; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 157 | 204 |
| 158 void SetUp() override { | 205 void SetUp() override { |
| 159 RenderViewHostImplTestHarness::SetUp(); | 206 RenderViewHostImplTestHarness::SetUp(); |
| 160 old_browser_client_ = SetBrowserClientForTesting(&test_browser_client_); | 207 old_browser_client_ = SetBrowserClientForTesting(&test_browser_client_); |
| 161 tracker_.SetDelegate(contents()); | 208 tracker_.SetDelegate(contents()); |
| 162 } | 209 } |
| 163 | 210 |
| 164 void TearDown() override { | 211 void TearDown() override { |
| 165 SetBrowserClientForTesting(old_browser_client_); | 212 SetBrowserClientForTesting(old_browser_client_); |
| 166 RenderViewHostImplTestHarness::TearDown(); | 213 RenderViewHostImplTestHarness::TearDown(); |
| 214 test_browser_client_.GetTestUkmRecorder()->Purge(); |
| 167 } | 215 } |
| 168 | 216 |
| 169 protected: | 217 protected: |
| 170 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 218 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
| 171 const int kTestRoutingId = 3; | 219 const int kTestRoutingId = 3; |
| 172 const int kTestProcessId = 1; | 220 const int kTestProcessId = 1; |
| 173 std::unique_ptr<base::HistogramTester> histogram_tester_; | 221 std::unique_ptr<base::HistogramTester> histogram_tester_; |
| 174 RenderWidgetHostLatencyTracker tracker_; | 222 RenderWidgetHostLatencyTracker tracker_; |
| 175 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_; | 223 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_; |
| 176 ContentBrowserClient* old_browser_client_; | 224 ContentBrowserClient* old_browser_client_; |
| 177 }; | 225 }; |
| 178 | 226 |
| 179 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { | 227 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { |
| 180 const GURL url("http://www.foo.bar.com/subpage/1"); | 228 const GURL url(kUrl); |
| 181 contents()->NavigateAndCommit(url); | 229 contents()->NavigateAndCommit(url); |
| 182 for (bool rendering_on_main : {false, true}) { | 230 for (bool rendering_on_main : {false, true}) { |
| 183 ResetHistograms(); | 231 ResetHistograms(); |
| 184 { | 232 { |
| 185 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 233 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 186 blink::WebMouseWheelEvent::kPhaseChanged); | 234 blink::WebMouseWheelEvent::kPhaseChanged); |
| 187 base::TimeTicks now = base::TimeTicks::Now(); | 235 base::TimeTicks now = base::TimeTicks::Now(); |
| 188 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); | 236 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); |
| 189 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); | 237 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); |
| 190 wheel_latency.AddLatencyNumberWithTimestamp( | 238 wheel_latency.AddLatencyNumberWithTimestamp( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 EXPECT_TRUE(HistogramSizeEq( | 306 EXPECT_TRUE(HistogramSizeEq( |
| 259 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", 0)); | 307 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", 0)); |
| 260 EXPECT_TRUE(HistogramSizeEq( | 308 EXPECT_TRUE(HistogramSizeEq( |
| 261 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", | 309 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", |
| 262 0)); | 310 0)); |
| 263 EXPECT_TRUE(HistogramSizeEq( | 311 EXPECT_TRUE(HistogramSizeEq( |
| 264 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", | 312 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 265 0)); | 313 0)); |
| 266 EXPECT_TRUE( | 314 EXPECT_TRUE( |
| 267 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); | 315 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); |
| 316 |
| 317 ukm::TestUkmRecorder* test_ukm_recorder = |
| 318 test_browser_client_.GetTestUkmRecorder(); |
| 319 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); |
| 320 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); |
| 268 } | 321 } |
| 269 } | 322 } |
| 270 } | 323 } |
| 271 | 324 |
| 272 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { | 325 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { |
| 273 for (bool rendering_on_main : {false, true}) { | 326 for (bool rendering_on_main : {false, true}) { |
| 274 ResetHistograms(); | 327 ResetHistograms(); |
| 275 { | 328 { |
| 276 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 329 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 277 blink::WebMouseWheelEvent::kPhaseChanged); | 330 blink::WebMouseWheelEvent::kPhaseChanged); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 EXPECT_TRUE(HistogramSizeEq( | 389 EXPECT_TRUE(HistogramSizeEq( |
| 337 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", | 390 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 338 1)); | 391 1)); |
| 339 EXPECT_TRUE( | 392 EXPECT_TRUE( |
| 340 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); | 393 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); |
| 341 } | 394 } |
| 342 } | 395 } |
| 343 } | 396 } |
| 344 | 397 |
| 345 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { | 398 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { |
| 346 const GURL url("http://www.foo.bar.com/subpage/1"); | 399 const GURL url(kUrl); |
| 347 contents()->NavigateAndCommit(url); | 400 contents()->NavigateAndCommit(url); |
| 348 for (bool rendering_on_main : {false, true}) { | 401 for (bool rendering_on_main : {false, true}) { |
| 349 ResetHistograms(); | 402 ResetHistograms(); |
| 350 { | 403 { |
| 351 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 404 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 352 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); | 405 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); |
| 353 base::TimeTicks now = base::TimeTicks::Now(); | 406 base::TimeTicks now = base::TimeTicks::Now(); |
| 354 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); | 407 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); |
| 355 ui::LatencyInfo scroll_latency; | 408 ui::LatencyInfo scroll_latency; |
| 356 scroll_latency.AddLatencyNumberWithTimestamp( | 409 scroll_latency.AddLatencyNumberWithTimestamp( |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 EXPECT_TRUE(HistogramSizeEq( | 501 EXPECT_TRUE(HistogramSizeEq( |
| 449 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", 0)); | 502 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", 0)); |
| 450 EXPECT_TRUE(HistogramSizeEq( | 503 EXPECT_TRUE(HistogramSizeEq( |
| 451 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); | 504 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); |
| 452 EXPECT_TRUE(HistogramSizeEq( | 505 EXPECT_TRUE(HistogramSizeEq( |
| 453 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0)); | 506 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0)); |
| 454 EXPECT_TRUE(HistogramSizeEq( | 507 EXPECT_TRUE(HistogramSizeEq( |
| 455 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0)); | 508 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0)); |
| 456 EXPECT_TRUE( | 509 EXPECT_TRUE( |
| 457 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); | 510 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); |
| 511 |
| 512 ukm::TestUkmRecorder* test_ukm_recorder = |
| 513 test_browser_client_.GetTestUkmRecorder(); |
| 514 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); |
| 515 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); |
| 458 } | 516 } |
| 459 } | 517 } |
| 460 | 518 |
| 461 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { | 519 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { |
| 462 const GURL url("http://www.foo.bar.com/subpage/1"); | 520 const GURL url(kUrl); |
| 463 contents()->NavigateAndCommit(url); | 521 contents()->NavigateAndCommit(url); |
| 522 size_t total_ukm_entry_count = 0; |
| 464 for (bool rendering_on_main : {false, true}) { | 523 for (bool rendering_on_main : {false, true}) { |
| 465 ResetHistograms(); | 524 ResetHistograms(); |
| 466 EXPECT_EQ(0, | 525 EXPECT_EQ(0, |
| 467 test_browser_client_.getTestRapporService()->GetReportsCount()); | 526 test_browser_client_.getTestRapporService()->GetReportsCount()); |
| 468 { | 527 { |
| 469 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 528 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 470 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); | 529 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); |
| 471 base::TimeTicks now = base::TimeTicks::Now(); | 530 base::TimeTicks now = base::TimeTicks::Now(); |
| 472 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); | 531 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); |
| 473 ui::LatencyInfo scroll_latency; | 532 ui::LatencyInfo scroll_latency; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 501 EXPECT_TRUE(touch_latency.FindLatency( | 560 EXPECT_TRUE(touch_latency.FindLatency( |
| 502 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 561 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 503 tracker()->latency_component_id(), nullptr)); | 562 tracker()->latency_component_id(), nullptr)); |
| 504 EXPECT_TRUE(touch_latency.FindLatency( | 563 EXPECT_TRUE(touch_latency.FindLatency( |
| 505 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 564 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
| 506 tracker()->OnInputEventAck(touch, &touch_latency, | 565 tracker()->OnInputEventAck(touch, &touch_latency, |
| 507 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 566 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 508 tracker()->OnGpuSwapBuffersCompleted(touch_latency); | 567 tracker()->OnGpuSwapBuffersCompleted(touch_latency); |
| 509 } | 568 } |
| 510 | 569 |
| 570 // UKM metrics. |
| 571 total_ukm_entry_count++; |
| 572 EXPECT_TRUE(AssertUkmReported("Event.ScrollUpdate.Touch", |
| 573 "TimeToScrollUpdateSwapBegin")); |
| 574 |
| 511 // Rappor metrics. | 575 // Rappor metrics. |
| 512 EXPECT_TRUE( | 576 EXPECT_TRUE( |
| 513 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." | 577 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." |
| 514 "TimeToScrollUpdateSwapBegin2", | 578 "TimeToScrollUpdateSwapBegin2", |
| 515 2)); | 579 2)); |
| 516 EXPECT_TRUE( | 580 EXPECT_TRUE( |
| 517 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." | 581 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." |
| 518 "TimeToScrollUpdateSwapBegin2", | 582 "TimeToScrollUpdateSwapBegin2", |
| 519 0)); | 583 0)); |
| 520 EXPECT_TRUE( | 584 EXPECT_TRUE( |
| 521 RapporSampleAssert("Event.Latency.ScrollBegin.Wheel." | 585 RapporSampleAssert("Event.Latency.ScrollBegin.Wheel." |
| 522 "TimeToScrollUpdateSwapBegin2", | 586 "TimeToScrollUpdateSwapBegin2", |
| 523 0)); | 587 0)); |
| 588 |
| 524 EXPECT_EQ(2, | 589 EXPECT_EQ(2, |
| 525 test_browser_client_.getTestRapporService()->GetReportsCount()); | 590 test_browser_client_.getTestRapporService()->GetReportsCount()); |
| 526 | 591 |
| 527 // UMA histograms. | 592 // UMA histograms. |
| 528 EXPECT_TRUE(HistogramSizeEq( | 593 EXPECT_TRUE(HistogramSizeEq( |
| 529 "Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2", 0)); | 594 "Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2", 0)); |
| 530 EXPECT_TRUE(HistogramSizeEq( | 595 EXPECT_TRUE(HistogramSizeEq( |
| 531 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2", 1)); | 596 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2", 1)); |
| 532 EXPECT_TRUE(HistogramSizeEq( | 597 EXPECT_TRUE(HistogramSizeEq( |
| 533 "Event.Latency.ScrollBegin.Touch.TimeToHandled2_Main", 0)); | 598 "Event.Latency.ScrollBegin.Touch.TimeToHandled2_Main", 0)); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 558 rendering_on_main ? 1 : 0)); | 623 rendering_on_main ? 1 : 0)); |
| 559 EXPECT_TRUE(HistogramSizeEq( | 624 EXPECT_TRUE(HistogramSizeEq( |
| 560 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", | 625 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", |
| 561 rendering_on_main ? 0 : 1)); | 626 rendering_on_main ? 0 : 1)); |
| 562 EXPECT_TRUE(HistogramSizeEq( | 627 EXPECT_TRUE(HistogramSizeEq( |
| 563 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 1)); | 628 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 1)); |
| 564 EXPECT_TRUE(HistogramSizeEq( | 629 EXPECT_TRUE(HistogramSizeEq( |
| 565 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1)); | 630 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1)); |
| 566 EXPECT_TRUE( | 631 EXPECT_TRUE( |
| 567 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1)); | 632 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1)); |
| 633 |
| 634 ukm::TestUkmRecorder* test_ukm_recorder = |
| 635 test_browser_client_.GetTestUkmRecorder(); |
| 636 EXPECT_EQ(1U, test_ukm_recorder->sources_count()); |
| 637 EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count()); |
| 568 } | 638 } |
| 569 } | 639 } |
| 570 | 640 |
| 571 TEST_F(RenderWidgetHostLatencyTrackerTest, | 641 TEST_F(RenderWidgetHostLatencyTrackerTest, |
| 572 LatencyTerminatedOnAckIfRenderingNotScheduled) { | 642 LatencyTerminatedOnAckIfRenderingNotScheduled) { |
| 573 { | 643 { |
| 574 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( | 644 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( |
| 575 5.f, -5.f, blink::kWebGestureDeviceTouchscreen); | 645 5.f, -5.f, blink::kWebGestureDeviceTouchscreen); |
| 576 ui::LatencyInfo scroll_latency; | 646 ui::LatencyInfo scroll_latency; |
| 577 AddFakeComponents(*tracker(), &scroll_latency); | 647 AddFakeComponents(*tracker(), &scroll_latency); |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1198 | 1268 |
| 1199 tracker()->OnInputEventAck(wheel_event, &latency, ack_state); | 1269 tracker()->OnInputEventAck(wheel_event, &latency, ack_state); |
| 1200 } | 1270 } |
| 1201 | 1271 |
| 1202 EXPECT_THAT(histogram_tester().GetAllSamples( | 1272 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 1203 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"), | 1273 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"), |
| 1204 ElementsAre(Bucket(14, 1))); | 1274 ElementsAre(Bucket(14, 1))); |
| 1205 } | 1275 } |
| 1206 | 1276 |
| 1207 } // namespace content | 1277 } // namespace content |
| OLD | NEW |