| Index: chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
|
| diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
|
| index 162a03b60d7c593ecdd8d15df31dfe110ab67b57..e79c5a7bd09d68cee369c2400f2243e99ed69514 100644
|
| --- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
|
| +++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
|
| @@ -74,30 +74,160 @@ const char kBackgroundDocWriteBlockParseBlockedOnScriptLoadDocWriteComplete[] =
|
| "ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete.Background";
|
| const char kBackgroundHistogramDocWriteBlockParseDuration[] =
|
| "PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration.Background";
|
| +
|
| +// Histograms that are logged immediately on receiving timing/metadata update.
|
| +const char kHistogramDocWriteFirstContentfulPaintImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
|
| + "NavigationToFirstContentfulPaint";
|
| +const char kHistogramDocWriteParseStartToFirstContentfulPaintImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
|
| + "ParseStartToFirstContentfulPaint";
|
| +const char kHistogramDocWriteParseDurationImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration";
|
| +const char kHistogramDocWriteParseBlockedOnScriptImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad";
|
| +const char kHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseTiming."
|
| + "ParseBlockedOnScriptLoadFromDocumentWrite";
|
| +const char kBackgroundHistogramDocWriteFirstContentfulPaintImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
|
| + "NavigationToFirstContentfulPaint."
|
| + "Background";
|
| +const char kBackgroundHistogramDocWriteParseDurationImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration.Background";
|
| +const char kBackgroundHistogramDocWriteParseBlockedOnScriptImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad."
|
| + "Background";
|
| +const char
|
| + kBackgroundHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate
|
| + [] = "PageLoad.Clients.DocWrite.Evaluator.ParseTiming."
|
| + "ParseBlockedOnScriptLoadFromDocumentWrite.Background";
|
| +
|
| +const char kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.PaintTiming."
|
| + "ParseStartToFirstContentfulPaint";
|
| +const char kHistogramDocWriteBlockParseBlockedOnScriptImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad";
|
| +const char
|
| + kHistogramDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming."
|
| + "ParseBlockedOnScriptLoadFromDocumentWrite";
|
| +const char kHistogramDocWriteBlockParseDurationImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration";
|
| +
|
| +const char kBackgroundHistogramDocWriteBlockParseBlockedOnScriptImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad."
|
| + "Background";
|
| +const char
|
| + kBackgroundDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming."
|
| + "ParseBlockedOnScriptLoadFromDocumentWrite.Background";
|
| +const char kBackgroundHistogramDocWriteBlockParseDurationImmediate[] =
|
| + "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration.Background";
|
| } // namespace internal
|
|
|
| -DocumentWritePageLoadMetricsObserver::DocumentWritePageLoadMetricsObserver() {}
|
| +DocumentWritePageLoadMetricsObserver::DocumentWritePageLoadMetricsObserver()
|
| + : doc_write_block_reload_observed_(false) {}
|
|
|
| -void DocumentWritePageLoadMetricsObserver::OnComplete(
|
| +void DocumentWritePageLoadMetricsObserver::OnFirstContentfulPaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - if (info.time_to_commit.is_zero() || timing.IsEmpty())
|
| - return;
|
| if (info.metadata.behavior_flags &
|
| blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteEvaluator) {
|
| - LogDocumentWriteEvaluatorData(timing, info);
|
| + LogDocumentWriteEvaluatorFirstContentfulPaint(timing, info);
|
| }
|
| if (info.metadata.behavior_flags &
|
| blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
|
| - LogDocumentWriteBlockData(timing, info);
|
| + LogDocumentWriteBlockFirstContentfulPaint(timing, info);
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::OnParseStop(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if (info.metadata.behavior_flags &
|
| + blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteEvaluator) {
|
| + LogDocumentWriteEvaluatorParseStop(timing, info);
|
| }
|
| if (info.metadata.behavior_flags &
|
| - blink::WebLoadingBehaviorFlag::
|
| - WebLoadingBehaviorDocumentWriteBlockReload) {
|
| + blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
|
| + LogDocumentWriteBlockParseStop(timing, info);
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::OnLoadingBehaviorObserved(
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if ((info.metadata.behavior_flags &
|
| + blink::WebLoadingBehaviorFlag::
|
| + WebLoadingBehaviorDocumentWriteBlockReload) &&
|
| + !doc_write_block_reload_observed_) {
|
| DCHECK(
|
| !(info.metadata.behavior_flags &
|
| blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock));
|
| UMA_HISTOGRAM_COUNTS(internal::kHistogramDocWriteBlockReloadCount, 1);
|
| + doc_write_block_reload_observed_ = true;
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::OnComplete(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if (info.time_to_commit.is_zero() || timing.IsEmpty())
|
| + return;
|
| + if (info.metadata.behavior_flags &
|
| + blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteEvaluator) {
|
| + LogDocumentWriteEvaluatorData(timing, info);
|
| + }
|
| + if (info.metadata.behavior_flags &
|
| + blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
|
| + LogDocumentWriteBlockData(timing, info);
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::
|
| + LogDocumentWriteEvaluatorFirstContentfulPaint(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if (WasStartedInForegroundEventInForeground(timing.first_contentful_paint,
|
| + info)) {
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramDocWriteFirstContentfulPaintImmediate,
|
| + timing.first_contentful_paint);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramDocWriteParseStartToFirstContentfulPaintImmediate,
|
| + timing.first_contentful_paint - timing.parse_start);
|
| + } else {
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kBackgroundHistogramDocWriteFirstContentfulPaintImmediate,
|
| + timing.first_contentful_paint);
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::LogDocumentWriteEvaluatorParseStop(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + base::TimeDelta parse_duration = timing.parse_stop - timing.parse_start;
|
| + if (WasStartedInForegroundEventInForeground(timing.parse_stop, info)) {
|
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteParseDurationImmediate,
|
| + parse_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramDocWriteParseBlockedOnScriptImmediate,
|
| + timing.parse_blocked_on_script_load_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate,
|
| + timing.parse_blocked_on_script_load_from_document_write_duration);
|
| + } else {
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kBackgroundHistogramDocWriteParseDurationImmediate,
|
| + parse_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kBackgroundHistogramDocWriteParseBlockedOnScriptImmediate,
|
| + timing.parse_blocked_on_script_load_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kBackgroundHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate,
|
| + timing.parse_blocked_on_script_load_from_document_write_duration);
|
| }
|
| }
|
|
|
| @@ -162,6 +292,48 @@ void DocumentWritePageLoadMetricsObserver::LogDocumentWriteEvaluatorData(
|
| }
|
| }
|
|
|
| +void DocumentWritePageLoadMetricsObserver::
|
| + LogDocumentWriteBlockFirstContentfulPaint(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if (WasStartedInForegroundEventInForeground(timing.first_contentful_paint,
|
| + info)) {
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
|
| + timing.first_contentful_paint - timing.parse_start);
|
| + }
|
| +}
|
| +
|
| +void DocumentWritePageLoadMetricsObserver::LogDocumentWriteBlockParseStop(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + base::TimeDelta parse_duration = timing.parse_stop - timing.parse_start;
|
| + if (WasStartedInForegroundEventInForeground(timing.parse_stop, info)) {
|
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteBlockParseDurationImmediate,
|
| + parse_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramDocWriteBlockParseBlockedOnScriptImmediate,
|
| + timing.parse_blocked_on_script_load_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kHistogramDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate,
|
| + timing.parse_blocked_on_script_load_from_document_write_duration);
|
| + } else {
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kBackgroundHistogramDocWriteBlockParseDurationImmediate,
|
| + parse_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kBackgroundHistogramDocWriteBlockParseBlockedOnScriptImmediate,
|
| + timing.parse_blocked_on_script_load_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kBackgroundDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate,
|
| + timing.parse_blocked_on_script_load_from_document_write_duration);
|
| + }
|
| +}
|
| +
|
| void DocumentWritePageLoadMetricsObserver::LogDocumentWriteBlockData(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
|
|