Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Unified Diff: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc

Issue 2924673004: Add UKM metric tracking for various page load metric observers. (Closed)
Patch Set: update Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
index d71a3de5175449bafd47dea0efbbd9d40aecb48a..d93a403214fcda70c05ad9369667b45edfbc10f4 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -9,8 +9,6 @@
#include "base/optional.h"
#include "base/time/time.h"
#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "components/ukm/test_ukm_recorder.h"
#include "components/ukm/ukm_source.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/network_quality_provider.h"
@@ -57,89 +55,19 @@ class UkmPageLoadMetricsObserverTest
EXPECT_CALL(mock_network_quality_provider_, GetTransportRTT())
.Times(AnyNumber())
.WillRepeatedly(Return(base::Optional<base::TimeDelta>()));
-
- TestingBrowserProcess::GetGlobal()->SetUkmRecorder(&test_ukm_recorder_);
}
- size_t ukm_source_count() { return test_ukm_recorder_.sources_count(); }
-
- size_t ukm_entry_count() { return test_ukm_recorder_.entries_count(); }
-
MockNetworkQualityProvider& mock_network_quality_provider() {
return mock_network_quality_provider_;
}
- const ukm::UkmSource* GetUkmSourceForUrl(const char* url) {
- return test_ukm_recorder_.GetSourceForUrl(url);
- }
-
- const ukm::mojom::UkmEntry* GetUkmEntry(size_t entry_index) {
- return test_ukm_recorder_.GetEntry(entry_index);
- }
-
- std::vector<const ukm::mojom::UkmEntry*> GetUkmEntriesForSourceID(
- ukm::SourceId source_id) {
- std::vector<const ukm::mojom::UkmEntry*> entries;
- for (size_t i = 0; i < ukm_entry_count(); ++i) {
- const ukm::mojom::UkmEntry* entry = GetUkmEntry(i);
- if (entry->source_id == source_id)
- entries.push_back(entry);
- }
- return entries;
- }
-
- // Provides a single merged ukm::mojom::UkmEntry proto that contains all
- // metrics from the given |entries|. |entries| must be non-empty, and all
- // |entries| must have the same |source_id| and |event_hash|.
- ukm::mojom::UkmEntryPtr GetMergedEntry(
- const std::vector<const ukm::mojom::UkmEntry*>& entries) {
- EXPECT_FALSE(entries.empty());
- ukm::mojom::UkmEntryPtr merged_entry = ukm::mojom::UkmEntry::New();
- for (const auto* entry : entries) {
- if (merged_entry->event_hash) {
- EXPECT_EQ(merged_entry->source_id, entry->source_id);
- EXPECT_EQ(merged_entry->event_hash, entry->event_hash);
- } else {
- merged_entry->event_hash = entry->event_hash;
- merged_entry->source_id = entry->source_id;
- }
- for (const auto& metric : entry->metrics) {
- merged_entry->metrics.emplace_back(metric->Clone());
- }
- }
- return merged_entry;
- }
-
- ukm::mojom::UkmEntryPtr GetMergedEntryForSourceID(ukm::SourceId source_id) {
- ukm::mojom::UkmEntryPtr entry =
- GetMergedEntry(GetUkmEntriesForSourceID(source_id));
- EXPECT_EQ(source_id, entry->source_id);
- EXPECT_NE(0UL, entry->event_hash);
- return entry;
- }
-
- static bool HasMetric(const char* name,
- const ukm::mojom::UkmEntry* entry) WARN_UNUSED_RESULT {
- return ukm::TestUkmRecorder::FindMetric(entry, name) != nullptr;
- }
-
- static void ExpectMetric(const char* name,
- int64_t expected_value,
- const ukm::mojom::UkmEntry* entry) {
- const ukm::mojom::UkmMetric* metric =
- ukm::TestUkmRecorder::FindMetric(entry, name);
- EXPECT_NE(nullptr, metric) << "Failed to find metric: " << name;
- EXPECT_EQ(expected_value, metric->value);
- }
-
private:
MockNetworkQualityProvider mock_network_quality_provider_;
- ukm::TestUkmRecorder test_ukm_recorder_;
};
TEST_F(UkmPageLoadMetricsObserverTest, NoMetrics) {
- EXPECT_EQ(0ul, ukm_source_count());
- EXPECT_EQ(0ul, ukm_entry_count());
+ EXPECT_EQ(0ul, ukm_tester().sources_count());
+ EXPECT_EQ(0ul, ukm_tester().entries_count());
}
TEST_F(UkmPageLoadMetricsObserverTest, Basic) {
@@ -166,25 +94,28 @@ TEST_F(UkmPageLoadMetricsObserverTest, Basic) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(1ul, ukm_source_count());
- const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+ EXPECT_EQ(1ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
EXPECT_EQ(GURL(kTestUrl1), source->url());
- EXPECT_GE(ukm_entry_count(), 1ul);
- ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
- EXPECT_EQ(entry->source_id, source->id());
- EXPECT_EQ(entry->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry->metrics.empty());
- ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK,
- entry.get());
- ExpectMetric(internal::kUkmParseStartName, 100, entry.get());
- ExpectMetric(internal::kUkmDomContentLoadedName, 200, entry.get());
- ExpectMetric(internal::kUkmFirstPaintName, 250, entry.get());
- ExpectMetric(internal::kUkmFirstContentfulPaintName, 300, entry.get());
- ExpectMetric(internal::kUkmLoadEventName, 500, entry.get());
- EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry.get()));
- EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
+ EXPECT_GE(ukm_tester().entries_count(), 1ul);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmPageTransition,
+ ui::PAGE_TRANSITION_LINK);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmParseStartName, 100);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmDomContentLoadedName, 200);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstPaintName, 250);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstContentfulPaintName, 300);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmLoadEventName, 500);
+ EXPECT_FALSE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstMeaningfulPaintName));
+ EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmForegroundDurationName));
}
TEST_F(UkmPageLoadMetricsObserverTest, FailedProvisionalLoad) {
@@ -201,28 +132,30 @@ TEST_F(UkmPageLoadMetricsObserverTest, FailedProvisionalLoad) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(1ul, ukm_source_count());
- const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+ EXPECT_EQ(1ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
EXPECT_EQ(GURL(kTestUrl1), source->url());
- EXPECT_GE(ukm_entry_count(), 1ul);
- ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
- EXPECT_EQ(entry->source_id, source->id());
- EXPECT_EQ(entry->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
+ EXPECT_GE(ukm_tester().entries_count(), 1ul);
// Make sure that only the following metrics are logged. In particular, no
// paint/document/etc timing metrics should be logged for failed provisional
// loads.
- EXPECT_EQ(5ul, entry->metrics.size());
- ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK,
- entry.get());
- ExpectMetric(internal::kUkmEffectiveConnectionType,
- net::EFFECTIVE_CONNECTION_TYPE_2G, entry.get());
- ExpectMetric(internal::kUkmNetErrorCode,
- static_cast<int64_t>(net::ERR_TIMED_OUT) * -1, entry.get());
- EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
- EXPECT_TRUE(HasMetric(internal::kUkmFailedProvisionaLoadName, entry.get()));
+ EXPECT_EQ(
+ 5, ukm_tester().CountMetrics(*source, internal::kUkmPageLoadEventName));
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmPageTransition,
+ ui::PAGE_TRANSITION_LINK);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmEffectiveConnectionType,
+ net::EFFECTIVE_CONNECTION_TYPE_2G);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmNetErrorCode,
+ static_cast<int64_t>(net::ERR_TIMED_OUT) * -1);
+ EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmForegroundDurationName));
+ EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmFailedProvisionaLoadName));
}
TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) {
@@ -239,18 +172,15 @@ TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(1ul, ukm_source_count());
- const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+ EXPECT_EQ(1ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
EXPECT_EQ(GURL(kTestUrl1), source->url());
- EXPECT_GE(ukm_entry_count(), 1ul);
- ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
- EXPECT_EQ(entry->source_id, source->id());
- EXPECT_EQ(entry->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry->metrics.empty());
- ExpectMetric(internal::kUkmFirstMeaningfulPaintName, 600, entry.get());
- EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
+ EXPECT_GE(ukm_tester().entries_count(), 1ul);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstMeaningfulPaintName, 600);
+ EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmForegroundDurationName));
}
TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) {
@@ -276,34 +206,30 @@ TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(2ul, ukm_source_count());
- const ukm::UkmSource* source1 = GetUkmSourceForUrl(kTestUrl1);
- const ukm::UkmSource* source2 = GetUkmSourceForUrl(kTestUrl2);
+ EXPECT_EQ(2ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source1 = ukm_tester().GetSourceForUrl(kTestUrl1);
+ const ukm::UkmSource* source2 = ukm_tester().GetSourceForUrl(kTestUrl2);
EXPECT_EQ(GURL(kTestUrl1), source1->url());
EXPECT_EQ(GURL(kTestUrl2), source2->url());
EXPECT_NE(source1->id(), source2->id());
- EXPECT_GE(ukm_entry_count(), 2ul);
- ukm::mojom::UkmEntryPtr entry1 = GetMergedEntryForSourceID(source1->id());
- ukm::mojom::UkmEntryPtr entry2 = GetMergedEntryForSourceID(source2->id());
- EXPECT_NE(entry1->source_id, entry2->source_id);
-
- EXPECT_EQ(entry1->source_id, source1->id());
- EXPECT_EQ(entry1->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry1->metrics.empty());
- ExpectMetric(internal::kUkmFirstContentfulPaintName, 200, entry1.get());
- EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry2.get()));
- EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry1.get()));
-
- EXPECT_EQ(entry2->source_id, source2->id());
- EXPECT_EQ(entry2->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry2->metrics.empty());
- EXPECT_FALSE(HasMetric(internal::kUkmParseStartName, entry2.get()));
- EXPECT_FALSE(HasMetric(internal::kUkmFirstContentfulPaintName, entry2.get()));
- EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry2.get()));
- EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry2.get()));
+ EXPECT_GE(ukm_tester().entries_count(), 2ul);
+
+ ukm_tester().ExpectMetric(*source1, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstContentfulPaintName, 200);
+ EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstMeaningfulPaintName));
+ EXPECT_TRUE(ukm_tester().HasMetric(*source1, internal::kUkmPageLoadEventName,
+ internal::kUkmForegroundDurationName));
+
+ EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+ internal::kUkmParseStartName));
+ EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstContentfulPaintName));
+ EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+ internal::kUkmFirstMeaningfulPaintName));
+ EXPECT_TRUE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+ internal::kUkmForegroundDurationName));
}
TEST_F(UkmPageLoadMetricsObserverTest, NetworkQualityEstimates) {
@@ -319,20 +245,18 @@ TEST_F(UkmPageLoadMetricsObserverTest, NetworkQualityEstimates) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(1ul, ukm_source_count());
- const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+ EXPECT_EQ(1ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
EXPECT_EQ(GURL(kTestUrl1), source->url());
- EXPECT_GE(ukm_entry_count(), 1ul);
- ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
- EXPECT_EQ(entry->source_id, source->id());
- EXPECT_EQ(entry->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry->metrics.empty());
- ExpectMetric(internal::kUkmEffectiveConnectionType,
- net::EFFECTIVE_CONNECTION_TYPE_3G, entry.get());
- ExpectMetric(internal::kUkmHttpRttEstimate, 100, entry.get());
- ExpectMetric(internal::kUkmTransportRttEstimate, 200, entry.get());
+ EXPECT_GE(ukm_tester().entries_count(), 1ul);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmEffectiveConnectionType,
+ net::EFFECTIVE_CONNECTION_TYPE_3G);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmHttpRttEstimate, 100);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmTransportRttEstimate, 200);
}
TEST_F(UkmPageLoadMetricsObserverTest, PageTransitionReload) {
@@ -343,16 +267,12 @@ TEST_F(UkmPageLoadMetricsObserverTest, PageTransitionReload) {
// Simulate closing the tab.
DeleteContents();
- EXPECT_EQ(1ul, ukm_source_count());
- const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+ EXPECT_EQ(1ul, ukm_tester().sources_count());
+ const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
EXPECT_EQ(GURL(kTestUrl1), source->url());
- EXPECT_GE(ukm_entry_count(), 1ul);
- ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
- EXPECT_EQ(entry->source_id, source->id());
- EXPECT_EQ(entry->event_hash,
- base::HashMetricName(internal::kUkmPageLoadEventName));
- EXPECT_FALSE(entry->metrics.empty());
- ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_RELOAD,
- entry.get());
+ EXPECT_GE(ukm_tester().entries_count(), 1ul);
+ ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+ internal::kUkmPageTransition,
+ ui::PAGE_TRANSITION_RELOAD);
}

Powered by Google App Engine
This is Rietveld 408576698