OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_obser
ver.h" | 5 #include "chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_obser
ver.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "base/metrics/metrics_hashes.h" | 8 #include "base/metrics/metrics_hashes.h" |
9 #include "base/optional.h" | 9 #include "base/optional.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 TEST_F(UkmPageLoadMetricsObserverTest, NoMetrics) { | 169 TEST_F(UkmPageLoadMetricsObserverTest, NoMetrics) { |
170 EXPECT_EQ(0ul, ukm_source_count()); | 170 EXPECT_EQ(0ul, ukm_source_count()); |
171 EXPECT_EQ(0ul, ukm_entry_count()); | 171 EXPECT_EQ(0ul, ukm_entry_count()); |
172 } | 172 } |
173 | 173 |
174 TEST_F(UkmPageLoadMetricsObserverTest, Basic) { | 174 TEST_F(UkmPageLoadMetricsObserverTest, Basic) { |
175 // PageLoadTiming with all recorded metrics other than FMP. This allows us to | 175 // PageLoadTiming with all recorded metrics other than FMP. This allows us to |
176 // verify both that all metrics are logged, and that we don't log metrics that | 176 // verify both that all metrics are logged, and that we don't log metrics that |
177 // aren't present in the PageLoadTiming struct. Logging of FMP is verified in | 177 // aren't present in the PageLoadTiming struct. Logging of FMP is verified in |
178 // the FirstMeaningfulPaint test below. | 178 // the FirstMeaningfulPaint test below. |
179 page_load_metrics::PageLoadTiming timing; | 179 page_load_metrics::mojom::PageLoadTiming timing; |
| 180 page_load_metrics::InitPageLoadTimingForTest(&timing); |
180 timing.navigation_start = base::Time::FromDoubleT(1); | 181 timing.navigation_start = base::Time::FromDoubleT(1); |
181 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(100); | 182 timing.parse_timing->parse_start = base::TimeDelta::FromMilliseconds(100); |
182 timing.document_timing.dom_content_loaded_event_start = | 183 timing.document_timing->dom_content_loaded_event_start = |
183 base::TimeDelta::FromMilliseconds(200); | 184 base::TimeDelta::FromMilliseconds(200); |
184 timing.paint_timing.first_contentful_paint = | 185 timing.paint_timing->first_contentful_paint = |
185 base::TimeDelta::FromMilliseconds(300); | 186 base::TimeDelta::FromMilliseconds(300); |
186 timing.document_timing.load_event_start = | 187 timing.document_timing->load_event_start = |
187 base::TimeDelta::FromMilliseconds(500); | 188 base::TimeDelta::FromMilliseconds(500); |
188 PopulateRequiredTimingFields(&timing); | 189 PopulateRequiredTimingFields(&timing); |
189 | 190 |
190 NavigateAndCommit(GURL(kTestUrl1)); | 191 NavigateAndCommit(GURL(kTestUrl1)); |
191 SimulateTimingUpdate(timing); | 192 SimulateTimingUpdate(timing); |
192 | 193 |
193 // Simulate closing the tab. | 194 // Simulate closing the tab. |
194 DeleteContents(); | 195 DeleteContents(); |
195 | 196 |
196 EXPECT_EQ(1ul, ukm_source_count()); | 197 EXPECT_EQ(1ul, ukm_source_count()); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 ExpectMetric(internal::kUkmNetErrorCode, | 252 ExpectMetric(internal::kUkmNetErrorCode, |
252 static_cast<int64_t>(net::ERR_TIMED_OUT) * -1, | 253 static_cast<int64_t>(net::ERR_TIMED_OUT) * -1, |
253 entry_proto.metrics()); | 254 entry_proto.metrics()); |
254 EXPECT_TRUE( | 255 EXPECT_TRUE( |
255 HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); | 256 HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); |
256 EXPECT_TRUE( | 257 EXPECT_TRUE( |
257 HasMetric(internal::kUkmFailedProvisionaLoadName, entry_proto.metrics())); | 258 HasMetric(internal::kUkmFailedProvisionaLoadName, entry_proto.metrics())); |
258 } | 259 } |
259 | 260 |
260 TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) { | 261 TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) { |
261 page_load_metrics::PageLoadTiming timing; | 262 page_load_metrics::mojom::PageLoadTiming timing; |
| 263 page_load_metrics::InitPageLoadTimingForTest(&timing); |
262 timing.navigation_start = base::Time::FromDoubleT(1); | 264 timing.navigation_start = base::Time::FromDoubleT(1); |
263 timing.paint_timing.first_meaningful_paint = | 265 timing.paint_timing->first_meaningful_paint = |
264 base::TimeDelta::FromMilliseconds(600); | 266 base::TimeDelta::FromMilliseconds(600); |
265 PopulateRequiredTimingFields(&timing); | 267 PopulateRequiredTimingFields(&timing); |
266 | 268 |
267 NavigateAndCommit(GURL(kTestUrl1)); | 269 NavigateAndCommit(GURL(kTestUrl1)); |
268 SimulateTimingUpdate(timing); | 270 SimulateTimingUpdate(timing); |
269 | 271 |
270 // Simulate closing the tab. | 272 // Simulate closing the tab. |
271 DeleteContents(); | 273 DeleteContents(); |
272 | 274 |
273 EXPECT_EQ(1ul, ukm_source_count()); | 275 EXPECT_EQ(1ul, ukm_source_count()); |
274 const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); | 276 const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); |
275 EXPECT_EQ(GURL(kTestUrl1), source->url()); | 277 EXPECT_EQ(GURL(kTestUrl1), source->url()); |
276 | 278 |
277 EXPECT_GE(ukm_entry_count(), 1ul); | 279 EXPECT_GE(ukm_entry_count(), 1ul); |
278 ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); | 280 ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); |
279 EXPECT_EQ(entry_proto.source_id(), source->id()); | 281 EXPECT_EQ(entry_proto.source_id(), source->id()); |
280 EXPECT_EQ(entry_proto.event_hash(), | 282 EXPECT_EQ(entry_proto.event_hash(), |
281 base::HashMetricName(internal::kUkmPageLoadEventName)); | 283 base::HashMetricName(internal::kUkmPageLoadEventName)); |
282 EXPECT_FALSE(entry_proto.metrics().empty()); | 284 EXPECT_FALSE(entry_proto.metrics().empty()); |
283 ExpectMetric(internal::kUkmFirstMeaningfulPaintName, 600, | 285 ExpectMetric(internal::kUkmFirstMeaningfulPaintName, 600, |
284 entry_proto.metrics()); | 286 entry_proto.metrics()); |
285 EXPECT_TRUE( | 287 EXPECT_TRUE( |
286 HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); | 288 HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); |
287 } | 289 } |
288 | 290 |
289 TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) { | 291 TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) { |
290 page_load_metrics::PageLoadTiming timing1; | 292 page_load_metrics::mojom::PageLoadTiming timing1; |
| 293 page_load_metrics::InitPageLoadTimingForTest(&timing1); |
291 timing1.navigation_start = base::Time::FromDoubleT(1); | 294 timing1.navigation_start = base::Time::FromDoubleT(1); |
292 timing1.paint_timing.first_contentful_paint = | 295 timing1.paint_timing->first_contentful_paint = |
293 base::TimeDelta::FromMilliseconds(200); | 296 base::TimeDelta::FromMilliseconds(200); |
294 PopulateRequiredTimingFields(&timing1); | 297 PopulateRequiredTimingFields(&timing1); |
295 | 298 |
296 // Second navigation reports no timing metrics. | 299 // Second navigation reports no timing metrics. |
297 page_load_metrics::PageLoadTiming timing2; | 300 page_load_metrics::mojom::PageLoadTiming timing2; |
| 301 page_load_metrics::InitPageLoadTimingForTest(&timing2); |
298 timing2.navigation_start = base::Time::FromDoubleT(1); | 302 timing2.navigation_start = base::Time::FromDoubleT(1); |
299 PopulateRequiredTimingFields(&timing2); | 303 PopulateRequiredTimingFields(&timing2); |
300 | 304 |
301 NavigateAndCommit(GURL(kTestUrl1)); | 305 NavigateAndCommit(GURL(kTestUrl1)); |
302 SimulateTimingUpdate(timing1); | 306 SimulateTimingUpdate(timing1); |
303 | 307 |
304 NavigateAndCommit(GURL(kTestUrl2)); | 308 NavigateAndCommit(GURL(kTestUrl2)); |
305 SimulateTimingUpdate(timing2); | 309 SimulateTimingUpdate(timing2); |
306 | 310 |
307 // Simulate closing the tab. | 311 // Simulate closing the tab. |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 | 390 |
387 EXPECT_GE(ukm_entry_count(), 1ul); | 391 EXPECT_GE(ukm_entry_count(), 1ul); |
388 ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); | 392 ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); |
389 EXPECT_EQ(entry_proto.source_id(), source->id()); | 393 EXPECT_EQ(entry_proto.source_id(), source->id()); |
390 EXPECT_EQ(entry_proto.event_hash(), | 394 EXPECT_EQ(entry_proto.event_hash(), |
391 base::HashMetricName(internal::kUkmPageLoadEventName)); | 395 base::HashMetricName(internal::kUkmPageLoadEventName)); |
392 EXPECT_FALSE(entry_proto.metrics().empty()); | 396 EXPECT_FALSE(entry_proto.metrics().empty()); |
393 ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_RELOAD, | 397 ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_RELOAD, |
394 entry_proto.metrics()); | 398 entry_proto.metrics()); |
395 } | 399 } |
OLD | NEW |