Index: chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
index 75e419fc4d7b171c8ff114490d716ff7c08d3578..46fefba1bc0c5d446dfab02d05a88b4678c075a3 100644 |
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
@@ -67,58 +67,115 @@ PageLoadType GetPageLoadType(ui::PageTransition transition) { |
namespace internal { |
const char kHistogramCommit[] = "PageLoad.Timing2.NavigationToCommit"; |
+const char kHistogramFirstLayout[] = "PageLoad.Timing2.NavigationToFirstLayout"; |
+const char kHistogramFirstTextPaint[] = |
+ "PageLoad.Timing2.NavigationToFirstTextPaint"; |
+const char kHistogramDomContentLoaded[] = |
+ "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; |
+const char kHistogramDomLoadingToDomContentLoaded[] = |
+ "PageLoad.Timing2.DOMLoadingToDOMContentLoadedEventFired"; |
+const char kHistogramLoad[] = "PageLoad.Timing2.NavigationToLoadEventFired"; |
+const char kHistogramFirstPaint[] = "PageLoad.Timing2.NavigationToFirstPaint"; |
+const char kHistogramFirstImagePaint[] = |
+ "PageLoad.Timing2.NavigationToFirstImagePaint"; |
+const char kHistogramFirstContentfulPaint[] = |
+ "PageLoad.Timing2.NavigationToFirstContentfulPaint"; |
+const char kHistogramDomLoadingToFirstContentfulPaint[] = |
+ "PageLoad.Timing2.DOMLoadingToFirstContentfulPaint"; |
+const char kHistogramParseDuration[] = "PageLoad.Timing2.ParseDuration"; |
+const char kHistogramParseBlockedOnScriptLoad[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoad"; |
+const char kHistogramParseBlockedOnScriptLoadParseComplete[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"; |
+const char kHistogramParseStartToFirstContentfulPaint[] = |
+ "PageLoad.Timing2.ParseStartToFirstContentfulPaint"; |
+const char kHistogramParseBlockedOnScriptLoadDocumentWrite[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"; |
+const char kHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"; |
const char kBackgroundHistogramCommit[] = |
"PageLoad.Timing2.NavigationToCommit.Background"; |
- |
-const char kHistogramDomContentLoaded[] = |
- "PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"; |
+const char kBackgroundHistogramFirstLayout[] = |
+ "PageLoad.Timing2.NavigationToFirstLayout.Background"; |
+const char kBackgroundHistogramFirstTextPaint[] = |
+ "PageLoad.Timing2.NavigationToFirstTextPaint.Background"; |
const char kBackgroundHistogramDomContentLoaded[] = |
+ "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.Background"; |
+const char kBackgroundHistogramLoad[] = |
+ "PageLoad.Timing2.NavigationToLoadEventFired.Background"; |
+const char kBackgroundHistogramFirstPaint[] = |
+ "PageLoad.Timing2.NavigationToFirstPaint.Background"; |
+const char kBackgroundHistogramFirstImagePaint[] = |
+ "PageLoad.Timing2.NavigationToFirstImagePaint.Background."; |
+const char kBackgroundHistogramFirstContentfulPaint[] = |
+ "PageLoad.Timing2.NavigationToFirstContentfulPaint.Background"; |
+const char kBackgroundHistogramParseDuration[] = |
+ "PageLoad.Timing2.ParseDuration.Background"; |
+const char kBackgroundHistogramParseBlockedOnScriptLoad[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoad.Background"; |
+const char kBackgroundHistogramParseBlockedOnScriptLoadParseComplete[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete.Background"; |
+const char kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.Background"; |
+const char |
+ kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete[] = |
+ "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite." |
+ "ParseComplete.Background"; |
+ |
+// Immediate histogram variants, which are logged as soon as the associated |
+// event is observed. These will eventually become our standard metrics, and the |
+// Timing2 variants will be deprecated in M54. |
+const char kHistogramDomContentLoadedImmediate[] = |
+ "PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"; |
+const char kBackgroundHistogramDomContentLoadedImmediate[] = |
"PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired.Background"; |
-const char kHistogramLoad[] = |
+const char kHistogramLoadImmediate[] = |
"PageLoad.DocumentTiming.NavigationToLoadEventFired"; |
-const char kBackgroundHistogramLoad[] = |
+const char kBackgroundHistogramLoadImmediate[] = |
"PageLoad.DocumentTiming.NavigationToLoadEventFired.Background"; |
-const char kHistogramFirstLayout[] = |
+const char kHistogramFirstLayoutImmediate[] = |
"PageLoad.DocumentTiming.NavigationToFirstLayout"; |
-const char kBackgroundHistogramFirstLayout[] = |
+const char kBackgroundHistogramFirstLayoutImmediate[] = |
"PageLoad.DocumentTiming.NavigationToFirstLayout.Background"; |
-const char kHistogramFirstPaint[] = |
+const char kHistogramFirstPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstPaint"; |
-const char kBackgroundHistogramFirstPaint[] = |
+const char kBackgroundHistogramFirstPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstPaint.Background"; |
-const char kHistogramFirstTextPaint[] = |
+const char kHistogramFirstTextPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstTextPaint"; |
-const char kBackgroundHistogramFirstTextPaint[] = |
+const char kBackgroundHistogramFirstTextPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstTextPaint.Background"; |
-const char kHistogramFirstImagePaint[] = |
+const char kHistogramFirstImagePaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstImagePaint"; |
-const char kBackgroundHistogramFirstImagePaint[] = |
+const char kBackgroundHistogramFirstImagePaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstImagePaint.Background"; |
-const char kHistogramFirstContentfulPaint[] = |
+const char kHistogramFirstContentfulPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstContentfulPaint"; |
-const char kBackgroundHistogramFirstContentfulPaint[] = |
+const char kBackgroundHistogramFirstContentfulPaintImmediate[] = |
"PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Background"; |
-const char kHistogramParseStartToFirstContentfulPaint[] = |
+const char kHistogramParseStartToFirstContentfulPaintImmediate[] = |
"PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"; |
-const char kBackgroundHistogramParseStartToFirstContentfulPaint[] = |
+const char kBackgroundHistogramParseStartToFirstContentfulPaintImmediate[] = |
"PageLoad.PaintTiming.ParseStartToFirstContentfulPaint.Background"; |
-const char kHistogramParseStart[] = |
+const char kHistogramParseStartImmediate[] = |
"PageLoad.ParseTiming.NavigationToParseStart"; |
-const char kBackgroundHistogramParseStart[] = |
+const char kBackgroundHistogramParseStartImmediate[] = |
"PageLoad.ParseTiming.NavigationToParseStart.Background"; |
-const char kHistogramParseDuration[] = "PageLoad.ParseTiming.ParseDuration"; |
-const char kBackgroundHistogramParseDuration[] = |
+const char kHistogramParseDurationImmediate[] = |
+ "PageLoad.ParseTiming.ParseDuration"; |
+const char kBackgroundHistogramParseDurationImmediate[] = |
"PageLoad.ParseTiming.ParseDuration.Background"; |
-const char kHistogramParseBlockedOnScriptLoad[] = |
+const char kHistogramParseBlockedOnScriptLoadImmediate[] = |
"PageLoad.ParseTiming.ParseBlockedOnScriptLoad"; |
-const char kBackgroundHistogramParseBlockedOnScriptLoad[] = |
+const char kBackgroundHistogramParseBlockedOnScriptLoadImmediate[] = |
"PageLoad.ParseTiming.ParseBlockedOnScriptLoad.Background"; |
-const char kHistogramParseBlockedOnScriptLoadDocumentWrite[] = |
+const char kHistogramParseBlockedOnScriptLoadDocumentWriteImmediate[] = |
"PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"; |
-const char kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite[] = |
- "PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite." |
- "Background"; |
+const char |
+ kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteImmediate[] = |
+ "PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite." |
+ "Background"; |
const char kHistogramLoadTypeFirstContentfulPaintReload[] = |
"PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
@@ -156,7 +213,7 @@ const char kHistogramFailedProvisionalLoad[] = |
"PageLoad.Timing2.NavigationToFailedProvisionalLoad"; |
const char kHistogramForegroundToFirstPaint[] = |
- "PageLoad.PaintTiming.ForegroundToFirstPaint"; |
+ "PageLoad.Timing2.ForegroundToFirstPaint"; |
const char kRapporMetricsNameCoarseTiming[] = |
"PageLoad.CoarseTiming.NavigationToFirstContentfulPaint"; |
@@ -180,10 +237,10 @@ void CorePageLoadMetricsObserver::OnDomContentLoadedEventStart( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground( |
timing.dom_content_loaded_event_start, info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramDomContentLoaded, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramDomContentLoadedImmediate, |
timing.dom_content_loaded_event_start.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramDomContentLoaded, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramDomContentLoadedImmediate, |
timing.dom_content_loaded_event_start.value()); |
} |
} |
@@ -193,10 +250,10 @@ void CorePageLoadMetricsObserver::OnLoadEventStart( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramLoad, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramLoadImmediate, |
timing.load_event_start.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramLoad, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramLoadImmediate, |
timing.load_event_start.value()); |
} |
} |
@@ -206,10 +263,10 @@ void CorePageLoadMetricsObserver::OnFirstLayout( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.first_layout, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstLayout, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstLayoutImmediate, |
timing.first_layout.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstLayout, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstLayoutImmediate, |
timing.first_layout.value()); |
} |
} |
@@ -219,25 +276,12 @@ void CorePageLoadMetricsObserver::OnFirstPaint( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.first_paint, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaintImmediate, |
timing.first_paint.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstPaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstPaintImmediate, |
timing.first_paint.value()); |
} |
- |
- // Record the time to first paint for pages which were: |
- // - Opened in the background. |
- // - Moved to the foreground prior to the first paint. |
- // - Not moved back to the background prior to the first paint. |
- if (!info.started_in_foreground && info.first_foreground_time && |
- info.first_foreground_time.value() <= timing.first_paint.value() && |
- (!info.first_background_time || |
- timing.first_paint.value() <= info.first_background_time.value())) { |
- PAGE_LOAD_HISTOGRAM( |
- internal::kHistogramForegroundToFirstPaint, |
- timing.first_paint.value() - info.first_foreground_time.value()); |
- } |
} |
void CorePageLoadMetricsObserver::OnFirstTextPaint( |
@@ -245,10 +289,10 @@ void CorePageLoadMetricsObserver::OnFirstTextPaint( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.first_text_paint, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstTextPaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstTextPaintImmediate, |
timing.first_text_paint.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstTextPaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstTextPaintImmediate, |
timing.first_text_paint.value()); |
} |
} |
@@ -258,10 +302,10 @@ void CorePageLoadMetricsObserver::OnFirstImagePaint( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstImagePaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstImagePaintImmediate, |
timing.first_image_paint.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstImagePaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstImagePaintImmediate, |
timing.first_image_paint.value()); |
} |
} |
@@ -271,10 +315,10 @@ void CorePageLoadMetricsObserver::OnFirstContentfulPaint( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground( |
timing.first_contentful_paint, info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaint, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaintImmediate, |
timing.first_contentful_paint.value()); |
PAGE_LOAD_HISTOGRAM( |
- internal::kHistogramParseStartToFirstContentfulPaint, |
+ internal::kHistogramParseStartToFirstContentfulPaintImmediate, |
timing.first_contentful_paint.value() - timing.parse_start.value()); |
switch (GetPageLoadType(transition_)) { |
@@ -303,10 +347,11 @@ void CorePageLoadMetricsObserver::OnFirstContentfulPaint( |
break; |
} |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstContentfulPaint, |
- timing.first_contentful_paint.value()); |
PAGE_LOAD_HISTOGRAM( |
- internal::kBackgroundHistogramParseStartToFirstContentfulPaint, |
+ internal::kBackgroundHistogramFirstContentfulPaintImmediate, |
+ timing.first_contentful_paint.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kBackgroundHistogramParseStartToFirstContentfulPaintImmediate, |
timing.first_contentful_paint.value() - timing.parse_start.value()); |
} |
} |
@@ -316,7 +361,7 @@ void CorePageLoadMetricsObserver::OnParseStart( |
const page_load_metrics::PageLoadExtraInfo& info) { |
if (WasStartedInForegroundOptionalEventInForeground(timing.parse_start, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramParseStart, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramParseStartImmediate, |
timing.parse_start.value()); |
switch (GetPageLoadType(transition_)) { |
@@ -337,7 +382,7 @@ void CorePageLoadMetricsObserver::OnParseStart( |
break; |
} |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseStart, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseStartImmediate, |
timing.parse_start.value()); |
} |
} |
@@ -349,20 +394,23 @@ void CorePageLoadMetricsObserver::OnParseStop( |
timing.parse_stop.value() - timing.parse_start.value(); |
if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop, |
info)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramParseDuration, parse_duration); |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramParseBlockedOnScriptLoad, |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramParseDurationImmediate, |
+ parse_duration); |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramParseBlockedOnScriptLoadImmediate, |
timing.parse_blocked_on_script_load_duration.value()); |
PAGE_LOAD_HISTOGRAM( |
- internal::kHistogramParseBlockedOnScriptLoadDocumentWrite, |
+ internal::kHistogramParseBlockedOnScriptLoadDocumentWriteImmediate, |
timing.parse_blocked_on_script_load_from_document_write_duration |
.value()); |
} else { |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseDuration, |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseDurationImmediate, |
parse_duration); |
- PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseBlockedOnScriptLoad, |
- timing.parse_blocked_on_script_load_duration.value()); |
PAGE_LOAD_HISTOGRAM( |
- internal::kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite, |
+ internal::kBackgroundHistogramParseBlockedOnScriptLoadImmediate, |
+ timing.parse_blocked_on_script_load_duration.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal:: |
+ kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteImmediate, |
timing.parse_blocked_on_script_load_from_document_write_duration |
.value()); |
} |
@@ -399,6 +447,23 @@ void CorePageLoadMetricsObserver::OnFailedProvisionalLoad( |
void CorePageLoadMetricsObserver::RecordTimingHistograms( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
+ // Record metrics for pages which start in the foreground and are |
+ // backgrounded. |
+ if (info.started_in_foreground && info.first_background_time) { |
+ const base::TimeDelta first_background_time = |
+ info.first_background_time.value(); |
+ |
+ if (!timing.first_paint || timing.first_paint > first_background_time) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramBackgroundBeforePaint, |
+ first_background_time); |
+ } |
+ if (timing.parse_start && first_background_time >= timing.parse_start && |
+ (!timing.parse_stop || timing.parse_stop > first_background_time)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramBackgroundDuringParse, |
+ first_background_time); |
+ } |
+ } |
+ |
const base::TimeDelta time_to_commit = info.time_to_commit.value(); |
if (WasStartedInForegroundOptionalEventInForeground(info.time_to_commit, |
info)) { |
@@ -406,26 +471,151 @@ void CorePageLoadMetricsObserver::RecordTimingHistograms( |
} else { |
PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramCommit, time_to_commit); |
} |
+ if (timing.dom_content_loaded_event_start) { |
+ if (WasStartedInForegroundOptionalEventInForeground( |
+ timing.dom_content_loaded_event_start, info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramDomContentLoaded, |
+ timing.dom_content_loaded_event_start.value()); |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramDomLoadingToDomContentLoaded, |
+ timing.dom_content_loaded_event_start.value() - |
+ timing.dom_loading.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramDomContentLoaded, |
+ timing.dom_content_loaded_event_start.value()); |
+ } |
+ } |
+ if (timing.load_event_start) { |
+ if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start, |
+ info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramLoad, |
+ timing.load_event_start.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramLoad, |
+ timing.load_event_start.value()); |
+ } |
+ } |
+ if (timing.first_layout) { |
+ if (WasStartedInForegroundOptionalEventInForeground(timing.first_layout, |
+ info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstLayout, |
+ timing.first_layout.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstLayout, |
+ timing.first_layout.value()); |
+ } |
+ } |
+ if (timing.first_paint) { |
+ if (WasStartedInForegroundOptionalEventInForeground(timing.first_paint, |
+ info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint, |
+ timing.first_paint.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstPaint, |
+ timing.first_paint.value()); |
+ } |
+ |
+ // Record the time to first paint for pages which were: |
+ // - Opened in the background. |
+ // - Moved to the foreground prior to the first paint. |
+ // - Not moved back to the background prior to the first paint. |
+ if (!info.started_in_foreground && info.first_foreground_time && |
+ timing.first_paint > info.first_foreground_time.value() && |
+ (!info.first_background_time || |
+ timing.first_paint < info.first_background_time.value())) { |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramForegroundToFirstPaint, |
+ timing.first_paint.value() - info.first_foreground_time.value()); |
+ } |
+ } |
+ if (timing.first_text_paint) { |
+ if (WasStartedInForegroundOptionalEventInForeground(timing.first_text_paint, |
+ info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstTextPaint, |
+ timing.first_text_paint.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstTextPaint, |
+ timing.first_text_paint.value()); |
+ } |
+ } |
+ if (timing.first_image_paint) { |
+ if (WasStartedInForegroundOptionalEventInForeground( |
+ timing.first_image_paint, info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstImagePaint, |
+ timing.first_image_paint.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstImagePaint, |
+ timing.first_image_paint.value()); |
+ } |
+ } |
+ if (timing.first_contentful_paint) { |
+ if (WasStartedInForegroundOptionalEventInForeground( |
+ timing.first_contentful_paint, info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaint, |
+ timing.first_contentful_paint.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramParseStartToFirstContentfulPaint, |
+ timing.first_contentful_paint.value() - timing.parse_start.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramDomLoadingToFirstContentfulPaint, |
+ timing.first_contentful_paint.value() - timing.dom_loading.value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstContentfulPaint, |
+ timing.first_contentful_paint.value()); |
+ } |
+ } |
+ if (timing.parse_start) { |
+ if (WasParseInForeground(timing.parse_start, timing.parse_stop, info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramParseBlockedOnScriptLoad, |
+ timing.parse_blocked_on_script_load_duration.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramParseBlockedOnScriptLoadDocumentWrite, |
+ timing.parse_blocked_on_script_load_from_document_write_duration |
+ .value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kBackgroundHistogramParseBlockedOnScriptLoad, |
+ timing.parse_blocked_on_script_load_duration.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite, |
+ timing.parse_blocked_on_script_load_from_document_write_duration |
+ .value()); |
+ } |
+ } |
+ |
+ if (timing.parse_stop) { |
+ base::TimeDelta parse_duration = |
+ timing.parse_stop.value() - timing.parse_start.value(); |
+ if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop, |
+ info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramParseDuration, parse_duration); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramParseBlockedOnScriptLoadParseComplete, |
+ timing.parse_blocked_on_script_load_duration.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal:: |
+ kHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete, |
+ timing.parse_blocked_on_script_load_from_document_write_duration |
+ .value()); |
+ } else { |
+ PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseDuration, |
+ parse_duration); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kBackgroundHistogramParseBlockedOnScriptLoadParseComplete, |
+ timing.parse_blocked_on_script_load_duration.value()); |
+ PAGE_LOAD_HISTOGRAM( |
+ internal:: |
+ kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete, |
+ timing.parse_blocked_on_script_load_from_document_write_duration |
+ .value()); |
+ } |
+ } |
// Log time to first foreground / time to first background. Log counts that we |
// started a relevant page load in the foreground / background. |
if (info.started_in_foreground) { |
- if (info.first_background_time) { |
- const base::TimeDelta first_background_time = |
- info.first_background_time.value(); |
- |
+ if (info.first_background_time) |
PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstBackground, |
- first_background_time); |
- if (!timing.first_paint || timing.first_paint > first_background_time) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramBackgroundBeforePaint, |
- first_background_time); |
- } |
- if (timing.parse_start && first_background_time >= timing.parse_start && |
- (!timing.parse_stop || timing.parse_stop > first_background_time)) { |
- PAGE_LOAD_HISTOGRAM(internal::kHistogramBackgroundDuringParse, |
- first_background_time); |
- } |
- } |
+ info.first_background_time.value()); |
} else { |
if (info.first_foreground_time) |
PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstForeground, |