| Index: content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
|
| index 7655c4c9523a2ea4fa1022ccc0b7cc7439cf29c9..d1e1448f0caab9acee2591bb3035ffc8eedd0bac 100644
|
| --- a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
|
| +++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
|
| @@ -2,10 +2,14 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "content/browser/renderer_host/input/render_widget_host_latency_tracker.h"
|
| +#include "base/metrics/metrics_hashes.h"
|
| #include "base/test/histogram_tester.h"
|
| +#include "components/metrics/proto/ukm/entry.pb.h"
|
| #include "components/rappor/public/rappor_utils.h"
|
| #include "components/rappor/test_rappor_service.h"
|
| -#include "content/browser/renderer_host/input/render_widget_host_latency_tracker.h"
|
| +#include "components/ukm/test_ukm_recorder.h"
|
| +#include "components/ukm/ukm_source.h"
|
| #include "content/common/input/synthetic_web_input_event_builders.h"
|
| #include "content/public/browser/native_web_keyboard_event.h"
|
| #include "content/test/test_content_browser_client.h"
|
| @@ -21,6 +25,8 @@ using testing::ElementsAre;
|
| namespace content {
|
| namespace {
|
|
|
| +const char kUrl[] = "http://www.foo.bar.com/subpage/1";
|
| +
|
| void AddFakeComponentsWithTimeStamp(
|
| const RenderWidgetHostLatencyTracker& tracker,
|
| ui::LatencyInfo* latency,
|
| @@ -77,8 +83,11 @@ class RenderWidgetHostLatencyTrackerTestBrowserClient
|
| return &rappor_service_;
|
| }
|
|
|
| + ukm::TestUkmRecorder* GetTestUkmRecorder() { return &test_ukm_recorder_; }
|
| +
|
| private:
|
| rappor::TestRapporServiceImpl rappor_service_;
|
| + ukm::TestUkmRecorder test_ukm_recorder_;
|
| DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient);
|
| };
|
|
|
| @@ -133,6 +142,44 @@ class RenderWidgetHostLatencyTrackerTest
|
| }
|
| }
|
|
|
| + ::testing::AssertionResult AssertUkmReported(const char* event_name,
|
| + const char* metric_name) {
|
| + const ukm::TestUkmRecorder* ukm_recoder =
|
| + test_browser_client_.GetTestUkmRecorder();
|
| + size_t actual_event_count = 0;
|
| + for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) {
|
| + const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i);
|
| + if (entry->event_hash != base::HashMetricName(event_name))
|
| + continue;
|
| +
|
| + const ukm::UkmSource* source =
|
| + ukm_recoder->GetSourceForSourceId(entry->source_id);
|
| + if (!source)
|
| + return ::testing::AssertionFailure() << "Source should not be null";
|
| +
|
| + if (actual_event_count >= 1)
|
| + break;
|
| +
|
| + if (GURL(kUrl) != source->url())
|
| + return ::testing::AssertionFailure() << "Incorrect URL is reported.";
|
| +
|
| + actual_event_count++;
|
| + if (entry->metrics.size() != 1)
|
| + return ::testing::AssertionFailure()
|
| + << event_name << " entry expected only 1 metric but got "
|
| + << entry->metrics.size();
|
| +
|
| + if (entry->metrics[0]->metric_hash != base::HashMetricName(metric_name))
|
| + return ::testing::AssertionFailure()
|
| + << "Expected a metric named " << metric_name;
|
| + }
|
| + if (actual_event_count != 1)
|
| + return ::testing::AssertionFailure()
|
| + << event_name << " expected " << 1 << " entry but got "
|
| + << actual_event_count;
|
| + return ::testing::AssertionSuccess();
|
| + }
|
| +
|
| ::testing::AssertionResult HistogramSizeEq(const char* histogram_name,
|
| int size) {
|
| uint64_t histogram_size =
|
| @@ -164,6 +211,7 @@ class RenderWidgetHostLatencyTrackerTest
|
| void TearDown() override {
|
| SetBrowserClientForTesting(old_browser_client_);
|
| RenderViewHostImplTestHarness::TearDown();
|
| + test_browser_client_.GetTestUkmRecorder()->Purge();
|
| }
|
|
|
| protected:
|
| @@ -177,7 +225,7 @@ class RenderWidgetHostLatencyTrackerTest
|
| };
|
|
|
| TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) {
|
| - const GURL url("http://www.foo.bar.com/subpage/1");
|
| + const GURL url(kUrl);
|
| contents()->NavigateAndCommit(url);
|
| for (bool rendering_on_main : {false, true}) {
|
| ResetHistograms();
|
| @@ -265,6 +313,11 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) {
|
| 0));
|
| EXPECT_TRUE(
|
| HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0));
|
| +
|
| + ukm::TestUkmRecorder* test_ukm_recorder =
|
| + test_browser_client_.GetTestUkmRecorder();
|
| + EXPECT_EQ(0U, test_ukm_recorder->sources_count());
|
| + EXPECT_EQ(0U, test_ukm_recorder->entries_count());
|
| }
|
| }
|
| }
|
| @@ -343,7 +396,7 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) {
|
| }
|
|
|
| TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) {
|
| - const GURL url("http://www.foo.bar.com/subpage/1");
|
| + const GURL url(kUrl);
|
| contents()->NavigateAndCommit(url);
|
| for (bool rendering_on_main : {false, true}) {
|
| ResetHistograms();
|
| @@ -455,12 +508,18 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) {
|
| "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0));
|
| EXPECT_TRUE(
|
| HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0));
|
| +
|
| + ukm::TestUkmRecorder* test_ukm_recorder =
|
| + test_browser_client_.GetTestUkmRecorder();
|
| + EXPECT_EQ(0U, test_ukm_recorder->sources_count());
|
| + EXPECT_EQ(0U, test_ukm_recorder->entries_count());
|
| }
|
| }
|
|
|
| TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) {
|
| - const GURL url("http://www.foo.bar.com/subpage/1");
|
| + const GURL url(kUrl);
|
| contents()->NavigateAndCommit(url);
|
| + size_t total_ukm_entry_count = 0;
|
| for (bool rendering_on_main : {false, true}) {
|
| ResetHistograms();
|
| EXPECT_EQ(0,
|
| @@ -508,6 +567,11 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) {
|
| tracker()->OnGpuSwapBuffersCompleted(touch_latency);
|
| }
|
|
|
| + // UKM metrics.
|
| + total_ukm_entry_count++;
|
| + EXPECT_TRUE(AssertUkmReported("Event.ScrollUpdate.Touch",
|
| + "TimeToScrollUpdateSwapBegin"));
|
| +
|
| // Rappor metrics.
|
| EXPECT_TRUE(
|
| RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
|
| @@ -521,6 +585,7 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) {
|
| RapporSampleAssert("Event.Latency.ScrollBegin.Wheel."
|
| "TimeToScrollUpdateSwapBegin2",
|
| 0));
|
| +
|
| EXPECT_EQ(2,
|
| test_browser_client_.getTestRapporService()->GetReportsCount());
|
|
|
| @@ -565,6 +630,11 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) {
|
| "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1));
|
| EXPECT_TRUE(
|
| HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1));
|
| +
|
| + ukm::TestUkmRecorder* test_ukm_recorder =
|
| + test_browser_client_.GetTestUkmRecorder();
|
| + EXPECT_EQ(1U, test_ukm_recorder->sources_count());
|
| + EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
|
| }
|
| }
|
|
|
|
|