| Index: chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
|
| diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
|
| index 3e110448df2e68be2b9f57aee15f3f5403f4630a..acdc80203674b003d18c71a43b0594c960fbdccf 100644
|
| --- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
|
| +++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
|
| @@ -30,33 +30,35 @@ namespace {
|
|
|
| bool ShouldRecordHistogram(const DataReductionProxyData* data,
|
| const base::Optional<base::TimeDelta>& event,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| return data && data->used_data_reduction_proxy() &&
|
| WasStartedInForegroundOptionalEventInForeground(event, info);
|
| }
|
|
|
| // A macro is needed because PAGE_LOAD_HISTOGRAM creates a static instance of
|
| // the histogram. A distinct histogram is needed for each place that calls
|
| -// RECORD_HISTOGRAMS_FOR_SUFFIX.
|
| -#define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, info, histogram_suffix) \
|
| +// RECORD_HISTOGRAMS_FOR_SUFFIX. |event| is the timing event representing when
|
| +// |value| became available.
|
| +#define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, value, info, \
|
| + histogram_suffix) \
|
| do { \
|
| if (ShouldRecordHistogram(data.get(), event, info)) { \
|
| PAGE_LOAD_HISTOGRAM( \
|
| std::string(internal::kHistogramDataReductionProxyPrefix) \
|
| .append(histogram_suffix), \
|
| - event.value()); \
|
| + value); \
|
| if (data->lofi_requested()) { \
|
| PAGE_LOAD_HISTOGRAM( \
|
| std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \
|
| .append(histogram_suffix), \
|
| - event.value()); \
|
| + value); \
|
| } \
|
| } \
|
| } while (false)
|
|
|
| } // namespace
|
|
|
| namespace internal {
|
|
|
| const char kHistogramDataReductionProxyPrefix[] =
|
| "PageLoad.Clients.DataReductionProxy.";
|
| @@ -69,20 +71,23 @@ const char kHistogramFirstLayoutSuffix[] =
|
| const char kHistogramLoadEventFiredSuffix[] =
|
| "DocumentTiming.NavigationToLoadEventFired";
|
| const char kHistogramFirstContentfulPaintSuffix[] =
|
| "PaintTiming.NavigationToFirstContentfulPaint";
|
| const char kHistogramFirstImagePaintSuffix[] =
|
| "PaintTiming.NavigationToFirstImagePaint";
|
| const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint";
|
| const char kHistogramFirstTextPaintSuffix[] =
|
| "PaintTiming.NavigationToFirstTextPaint";
|
| const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart";
|
| +const char kHistogramParseBlockedOnScriptLoadSuffix[] =
|
| + "ParseTiming.ParseBlockedOnScriptLoad";
|
| +const char kHistogramParseDurationSuffix[] = "ParseTiming.ParseDuration";
|
|
|
| } // namespace internal
|
|
|
| DataReductionProxyMetricsObserver::DataReductionProxyMetricsObserver()
|
| : browser_context_(nullptr) {}
|
|
|
| DataReductionProxyMetricsObserver::~DataReductionProxyMetricsObserver() {}
|
|
|
| // Check if the NavigationData indicates anything about the DataReductionProxy.
|
| void DataReductionProxyMetricsObserver::OnCommit(
|
| @@ -124,98 +129,132 @@ void DataReductionProxyMetricsObserver::OnComplete(
|
| if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() ||
|
| data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) {
|
| return;
|
| }
|
| // Only consider timing events that happened before the first background
|
| // event.
|
| base::Optional<base::TimeDelta> response_start;
|
| base::Optional<base::TimeDelta> load_event_start;
|
| base::Optional<base::TimeDelta> first_image_paint;
|
| base::Optional<base::TimeDelta> first_contentful_paint;
|
| + base::Optional<base::TimeDelta> parse_blocked_on_script_load_duration;
|
| + base::Optional<base::TimeDelta> parse_stop;
|
| if (WasStartedInForegroundOptionalEventInForeground(timing.response_start,
|
| info)) {
|
| response_start = timing.response_start;
|
| }
|
| if (WasStartedInForegroundOptionalEventInForeground(timing.load_event_start,
|
| info)) {
|
| load_event_start = timing.load_event_start;
|
| }
|
| if (WasStartedInForegroundOptionalEventInForeground(timing.first_image_paint,
|
| info)) {
|
| first_image_paint = timing.first_image_paint;
|
| }
|
| if (WasStartedInForegroundOptionalEventInForeground(
|
| timing.first_contentful_paint, info)) {
|
| first_contentful_paint = timing.first_contentful_paint;
|
| }
|
| + if (WasStartedInForegroundOptionalEventInForeground(
|
| + timing.parse_blocked_on_script_load_duration, info)) {
|
| + parse_blocked_on_script_load_duration =
|
| + timing.parse_blocked_on_script_load_duration;
|
| + }
|
| + if (WasStartedInForegroundOptionalEventInForeground(timing.parse_stop,
|
| + info)) {
|
| + parse_stop = timing.parse_stop;
|
| + }
|
| +
|
| DataReductionProxyPageLoadTiming data_reduction_proxy_timing(
|
| timing.navigation_start, response_start, load_event_start,
|
| - first_image_paint, first_contentful_paint);
|
| + first_image_paint, first_contentful_paint,
|
| + parse_blocked_on_script_load_duration, parse_stop);
|
| GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| RECORD_HISTOGRAMS_FOR_SUFFIX(
|
| - data_, timing.dom_content_loaded_event_start, info,
|
| + data_, timing.dom_content_loaded_event_start,
|
| + timing.dom_content_loaded_event_start.value(), info,
|
| internal::kHistogramDOMContentLoadedEventFiredSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnLoadEventStart(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start,
|
| + timing.load_event_start.value(), info,
|
| internal::kHistogramLoadEventFiredSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnFirstLayout(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout,
|
| + timing.first_layout.value(), info,
|
| internal::kHistogramFirstLayoutSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnFirstPaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint,
|
| + timing.first_paint.value(), info,
|
| internal::kHistogramFirstPaintSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnFirstTextPaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint,
|
| + timing.first_text_paint.value(), info,
|
| internal::kHistogramFirstTextPaintSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnFirstImagePaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint,
|
| + timing.first_image_paint.value(), info,
|
| internal::kHistogramFirstImagePaintSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnFirstContentfulPaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint,
|
| + timing.first_contentful_paint.value(), info,
|
| internal::kHistogramFirstContentfulPaintSuffix);
|
| }
|
|
|
| void DataReductionProxyMetricsObserver::OnParseStart(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start, info,
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start,
|
| + timing.parse_start.value(), info,
|
| internal::kHistogramParseStartSuffix);
|
| }
|
|
|
| +void DataReductionProxyMetricsObserver::OnParseStop(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + base::TimeDelta parse_duration =
|
| + timing.parse_stop.value() - timing.parse_start.value();
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_stop, parse_duration, info,
|
| + internal::kHistogramParseDurationSuffix);
|
| + RECORD_HISTOGRAMS_FOR_SUFFIX(
|
| + data_, timing.parse_stop,
|
| + timing.parse_blocked_on_script_load_duration.value(), info,
|
| + internal::kHistogramParseBlockedOnScriptLoadSuffix);
|
| +}
|
| +
|
| DataReductionProxyPingbackClient*
|
| DataReductionProxyMetricsObserver::GetPingbackClient() const {
|
| return DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
|
| browser_context_)
|
| ->data_reduction_proxy_service()
|
| ->pingback_client();
|
| }
|
|
|
| } // namespace data_reduction_proxy
|
|
|