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 "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::UkmRecorder* GetUkmRecorder() override { return &test_ukm_recorder_; } | |
| 87 | |
| 88 ukm::TestUkmRecorder* GetTestUkmRecorder() { return &test_ukm_recorder_; } | |
| 89 | |
| 80 private: | 90 private: |
| 81 rappor::TestRapporServiceImpl rappor_service_; | 91 rappor::TestRapporServiceImpl rappor_service_; |
| 92 ukm::TestUkmRecorder test_ukm_recorder_; | |
| 82 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient); | 93 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient); |
| 83 }; | 94 }; |
| 84 | 95 |
| 85 class RenderWidgetHostLatencyTrackerTest | 96 class RenderWidgetHostLatencyTrackerTest |
| 86 : public RenderViewHostImplTestHarness { | 97 : public RenderViewHostImplTestHarness { |
| 87 public: | 98 public: |
| 88 RenderWidgetHostLatencyTrackerTest() : old_browser_client_(NULL) { | 99 RenderWidgetHostLatencyTrackerTest() : old_browser_client_(NULL) { |
| 89 tracker_.Initialize(kTestRoutingId, kTestProcessId); | 100 tracker_.Initialize(kTestRoutingId, kTestProcessId); |
| 90 ResetHistograms(); | 101 ResetHistograms(); |
| 91 } | 102 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 126 return ::testing::AssertionSuccess(); | 137 return ::testing::AssertionSuccess(); |
| 127 } else { | 138 } else { |
| 128 if (!sample_obj) | 139 if (!sample_obj) |
| 129 return ::testing::AssertionSuccess(); | 140 return ::testing::AssertionSuccess(); |
| 130 else | 141 else |
| 131 return ::testing::AssertionFailure() << rappor_name | 142 return ::testing::AssertionFailure() << rappor_name |
| 132 << " rappor sample should be null"; | 143 << " rappor sample should be null"; |
| 133 } | 144 } |
| 134 } | 145 } |
| 135 | 146 |
| 147 ::testing::AssertionResult UkmReportAssert(const char* event_name) { | |
| 148 const ukm::TestUkmRecorder* ukm_recoder = | |
| 149 test_browser_client_.GetTestUkmRecorder(); | |
| 150 size_t expected_metrics_index = 0; | |
|
tdresser
2017/05/30 16:52:07
It isn't clear from the name what this is.
Navid Zolghadr
2017/05/31 20:37:15
renamed.
| |
| 151 for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) { | |
|
tdresser
2017/05/30 16:52:07
Could this be a range based for?
Navid Zolghadr
2017/05/31 20:37:15
It seems that ukm_recorder is not (and does not re
tdresser
2017/06/01 12:44:44
Acknowledged.
| |
| 152 const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i); | |
| 153 if (entry->event_hash != base::HashMetricName(event_name)) | |
| 154 continue; | |
| 155 | |
| 156 const ukm::UkmSource* source = | |
| 157 ukm_recoder->GetSourceForSourceId(entry->source_id); | |
| 158 if (!source) | |
| 159 return ::testing::AssertionFailure() << "Source should not be null"; | |
| 160 | |
| 161 if (expected_metrics_index >= 1) | |
| 162 break; | |
| 163 | |
| 164 if (GURL(kUrl) != source->url()) | |
| 165 return ::testing::AssertionFailure() << "Incorrect URL is reported."; | |
| 166 | |
| 167 expected_metrics_index++; | |
| 168 if (entry->metrics.size() != 1) | |
| 169 return ::testing::AssertionFailure() | |
| 170 << event_name << " entry expected only 1 metric but got " | |
| 171 << entry->metrics.size(); | |
| 172 | |
| 173 if (entry->metrics[0]->metric_hash != base::HashMetricName("Latency")) | |
| 174 return ::testing::AssertionFailure() | |
| 175 << "Expected a metric named 'Latency'"; | |
| 176 } | |
| 177 if (expected_metrics_index != 1) | |
| 178 return ::testing::AssertionFailure() | |
| 179 << event_name << " expected " << 1 << " entries but got " | |
| 180 << expected_metrics_index; | |
| 181 return ::testing::AssertionSuccess(); | |
| 182 } | |
| 183 | |
| 136 ::testing::AssertionResult HistogramSizeEq(const char* histogram_name, | 184 ::testing::AssertionResult HistogramSizeEq(const char* histogram_name, |
| 137 int size) { | 185 int size) { |
| 138 uint64_t histogram_size = | 186 uint64_t histogram_size = |
| 139 histogram_tester_->GetAllSamples(histogram_name).size(); | 187 histogram_tester_->GetAllSamples(histogram_name).size(); |
| 140 if (static_cast<uint64_t>(size) == histogram_size) { | 188 if (static_cast<uint64_t>(size) == histogram_size) { |
| 141 return ::testing::AssertionSuccess(); | 189 return ::testing::AssertionSuccess(); |
| 142 } else { | 190 } else { |
| 143 return ::testing::AssertionFailure() << histogram_name << " expected " | 191 return ::testing::AssertionFailure() << histogram_name << " expected " |
| 144 << size << " entries, but had " | 192 << size << " entries, but had " |
| 145 << histogram_size; | 193 << histogram_size; |
| 146 } | 194 } |
| 147 } | 195 } |
| 148 | 196 |
| 149 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } | 197 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } |
| 150 void ResetHistograms() { | 198 void ResetHistograms() { |
| 151 histogram_tester_.reset(new base::HistogramTester()); | 199 histogram_tester_.reset(new base::HistogramTester()); |
| 200 test_browser_client_.GetTestUkmRecorder()->Purge(); | |
| 152 } | 201 } |
| 153 | 202 |
| 154 const base::HistogramTester& histogram_tester() { | 203 const base::HistogramTester& histogram_tester() { |
| 155 return *histogram_tester_; | 204 return *histogram_tester_; |
| 156 } | 205 } |
| 157 | 206 |
| 158 void SetUp() override { | 207 void SetUp() override { |
| 159 RenderViewHostImplTestHarness::SetUp(); | 208 RenderViewHostImplTestHarness::SetUp(); |
| 160 old_browser_client_ = SetBrowserClientForTesting(&test_browser_client_); | 209 old_browser_client_ = SetBrowserClientForTesting(&test_browser_client_); |
| 161 tracker_.SetDelegate(contents()); | 210 tracker_.SetDelegate(contents()); |
| 162 } | 211 } |
| 163 | 212 |
| 164 void TearDown() override { | 213 void TearDown() override { |
| 165 SetBrowserClientForTesting(old_browser_client_); | 214 SetBrowserClientForTesting(old_browser_client_); |
| 166 RenderViewHostImplTestHarness::TearDown(); | 215 RenderViewHostImplTestHarness::TearDown(); |
| 167 } | 216 } |
| 168 | 217 |
| 169 protected: | 218 protected: |
| 170 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 219 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
| 171 const int kTestRoutingId = 3; | 220 const int kTestRoutingId = 3; |
| 172 const int kTestProcessId = 1; | 221 const int kTestProcessId = 1; |
| 173 std::unique_ptr<base::HistogramTester> histogram_tester_; | 222 std::unique_ptr<base::HistogramTester> histogram_tester_; |
| 174 RenderWidgetHostLatencyTracker tracker_; | 223 RenderWidgetHostLatencyTracker tracker_; |
| 175 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_; | 224 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_; |
| 176 ContentBrowserClient* old_browser_client_; | 225 ContentBrowserClient* old_browser_client_; |
| 177 }; | 226 }; |
| 178 | 227 |
| 179 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { | 228 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { |
| 180 const GURL url("http://www.foo.bar.com/subpage/1"); | 229 const GURL url(kUrl); |
| 181 contents()->NavigateAndCommit(url); | 230 contents()->NavigateAndCommit(url); |
| 182 for (bool rendering_on_main : {false, true}) { | 231 for (bool rendering_on_main : {false, true}) { |
| 183 ResetHistograms(); | 232 ResetHistograms(); |
| 184 { | 233 { |
| 185 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 234 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 186 blink::WebMouseWheelEvent::kPhaseChanged); | 235 blink::WebMouseWheelEvent::kPhaseChanged); |
| 187 base::TimeTicks now = base::TimeTicks::Now(); | 236 base::TimeTicks now = base::TimeTicks::Now(); |
| 188 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); | 237 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); |
| 189 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); | 238 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); |
| 190 wheel_latency.AddLatencyNumberWithTimestamp( | 239 wheel_latency.AddLatencyNumberWithTimestamp( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 EXPECT_TRUE(HistogramSizeEq( | 307 EXPECT_TRUE(HistogramSizeEq( |
| 259 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", 0)); | 308 "Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2_Impl", 0)); |
| 260 EXPECT_TRUE(HistogramSizeEq( | 309 EXPECT_TRUE(HistogramSizeEq( |
| 261 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", | 310 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", |
| 262 0)); | 311 0)); |
| 263 EXPECT_TRUE(HistogramSizeEq( | 312 EXPECT_TRUE(HistogramSizeEq( |
| 264 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", | 313 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 265 0)); | 314 0)); |
| 266 EXPECT_TRUE( | 315 EXPECT_TRUE( |
| 267 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); | 316 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); |
| 317 | |
| 318 ukm::TestUkmRecorder* test_ukm_recorder = | |
| 319 test_browser_client_.GetTestUkmRecorder(); | |
| 320 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); | |
| 321 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); | |
| 268 } | 322 } |
| 269 } | 323 } |
| 270 } | 324 } |
| 271 | 325 |
| 272 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { | 326 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { |
| 273 for (bool rendering_on_main : {false, true}) { | 327 for (bool rendering_on_main : {false, true}) { |
| 274 ResetHistograms(); | 328 ResetHistograms(); |
| 275 { | 329 { |
| 276 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( | 330 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( |
| 277 blink::WebMouseWheelEvent::kPhaseChanged); | 331 blink::WebMouseWheelEvent::kPhaseChanged); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 EXPECT_TRUE(HistogramSizeEq( | 390 EXPECT_TRUE(HistogramSizeEq( |
| 337 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", | 391 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", |
| 338 1)); | 392 1)); |
| 339 EXPECT_TRUE( | 393 EXPECT_TRUE( |
| 340 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); | 394 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); |
| 341 } | 395 } |
| 342 } | 396 } |
| 343 } | 397 } |
| 344 | 398 |
| 345 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { | 399 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { |
| 346 const GURL url("http://www.foo.bar.com/subpage/1"); | 400 const GURL url(kUrl); |
| 347 contents()->NavigateAndCommit(url); | 401 contents()->NavigateAndCommit(url); |
| 348 for (bool rendering_on_main : {false, true}) { | 402 for (bool rendering_on_main : {false, true}) { |
| 349 ResetHistograms(); | 403 ResetHistograms(); |
| 350 { | 404 { |
| 351 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 405 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
| 352 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); | 406 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); |
| 353 base::TimeTicks now = base::TimeTicks::Now(); | 407 base::TimeTicks now = base::TimeTicks::Now(); |
| 354 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); | 408 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); |
| 355 ui::LatencyInfo scroll_latency; | 409 ui::LatencyInfo scroll_latency; |
| 356 scroll_latency.AddLatencyNumberWithTimestamp( | 410 scroll_latency.AddLatencyNumberWithTimestamp( |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 448 EXPECT_TRUE(HistogramSizeEq( | 502 EXPECT_TRUE(HistogramSizeEq( |
| 449 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", 0)); | 503 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Main", 0)); |
| 450 EXPECT_TRUE(HistogramSizeEq( | 504 EXPECT_TRUE(HistogramSizeEq( |
| 451 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); | 505 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); |
| 452 EXPECT_TRUE(HistogramSizeEq( | 506 EXPECT_TRUE(HistogramSizeEq( |
| 453 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0)); | 507 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0)); |
| 454 EXPECT_TRUE(HistogramSizeEq( | 508 EXPECT_TRUE(HistogramSizeEq( |
| 455 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0)); | 509 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0)); |
| 456 EXPECT_TRUE( | 510 EXPECT_TRUE( |
| 457 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); | 511 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); |
| 512 | |
| 513 ukm::TestUkmRecorder* test_ukm_recorder = | |
| 514 test_browser_client_.GetTestUkmRecorder(); | |
| 515 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); | |
| 516 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); | |
| 458 } | 517 } |
| 459 } | 518 } |
| 460 | 519 |
| 461 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { | 520 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { |
| 462 const GURL url("http://www.foo.bar.com/subpage/1"); | 521 const GURL url(kUrl); |
| 463 contents()->NavigateAndCommit(url); | 522 contents()->NavigateAndCommit(url); |
| 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()); |
| (...skipping 28 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 EXPECT_TRUE(UkmReportAssert( | |
| 572 "Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2")); | |
| 573 | |
| 511 // Rappor metrics. | 574 // Rappor metrics. |
| 512 EXPECT_TRUE( | 575 EXPECT_TRUE( |
| 513 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." | 576 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." |
| 514 "TimeToScrollUpdateSwapBegin2", | 577 "TimeToScrollUpdateSwapBegin2", |
| 515 2)); | 578 2)); |
| 516 EXPECT_TRUE( | 579 EXPECT_TRUE( |
| 517 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." | 580 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." |
| 518 "TimeToScrollUpdateSwapBegin2", | 581 "TimeToScrollUpdateSwapBegin2", |
| 519 0)); | 582 0)); |
| 520 EXPECT_TRUE( | 583 EXPECT_TRUE( |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 558 rendering_on_main ? 1 : 0)); | 621 rendering_on_main ? 1 : 0)); |
| 559 EXPECT_TRUE(HistogramSizeEq( | 622 EXPECT_TRUE(HistogramSizeEq( |
| 560 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", | 623 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", |
| 561 rendering_on_main ? 0 : 1)); | 624 rendering_on_main ? 0 : 1)); |
| 562 EXPECT_TRUE(HistogramSizeEq( | 625 EXPECT_TRUE(HistogramSizeEq( |
| 563 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 1)); | 626 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 1)); |
| 564 EXPECT_TRUE(HistogramSizeEq( | 627 EXPECT_TRUE(HistogramSizeEq( |
| 565 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1)); | 628 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1)); |
| 566 EXPECT_TRUE( | 629 EXPECT_TRUE( |
| 567 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1)); | 630 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1)); |
| 631 | |
| 632 ukm::TestUkmRecorder* test_ukm_recorder = | |
| 633 test_browser_client_.GetTestUkmRecorder(); | |
| 634 EXPECT_EQ(1U, test_ukm_recorder->sources_count()); | |
| 635 EXPECT_EQ(1U, test_ukm_recorder->entries_count()); | |
|
tdresser
2017/05/30 16:52:07
Should we be using UkmReportAssert here?
Navid Zolghadr
2017/05/31 20:37:15
It is used earlier in the function. I got rid of t
| |
| 568 } | 636 } |
| 569 } | 637 } |
| 570 | 638 |
| 571 TEST_F(RenderWidgetHostLatencyTrackerTest, | 639 TEST_F(RenderWidgetHostLatencyTrackerTest, |
| 572 LatencyTerminatedOnAckIfRenderingNotScheduled) { | 640 LatencyTerminatedOnAckIfRenderingNotScheduled) { |
| 573 { | 641 { |
| 574 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( | 642 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( |
| 575 5.f, -5.f, blink::kWebGestureDeviceTouchscreen); | 643 5.f, -5.f, blink::kWebGestureDeviceTouchscreen); |
| 576 ui::LatencyInfo scroll_latency; | 644 ui::LatencyInfo scroll_latency; |
| 577 AddFakeComponents(*tracker(), &scroll_latency); | 645 AddFakeComponents(*tracker(), &scroll_latency); |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1198 | 1266 |
| 1199 tracker()->OnInputEventAck(wheel_event, &latency, ack_state); | 1267 tracker()->OnInputEventAck(wheel_event, &latency, ack_state); |
| 1200 } | 1268 } |
| 1201 | 1269 |
| 1202 EXPECT_THAT(histogram_tester().GetAllSamples( | 1270 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 1203 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"), | 1271 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"), |
| 1204 ElementsAre(Bucket(14, 1))); | 1272 ElementsAre(Bucket(14, 1))); |
| 1205 } | 1273 } |
| 1206 | 1274 |
| 1207 } // namespace content | 1275 } // namespace content |
| OLD | NEW |