Index: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc |
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc |
index f21745ffbea655d125084ece9348a27e2b9b95b4..80da0c0e0bca88165b700d3f77c2272b0daf2e0c 100644 |
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc |
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc |
@@ -11,8 +11,15 @@ |
namespace internal { |
const char kUkmPageLoadEventName[] = "PageLoad"; |
+const char kUkmParseStartName[] = "ParseTiming.ParseStart"; |
+const char kUkmDomContentLoadedName[] = |
+ "DocumentTiming.NavigationToDOMContentLoadedEventFired"; |
+const char kUkmLoadEventName[] = "DocumentTiming.NavigationToLoadEventFired"; |
const char kUkmFirstContentfulPaintName[] = |
"PaintTiming.NavigationToFirstContentfulPaint"; |
+const char kUkmFirstMeaningfulPaintName[] = |
+ "Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"; |
+const char kUkmForegroundDurationName[] = "PageTiming.ForegroundDuration"; |
tdresser
2017/03/02 18:06:00
All of DocumentTiming, PageTiming, PaintTiming and
|
} // namespace internal |
@@ -48,7 +55,7 @@ UkmPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
RecordTimingMetrics(timing); |
- RecordPageLoadExtraInfoMetrics(info); |
+ RecordPageLoadExtraInfoMetrics(info, base::TimeTicks::Now()); |
return STOP_OBSERVING; |
} |
@@ -56,37 +63,68 @@ UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnHidden( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
RecordTimingMetrics(timing); |
- RecordPageLoadExtraInfoMetrics(info); |
+ RecordPageLoadExtraInfoMetrics( |
+ info, base::TimeTicks() /* no app_background_time */); |
return STOP_OBSERVING; |
} |
void UkmPageLoadMetricsObserver::OnFailedProvisionalLoad( |
const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info, |
const page_load_metrics::PageLoadExtraInfo& extra_info) { |
- RecordPageLoadExtraInfoMetrics(extra_info); |
+ RecordPageLoadExtraInfoMetrics( |
+ extra_info, base::TimeTicks() /* no app_background_time */); |
} |
void UkmPageLoadMetricsObserver::OnComplete( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
RecordTimingMetrics(timing); |
- RecordPageLoadExtraInfoMetrics(info); |
+ RecordPageLoadExtraInfoMetrics( |
+ info, base::TimeTicks() /* no app_background_time */); |
} |
void UkmPageLoadMetricsObserver::RecordTimingMetrics( |
const page_load_metrics::PageLoadTiming& timing) { |
- if (!timing.first_contentful_paint) |
- return; |
- |
ukm::UkmService* ukm_service = g_browser_process->ukm_service(); |
std::unique_ptr<ukm::UkmEntryBuilder> builder = |
ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName); |
- builder->AddMetric(internal::kUkmFirstContentfulPaintName, |
- timing.first_contentful_paint.value().InMilliseconds()); |
+ if (timing.parse_start) { |
+ builder->AddMetric(internal::kUkmParseStartName, |
+ timing.parse_start.value().InMilliseconds()); |
+ } |
+ if (timing.dom_content_loaded_event_start) { |
+ builder->AddMetric( |
+ internal::kUkmDomContentLoadedName, |
+ timing.dom_content_loaded_event_start.value().InMilliseconds()); |
+ } |
+ if (timing.load_event_start) { |
+ builder->AddMetric(internal::kUkmLoadEventName, |
+ timing.load_event_start.value().InMilliseconds()); |
+ } |
+ if (timing.first_contentful_paint) { |
+ builder->AddMetric(internal::kUkmFirstContentfulPaintName, |
+ timing.first_contentful_paint.value().InMilliseconds()); |
+ } |
+ if (timing.first_meaningful_paint) { |
+ builder->AddMetric(internal::kUkmFirstMeaningfulPaintName, |
+ timing.first_meaningful_paint.value().InMilliseconds()); |
+ } |
} |
void UkmPageLoadMetricsObserver::RecordPageLoadExtraInfoMetrics( |
- const page_load_metrics::PageLoadExtraInfo& info) { |
+ const page_load_metrics::PageLoadExtraInfo& info, |
+ base::TimeTicks app_background_time) { |
ukm::UkmService* ukm_service = g_browser_process->ukm_service(); |
ukm_service->UpdateSourceURL(source_id_, info.url); |
+ |
+ base::Optional<base::TimeDelta> foreground_duration = |
+ page_load_metrics::GetInitialForegroundDuration(info, |
+ app_background_time); |
+ if (foreground_duration) { |
+ std::unique_ptr<ukm::UkmEntryBuilder> builder = |
+ ukm_service->GetEntryBuilder(source_id_, |
+ internal::kUkmPageLoadEventName); |
+ builder->AddMetric(internal::kUkmForegroundDurationName, |
+ foreground_duration.value().InMilliseconds()); |
+ } |
} |