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); |
} |