Chromium Code Reviews| 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 |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6347e424f3e5660f6ecd576cad934d86041baffa |
| --- /dev/null |
| +++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc |
| @@ -0,0 +1,78 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.h" |
| +#include "components/page_load_metrics/browser/page_load_metrics_util.h" |
| +#include "third_party/WebKit/public/platform/WebLoadingBehaviorFlag.h" |
| + |
| +namespace internal { |
| +const char kHistogramDocWriteFirstContentfulPaint[] = |
|
Bryan McQuade
2016/04/11 20:18:47
it may end up being overkill, but i could imagine
Charlie Harrison
2016/04/12 15:18:50
Done. I left out the parse complete metrics becaus
|
| + "PageLoad.Clients.DocWrite.Evaluator.NavigationToFirstContentfulPaint"; |
| +const char kHistogramDocWriteParseStartToFirstContentfulPaint[] = |
| + "PageLoad.Clients.DocWrite.Evaluator.ParseStartToFirstContentfulPaint"; |
| +const char kHistogramDocWriteParseDuration[] = |
| + "PageLoad.Clients.DocWrite.Evaluator.ParseDuration"; |
| +const char kHistogramDocWriteParseBlockedOnScript[] = |
| + "PageLoad.Clients.DocWrite.Evaluator.ParseBlockedOnScriptLoad"; |
| +const char kHistogramDocWriteParseBlockedOnScriptParseComplete[] = |
|
Bryan McQuade
2016/04/11 20:18:47
let's also add:
ParseBlockedOnScriptLoadFromDocume
Charlie Harrison
2016/04/12 15:18:50
Done.
|
| + "PageLoad.Clients.DocWrite.Evaluator.ParseBlockedOnScriptLoad." |
| + "ParseComplete"; |
| + |
| +} // namespace internal |
| + |
| +DocumentWritePageLoadMetricsObserver::DocumentWritePageLoadMetricsObserver() {} |
| + |
| +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); |
| + } |
| +} |
| + |
| +// TODO(csharrison,bmcquade): Log parse blocked on document write when that |
|
Bryan McQuade
2016/04/11 20:18:47
yep :) should be available now
|
| +// metric becomes available. |
| +void DocumentWritePageLoadMetricsObserver::LogDocumentWriteEvaluatorData( |
| + const page_load_metrics::PageLoadTiming& timing, |
| + const page_load_metrics::PageLoadExtraInfo& info) { |
| + bool foreground_paint = WasStartedInForegroundEventInForeground( |
| + timing.first_contentful_paint, info); |
| + if (foreground_paint) { |
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteFirstContentfulPaint, |
| + timing.first_contentful_paint); |
| + } |
| + |
| + // Log parse based metrics. |
| + if (!timing.parse_start.is_zero()) { |
| + if (foreground_paint) { |
| + PAGE_LOAD_HISTOGRAM( |
| + internal::kHistogramDocWriteParseStartToFirstContentfulPaint, |
| + timing.first_contentful_paint - timing.parse_start); |
| + } |
| + |
| + const bool incomplete_parse_in_foreground = |
| + timing.parse_stop.is_zero() && info.started_in_foreground && |
| + info.first_background_time.is_zero(); |
| + if (incomplete_parse_in_foreground || |
| + WasStartedInForegroundEventInForeground(timing.parse_stop, info)) { |
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteParseBlockedOnScript, |
| + timing.parse_blocked_on_script_load_duration); |
| + } |
| + |
| + // These metrics require a full parse. |
| + if (!timing.parse_stop.is_zero()) { |
| + base::TimeDelta parse_duration = timing.parse_stop - timing.parse_start; |
| + if (WasStartedInForegroundEventInForeground(timing.parse_stop, info)) { |
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteParseDuration, |
| + parse_duration); |
| + PAGE_LOAD_HISTOGRAM( |
| + internal::kHistogramDocWriteParseBlockedOnScriptParseComplete, |
| + timing.parse_blocked_on_script_load_duration); |
| + } |
| + } |
| + } |
| +} |