Commit 428cfddd authored by Kunihiko Sakamoto's avatar Kunihiko Sakamoto Committed by Commit Bot

Add more aggressively targeted variants of MultiTabLoading metrics

This adds variants of PageLoad.Clients.MultiTabLoading.* metrics that
are recorded only when there are >=2 (or >=5) inflight loading tabs.

Bug: 792759
Change-Id: Ic1c8711d6424752dd80685b7740ec12fcc1c885e
Reviewed-on: https://chromium-review.googlesource.com/826706Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarTakashi Toyoshima <toyoshim@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Commit-Queue: Kunihiko Sakamoto <ksakamoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524329}
parent a09615be
...@@ -904,6 +904,8 @@ split_static_library("browser") { ...@@ -904,6 +904,8 @@ split_static_library("browser") {
"page_load_metrics/observers/from_gws_page_load_metrics_observer.h", "page_load_metrics/observers/from_gws_page_load_metrics_observer.h",
"page_load_metrics/observers/google_captcha_observer.cc", "page_load_metrics/observers/google_captcha_observer.cc",
"page_load_metrics/observers/google_captcha_observer.h", "page_load_metrics/observers/google_captcha_observer.h",
"page_load_metrics/observers/histogram_suffixes.cc",
"page_load_metrics/observers/histogram_suffixes.h",
"page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.cc", "page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.cc",
"page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.h", "page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.h",
"page_load_metrics/observers/https_engagement_metrics/https_engagement_service.cc", "page_load_metrics/observers/https_engagement_metrics/https_engagement_service.cc",
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chrome/browser/loader/chrome_navigation_data.h" #include "chrome/browser/loader/chrome_navigation_data.h"
#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
#include "chrome/browser/page_load_metrics/observers/histogram_suffixes.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h" #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
#include "chrome/browser/previews/previews_infobar_delegate.h" #include "chrome/browser/previews/previews_infobar_delegate.h"
...@@ -72,25 +73,6 @@ const char kHistogramDataReductionProxyPrefix[] = ...@@ -72,25 +73,6 @@ const char kHistogramDataReductionProxyPrefix[] =
"PageLoad.Clients.DataReductionProxy."; "PageLoad.Clients.DataReductionProxy.";
const char kHistogramDataReductionProxyLoFiOnPrefix[] = const char kHistogramDataReductionProxyLoFiOnPrefix[] =
"PageLoad.Clients.DataReductionProxy.LoFiOn."; "PageLoad.Clients.DataReductionProxy.LoFiOn.";
const char kHistogramDOMContentLoadedEventFiredSuffix[] =
"DocumentTiming.NavigationToDOMContentLoadedEventFired";
const char kHistogramFirstLayoutSuffix[] =
"DocumentTiming.NavigationToFirstLayout";
const char kHistogramLoadEventFiredSuffix[] =
"DocumentTiming.NavigationToLoadEventFired";
const char kHistogramFirstContentfulPaintSuffix[] =
"PaintTiming.NavigationToFirstContentfulPaint";
const char kHistogramFirstMeaningfulPaintSuffix[] =
"Experimental.PaintTiming.NavigationToFirstMeaningfulPaint";
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";
const char kResourcesPercentProxied[] = const char kResourcesPercentProxied[] =
"Experimental.CompletedResources.Network.PercentProxied"; "Experimental.CompletedResources.Network.PercentProxied";
...@@ -340,7 +322,7 @@ void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart( ...@@ -340,7 +322,7 @@ void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.document_timing->dom_content_loaded_event_start, info, data_, timing.document_timing->dom_content_loaded_event_start,
internal::kHistogramDOMContentLoadedEventFiredSuffix); ::internal::kHistogramDOMContentLoadedEventFiredSuffix);
} }
void DataReductionProxyMetricsObserver::OnLoadEventStart( void DataReductionProxyMetricsObserver::OnLoadEventStart(
...@@ -349,7 +331,7 @@ void DataReductionProxyMetricsObserver::OnLoadEventStart( ...@@ -349,7 +331,7 @@ void DataReductionProxyMetricsObserver::OnLoadEventStart(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.document_timing->load_event_start, info, data_, timing.document_timing->load_event_start,
internal::kHistogramLoadEventFiredSuffix); ::internal::kHistogramLoadEventFiredSuffix);
} }
void DataReductionProxyMetricsObserver::OnFirstLayout( void DataReductionProxyMetricsObserver::OnFirstLayout(
...@@ -358,16 +340,16 @@ void DataReductionProxyMetricsObserver::OnFirstLayout( ...@@ -358,16 +340,16 @@ void DataReductionProxyMetricsObserver::OnFirstLayout(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.document_timing->first_layout, info, data_, timing.document_timing->first_layout,
internal::kHistogramFirstLayoutSuffix); ::internal::kHistogramFirstLayoutSuffix);
} }
void DataReductionProxyMetricsObserver::OnFirstPaintInPage( void DataReductionProxyMetricsObserver::OnFirstPaintInPage(
const page_load_metrics::mojom::PageLoadTiming& timing, const page_load_metrics::mojom::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(info, data_, RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
timing.paint_timing->first_paint, info, data_, timing.paint_timing->first_paint,
internal::kHistogramFirstPaintSuffix); ::internal::kHistogramFirstPaintSuffix);
} }
void DataReductionProxyMetricsObserver::OnFirstTextPaintInPage( void DataReductionProxyMetricsObserver::OnFirstTextPaintInPage(
...@@ -376,7 +358,7 @@ void DataReductionProxyMetricsObserver::OnFirstTextPaintInPage( ...@@ -376,7 +358,7 @@ void DataReductionProxyMetricsObserver::OnFirstTextPaintInPage(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.paint_timing->first_text_paint, info, data_, timing.paint_timing->first_text_paint,
internal::kHistogramFirstTextPaintSuffix); ::internal::kHistogramFirstTextPaintSuffix);
} }
void DataReductionProxyMetricsObserver::OnFirstImagePaintInPage( void DataReductionProxyMetricsObserver::OnFirstImagePaintInPage(
...@@ -385,7 +367,7 @@ void DataReductionProxyMetricsObserver::OnFirstImagePaintInPage( ...@@ -385,7 +367,7 @@ void DataReductionProxyMetricsObserver::OnFirstImagePaintInPage(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.paint_timing->first_image_paint, info, data_, timing.paint_timing->first_image_paint,
internal::kHistogramFirstImagePaintSuffix); ::internal::kHistogramFirstImagePaintSuffix);
} }
void DataReductionProxyMetricsObserver::OnFirstContentfulPaintInPage( void DataReductionProxyMetricsObserver::OnFirstContentfulPaintInPage(
...@@ -394,7 +376,7 @@ void DataReductionProxyMetricsObserver::OnFirstContentfulPaintInPage( ...@@ -394,7 +376,7 @@ void DataReductionProxyMetricsObserver::OnFirstContentfulPaintInPage(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.paint_timing->first_contentful_paint, info, data_, timing.paint_timing->first_contentful_paint,
internal::kHistogramFirstContentfulPaintSuffix); ::internal::kHistogramFirstContentfulPaintSuffix);
} }
void DataReductionProxyMetricsObserver:: void DataReductionProxyMetricsObserver::
...@@ -404,16 +386,16 @@ void DataReductionProxyMetricsObserver:: ...@@ -404,16 +386,16 @@ void DataReductionProxyMetricsObserver::
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX( RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
info, data_, timing.paint_timing->first_meaningful_paint, info, data_, timing.paint_timing->first_meaningful_paint,
internal::kHistogramFirstMeaningfulPaintSuffix); ::internal::kHistogramFirstMeaningfulPaintSuffix);
} }
void DataReductionProxyMetricsObserver::OnParseStart( void DataReductionProxyMetricsObserver::OnParseStart(
const page_load_metrics::mojom::PageLoadTiming& timing, const page_load_metrics::mojom::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(info, data_, RECORD_FOREGROUND_HISTOGRAMS_FOR_SUFFIX(
timing.parse_timing->parse_start, info, data_, timing.parse_timing->parse_start,
internal::kHistogramParseStartSuffix); ::internal::kHistogramParseStartSuffix);
} }
void DataReductionProxyMetricsObserver::OnParseStop( void DataReductionProxyMetricsObserver::OnParseStop(
...@@ -427,10 +409,10 @@ void DataReductionProxyMetricsObserver::OnParseStop( ...@@ -427,10 +409,10 @@ void DataReductionProxyMetricsObserver::OnParseStop(
base::TimeDelta parse_duration = timing.parse_timing->parse_stop.value() - base::TimeDelta parse_duration = timing.parse_timing->parse_stop.value() -
timing.parse_timing->parse_start.value(); timing.parse_timing->parse_start.value();
RECORD_HISTOGRAMS_FOR_SUFFIX(data_, parse_duration, RECORD_HISTOGRAMS_FOR_SUFFIX(data_, parse_duration,
internal::kHistogramParseDurationSuffix); ::internal::kHistogramParseDurationSuffix);
RECORD_HISTOGRAMS_FOR_SUFFIX( RECORD_HISTOGRAMS_FOR_SUFFIX(
data_, timing.parse_timing->parse_blocked_on_script_load_duration.value(), data_, timing.parse_timing->parse_blocked_on_script_load_duration.value(),
internal::kHistogramParseBlockedOnScriptLoadSuffix); ::internal::kHistogramParseBlockedOnScriptLoadSuffix);
} }
void DataReductionProxyMetricsObserver::OnLoadedResource( void DataReductionProxyMetricsObserver::OnLoadedResource(
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/loader/chrome_navigation_data.h" #include "chrome/browser/loader/chrome_navigation_data.h"
#include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
#include "chrome/browser/page_load_metrics/observers/histogram_suffixes.h"
#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "chrome/browser/page_load_metrics/page_load_tracker.h" #include "chrome/browser/page_load_metrics/page_load_tracker.h"
...@@ -222,28 +223,30 @@ class DataReductionProxyMetricsObserverTest ...@@ -222,28 +223,30 @@ class DataReductionProxyMetricsObserverTest
void ValidateHistograms() { void ValidateHistograms() {
ValidateHistogramsForSuffix( ValidateHistogramsForSuffix(
internal::kHistogramDOMContentLoadedEventFiredSuffix, ::internal::kHistogramDOMContentLoadedEventFiredSuffix,
timing_.document_timing->dom_content_loaded_event_start); timing_.document_timing->dom_content_loaded_event_start);
ValidateHistogramsForSuffix(internal::kHistogramFirstLayoutSuffix, ValidateHistogramsForSuffix(::internal::kHistogramFirstLayoutSuffix,
timing_.document_timing->first_layout); timing_.document_timing->first_layout);
ValidateHistogramsForSuffix(internal::kHistogramLoadEventFiredSuffix, ValidateHistogramsForSuffix(::internal::kHistogramLoadEventFiredSuffix,
timing_.document_timing->load_event_start); timing_.document_timing->load_event_start);
ValidateHistogramsForSuffix(internal::kHistogramFirstContentfulPaintSuffix, ValidateHistogramsForSuffix(
::internal::kHistogramFirstContentfulPaintSuffix,
timing_.paint_timing->first_contentful_paint); timing_.paint_timing->first_contentful_paint);
ValidateHistogramsForSuffix(internal::kHistogramFirstMeaningfulPaintSuffix, ValidateHistogramsForSuffix(
::internal::kHistogramFirstMeaningfulPaintSuffix,
timing_.paint_timing->first_meaningful_paint); timing_.paint_timing->first_meaningful_paint);
ValidateHistogramsForSuffix(internal::kHistogramFirstImagePaintSuffix, ValidateHistogramsForSuffix(::internal::kHistogramFirstImagePaintSuffix,
timing_.paint_timing->first_image_paint); timing_.paint_timing->first_image_paint);
ValidateHistogramsForSuffix(internal::kHistogramFirstPaintSuffix, ValidateHistogramsForSuffix(::internal::kHistogramFirstPaintSuffix,
timing_.paint_timing->first_paint); timing_.paint_timing->first_paint);
ValidateHistogramsForSuffix(internal::kHistogramFirstTextPaintSuffix, ValidateHistogramsForSuffix(::internal::kHistogramFirstTextPaintSuffix,
timing_.paint_timing->first_text_paint); timing_.paint_timing->first_text_paint);
ValidateHistogramsForSuffix(internal::kHistogramParseStartSuffix, ValidateHistogramsForSuffix(::internal::kHistogramParseStartSuffix,
timing_.parse_timing->parse_start); timing_.parse_timing->parse_start);
ValidateHistogramsForSuffix( ValidateHistogramsForSuffix(
internal::kHistogramParseBlockedOnScriptLoadSuffix, ::internal::kHistogramParseBlockedOnScriptLoadSuffix,
timing_.parse_timing->parse_blocked_on_script_load_duration); timing_.parse_timing->parse_blocked_on_script_load_duration);
ValidateHistogramsForSuffix(internal::kHistogramParseDurationSuffix, ValidateHistogramsForSuffix(::internal::kHistogramParseDurationSuffix,
timing_.parse_timing->parse_stop.value() - timing_.parse_timing->parse_stop.value() -
timing_.parse_timing->parse_start.value()); timing_.parse_timing->parse_start.value());
} }
......
// Copyright 2017 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/histogram_suffixes.h"
namespace internal {
const char kHistogramDOMContentLoadedEventFiredBackgroundSuffix[] =
"DocumentTiming.NavigationToDOMContentLoadedEventFired.Background";
const char kHistogramDOMContentLoadedEventFiredSuffix[] =
"DocumentTiming.NavigationToDOMContentLoadedEventFired";
const char kHistogramFirstContentfulPaintSuffix[] =
"PaintTiming.NavigationToFirstContentfulPaint";
const char kHistogramFirstImagePaintSuffix[] =
"PaintTiming.NavigationToFirstImagePaint";
const char kHistogramFirstLayoutSuffix[] =
"DocumentTiming.NavigationToFirstLayout";
const char kHistogramFirstMeaningfulPaintSuffix[] =
"Experimental.PaintTiming.NavigationToFirstMeaningfulPaint";
const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint";
const char kHistogramFirstTextPaintSuffix[] =
"PaintTiming.NavigationToFirstTextPaint";
const char kHistogramForegroundToFirstContentfulPaintSuffix[] =
"PaintTiming.ForegroundToFirstContentfulPaint";
const char kHistogramForegroundToFirstMeaningfulPaintSuffix[] =
"Experimental.PaintTiming.ForegroundToFirstMeaningfulPaint";
const char kHistogramLoadEventFiredBackgroundSuffix[] =
"DocumentTiming.NavigationToLoadEventFired.Background";
const char kHistogramLoadEventFiredSuffix[] =
"DocumentTiming.NavigationToLoadEventFired";
const char kHistogramParseBlockedOnScriptLoadSuffix[] =
"ParseTiming.ParseBlockedOnScriptLoad";
const char kHistogramParseDurationSuffix[] = "ParseTiming.ParseDuration";
const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart";
} // namespace internal
// Copyright 2017 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.
#ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_HISTOGRAM_SUFFIXES_H_
#define CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_HISTOGRAM_SUFFIXES_H_
namespace internal {
// Histogram suffixes used by multiple observers.
extern const char kHistogramDOMContentLoadedEventFiredBackgroundSuffix[];
extern const char kHistogramDOMContentLoadedEventFiredSuffix[];
extern const char kHistogramFirstContentfulPaintSuffix[];
extern const char kHistogramFirstImagePaintSuffix[];
extern const char kHistogramFirstLayoutSuffix[];
extern const char kHistogramFirstMeaningfulPaintSuffix[];
extern const char kHistogramFirstPaintSuffix[];
extern const char kHistogramFirstTextPaintSuffix[];
extern const char kHistogramForegroundToFirstContentfulPaintSuffix[];
extern const char kHistogramForegroundToFirstMeaningfulPaintSuffix[];
extern const char kHistogramLoadEventFiredBackgroundSuffix[];
extern const char kHistogramLoadEventFiredSuffix[];
extern const char kHistogramParseBlockedOnScriptLoadSuffix[];
extern const char kHistogramParseDurationSuffix[];
extern const char kHistogramParseStartSuffix[];
} // namespace internal
#endif // CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_HISTOGRAM_SUFFIXES_H_
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "chrome/browser/page_load_metrics/observers/histogram_suffixes.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h" #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
...@@ -19,32 +20,15 @@ ...@@ -19,32 +20,15 @@
namespace internal { namespace internal {
const char kHistogramPrefixMultiTabLoading[] =
"PageLoad.Clients.MultiTabLoading.";
const char kHistogramPrefixMultiTabLoading2OrMore[] =
"PageLoad.Clients.MultiTabLoading.2OrMore.";
const char kHistogramPrefixMultiTabLoading5OrMore[] =
"PageLoad.Clients.MultiTabLoading.5OrMore.";
const char kHistogramMultiTabLoadingNumTabsWithInflightLoad[] = const char kHistogramMultiTabLoadingNumTabsWithInflightLoad[] =
"PageLoad.Clients.MultiTabLoading.NumTabsWithInflightLoad"; "PageLoad.Clients.MultiTabLoading.NumTabsWithInflightLoad";
const char kHistogramMultiTabLoadingFirstContentfulPaint[] =
"PageLoad.Clients.MultiTabLoading.PaintTiming."
"NavigationToFirstContentfulPaint";
const char kHistogramMultiTabLoadingForegroundToFirstContentfulPaint[] =
"PageLoad.Clients.MultiTabLoading.PaintTiming."
"ForegroundToFirstContentfulPaint";
const char kHistogramMultiTabLoadingFirstMeaningfulPaint[] =
"PageLoad.Clients.MultiTabLoading.Experimental.PaintTiming."
"NavigationToFirstMeaningfulPaint";
const char kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint[] =
"PageLoad.Clients.MultiTabLoading.Experimental.PaintTiming."
"ForegroundToFirstMeaningfulPaint";
const char kHistogramMultiTabLoadingDomContentLoaded[] =
"PageLoad.Clients.MultiTabLoading.DocumentTiming."
"NavigationToDOMContentLoadedEventFired";
const char kBackgroundHistogramMultiTabLoadingDomContentLoaded[] =
"PageLoad.Clients.MultiTabLoading.DocumentTiming."
"NavigationToDOMContentLoadedEventFired.Background";
const char kHistogramMultiTabLoadingLoad[] =
"PageLoad.Clients.MultiTabLoading.DocumentTiming."
"NavigationToLoadEventFired";
const char kBackgroundHistogramMultiTabLoadingLoad[] =
"PageLoad.Clients.MultiTabLoading.DocumentTiming."
"NavigationToLoadEventFired.Background";
} // namespace internal } // namespace internal
...@@ -76,19 +60,39 @@ MultiTabLoadingPageLoadMetricsObserver::OnCommit( ...@@ -76,19 +60,39 @@ MultiTabLoadingPageLoadMetricsObserver::OnCommit(
: STOP_OBSERVING; : STOP_OBSERVING;
} }
#define RECORD_HISTOGRAMS(suffix, sample) \
do { \
base::TimeDelta sample_value(sample); \
PAGE_LOAD_HISTOGRAM( \
std::string(internal::kHistogramPrefixMultiTabLoading).append(suffix), \
sample_value); \
if (num_loading_tabs_when_started_ >= 2) { \
PAGE_LOAD_HISTOGRAM( \
std::string(internal::kHistogramPrefixMultiTabLoading2OrMore) \
.append(suffix), \
sample_value); \
} \
if (num_loading_tabs_when_started_ >= 5) { \
PAGE_LOAD_HISTOGRAM( \
std::string(internal::kHistogramPrefixMultiTabLoading5OrMore) \
.append(suffix), \
sample_value); \
} \
} while (false)
void MultiTabLoadingPageLoadMetricsObserver::OnFirstContentfulPaintInPage( void MultiTabLoadingPageLoadMetricsObserver::OnFirstContentfulPaintInPage(
const page_load_metrics::mojom::PageLoadTiming& timing, const page_load_metrics::mojom::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
if (WasStartedInForegroundOptionalEventInForeground( if (WasStartedInForegroundOptionalEventInForeground(
timing.paint_timing->first_contentful_paint, info)) { timing.paint_timing->first_contentful_paint, info)) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramMultiTabLoadingFirstContentfulPaint, RECORD_HISTOGRAMS(internal::kHistogramFirstContentfulPaintSuffix,
timing.paint_timing->first_contentful_paint.value()); timing.paint_timing->first_contentful_paint.value());
} }
if (WasStartedInBackgroundOptionalEventInForeground( if (WasStartedInBackgroundOptionalEventInForeground(
timing.paint_timing->first_contentful_paint, info)) { timing.paint_timing->first_contentful_paint, info)) {
PAGE_LOAD_HISTOGRAM( RECORD_HISTOGRAMS(
internal::kHistogramMultiTabLoadingForegroundToFirstContentfulPaint, internal::kHistogramForegroundToFirstContentfulPaintSuffix,
timing.paint_timing->first_contentful_paint.value() - timing.paint_timing->first_contentful_paint.value() -
info.first_foreground_time.value()); info.first_foreground_time.value());
} }
...@@ -100,13 +104,13 @@ void MultiTabLoadingPageLoadMetricsObserver:: ...@@ -100,13 +104,13 @@ void MultiTabLoadingPageLoadMetricsObserver::
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
if (WasStartedInForegroundOptionalEventInForeground( if (WasStartedInForegroundOptionalEventInForeground(
timing.paint_timing->first_meaningful_paint, info)) { timing.paint_timing->first_meaningful_paint, info)) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramMultiTabLoadingFirstMeaningfulPaint, RECORD_HISTOGRAMS(internal::kHistogramFirstMeaningfulPaintSuffix,
timing.paint_timing->first_meaningful_paint.value()); timing.paint_timing->first_meaningful_paint.value());
} }
if (WasStartedInBackgroundOptionalEventInForeground( if (WasStartedInBackgroundOptionalEventInForeground(
timing.paint_timing->first_meaningful_paint, info)) { timing.paint_timing->first_meaningful_paint, info)) {
PAGE_LOAD_HISTOGRAM( RECORD_HISTOGRAMS(
internal::kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint, internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
timing.paint_timing->first_meaningful_paint.value() - timing.paint_timing->first_meaningful_paint.value() -
info.first_foreground_time.value()); info.first_foreground_time.value());
} }
...@@ -117,12 +121,12 @@ void MultiTabLoadingPageLoadMetricsObserver::OnDomContentLoadedEventStart( ...@@ -117,12 +121,12 @@ void MultiTabLoadingPageLoadMetricsObserver::OnDomContentLoadedEventStart(
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
if (WasStartedInForegroundOptionalEventInForeground( if (WasStartedInForegroundOptionalEventInForeground(
timing.document_timing->dom_content_loaded_event_start, info)) { timing.document_timing->dom_content_loaded_event_start, info)) {
PAGE_LOAD_HISTOGRAM( RECORD_HISTOGRAMS(
internal::kHistogramMultiTabLoadingDomContentLoaded, internal::kHistogramDOMContentLoadedEventFiredSuffix,
timing.document_timing->dom_content_loaded_event_start.value()); timing.document_timing->dom_content_loaded_event_start.value());
} else { } else {
PAGE_LOAD_HISTOGRAM( RECORD_HISTOGRAMS(
internal::kBackgroundHistogramMultiTabLoadingDomContentLoaded, internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix,
timing.document_timing->dom_content_loaded_event_start.value()); timing.document_timing->dom_content_loaded_event_start.value());
} }
} }
...@@ -132,10 +136,10 @@ void MultiTabLoadingPageLoadMetricsObserver::OnLoadEventStart( ...@@ -132,10 +136,10 @@ void MultiTabLoadingPageLoadMetricsObserver::OnLoadEventStart(
const page_load_metrics::PageLoadExtraInfo& info) { const page_load_metrics::PageLoadExtraInfo& info) {
if (WasStartedInForegroundOptionalEventInForeground( if (WasStartedInForegroundOptionalEventInForeground(
timing.document_timing->load_event_start, info)) { timing.document_timing->load_event_start, info)) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramMultiTabLoadingLoad, RECORD_HISTOGRAMS(internal::kHistogramLoadEventFiredSuffix,
timing.document_timing->load_event_start.value()); timing.document_timing->load_event_start.value());
} else { } else {
PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramMultiTabLoadingLoad, RECORD_HISTOGRAMS(internal::kHistogramLoadEventFiredBackgroundSuffix,
timing.document_timing->load_event_start.value()); timing.document_timing->load_event_start.value());
} }
} }
......
...@@ -15,15 +15,10 @@ class NavigationHandle; ...@@ -15,15 +15,10 @@ class NavigationHandle;
namespace internal { namespace internal {
// Exposed for tests. // Exposed for tests.
extern const char kHistogramPrefixMultiTabLoading[];
extern const char kHistogramPrefixMultiTabLoading2OrMore[];
extern const char kHistogramPrefixMultiTabLoading5OrMore[];
extern const char kHistogramMultiTabLoadingNumTabsWithInflightLoad[]; extern const char kHistogramMultiTabLoadingNumTabsWithInflightLoad[];
extern const char kHistogramMultiTabLoadingFirstContentfulPaint[];
extern const char kHistogramMultiTabLoadingForegroundToFirstContentfulPaint[];
extern const char kHistogramMultiTabLoadingFirstMeaningfulPaint[];
extern const char kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint[];
extern const char kHistogramMultiTabLoadingDomContentLoaded[];
extern const char kBackgroundHistogramMultiTabLoadingDomContentLoaded[];
extern const char kHistogramMultiTabLoadingLoad[];
extern const char kBackgroundHistogramMultiTabLoadingLoad[];
} // namespace internal } // namespace internal
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h"
#include "base/test/histogram_tester.h" #include "base/test/histogram_tester.h"
#include "chrome/browser/page_load_metrics/observers/histogram_suffixes.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
...@@ -31,6 +32,11 @@ class MultiTabLoadingPageLoadMetricsBrowserTest : public InProcessBrowserTest { ...@@ -31,6 +32,11 @@ class MultiTabLoadingPageLoadMetricsBrowserTest : public InProcessBrowserTest {
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
ASSERT_TRUE(embedded_test_server()->Start()); ASSERT_TRUE(embedded_test_server()->Start());
} }
std::string HistogramNameWithSuffix(const char* suffix) {
return std::string(internal::kHistogramPrefixMultiTabLoading)
.append(suffix);
}
}; };
IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, SingleTab) { IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, SingleTab) {
...@@ -41,9 +47,12 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, SingleTab) { ...@@ -41,9 +47,12 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, SingleTab) {
// Navigate away to force the histogram recording. // Navigate away to force the histogram recording.
ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
histogram_tester.ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, 0);
histogram_tester.ExpectTotalCount( histogram_tester.ExpectTotalCount(
internal::kBackgroundHistogramMultiTabLoadingLoad, 0); HistogramNameWithSuffix(internal::kHistogramLoadEventFiredSuffix), 0);
histogram_tester.ExpectTotalCount(
HistogramNameWithSuffix(
internal::kHistogramLoadEventFiredBackgroundSuffix),
0);
} }
IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest,
...@@ -60,9 +69,12 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, ...@@ -60,9 +69,12 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest,
// Navigate away to force the histogram recording. // Navigate away to force the histogram recording.
ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
histogram_tester.ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, 1);
histogram_tester.ExpectTotalCount( histogram_tester.ExpectTotalCount(
internal::kBackgroundHistogramMultiTabLoadingLoad, 0); HistogramNameWithSuffix(internal::kHistogramLoadEventFiredSuffix), 1);
histogram_tester.ExpectTotalCount(
HistogramNameWithSuffix(
internal::kHistogramLoadEventFiredBackgroundSuffix),
0);
} }
IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest,
...@@ -87,7 +99,10 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest, ...@@ -87,7 +99,10 @@ IN_PROC_BROWSER_TEST_F(MultiTabLoadingPageLoadMetricsBrowserTest,
// Navigate away to force the histogram recording. // Navigate away to force the histogram recording.
ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
histogram_tester.ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, 0);
histogram_tester.ExpectTotalCount( histogram_tester.ExpectTotalCount(
internal::kBackgroundHistogramMultiTabLoadingLoad, 1); HistogramNameWithSuffix(internal::kHistogramLoadEventFiredSuffix), 0);
histogram_tester.ExpectTotalCount(
HistogramNameWithSuffix(
internal::kHistogramLoadEventFiredBackgroundSuffix),
1);
} }
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/optional.h" #include "base/optional.h"
#include "chrome/browser/page_load_metrics/observers/histogram_suffixes.h"
#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
#include "chrome/browser/page_load_metrics/page_load_tracker.h" #include "chrome/browser/page_load_metrics/page_load_tracker.h"
#include "chrome/common/page_load_metrics/test/page_load_metrics_test_util.h" #include "chrome/common/page_load_metrics/test/page_load_metrics_test_util.h"
...@@ -18,17 +19,18 @@ const char kDefaultTestUrl[] = "https://google.com"; ...@@ -18,17 +19,18 @@ const char kDefaultTestUrl[] = "https://google.com";
class TestMultiTabLoadingPageLoadMetricsObserver class TestMultiTabLoadingPageLoadMetricsObserver
: public MultiTabLoadingPageLoadMetricsObserver { : public MultiTabLoadingPageLoadMetricsObserver {
public: public:
explicit TestMultiTabLoadingPageLoadMetricsObserver(bool multi_tab_loading) explicit TestMultiTabLoadingPageLoadMetricsObserver(
: multi_tab_loading_(multi_tab_loading) {} int number_of_tabs_with_inflight_load)
: number_of_tabs_with_inflight_load_(number_of_tabs_with_inflight_load) {}
~TestMultiTabLoadingPageLoadMetricsObserver() override {} ~TestMultiTabLoadingPageLoadMetricsObserver() override {}
private: private:
int NumberOfTabsWithInflightLoad( int NumberOfTabsWithInflightLoad(
content::NavigationHandle* navigation_handle) override { content::NavigationHandle* navigation_handle) override {
return multi_tab_loading_ ? 1 : 0; return number_of_tabs_with_inflight_load_;
} }
const bool multi_tab_loading_; const int number_of_tabs_with_inflight_load_;
}; };
} // namespace } // namespace
...@@ -36,11 +38,11 @@ class TestMultiTabLoadingPageLoadMetricsObserver ...@@ -36,11 +38,11 @@ class TestMultiTabLoadingPageLoadMetricsObserver
class MultiTabLoadingPageLoadMetricsObserverTest class MultiTabLoadingPageLoadMetricsObserverTest
: public page_load_metrics::PageLoadMetricsObserverTestHarness { : public page_load_metrics::PageLoadMetricsObserverTestHarness {
public: public:
enum UseCase { SingleTabLoading, MultiTabLoading };
enum TabState { Foreground, Background }; enum TabState { Foreground, Background };
void SimulatePageLoad(UseCase use_case, TabState tab_state) { void SimulatePageLoad(int number_of_tabs_with_inflight_load,
use_case_ = use_case; TabState tab_state) {
number_of_tabs_with_inflight_load_ = number_of_tabs_with_inflight_load;
page_load_metrics::mojom::PageLoadTiming timing; page_load_metrics::mojom::PageLoadTiming timing;
page_load_metrics::InitPageLoadTimingForTest(&timing); page_load_metrics::InitPageLoadTimingForTest(&timing);
...@@ -74,75 +76,126 @@ class MultiTabLoadingPageLoadMetricsObserverTest ...@@ -74,75 +76,126 @@ class MultiTabLoadingPageLoadMetricsObserverTest
void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
tracker->AddObserver( tracker->AddObserver(
base::MakeUnique<TestMultiTabLoadingPageLoadMetricsObserver>( base::MakeUnique<TestMultiTabLoadingPageLoadMetricsObserver>(
use_case_.value() == MultiTabLoading)); number_of_tabs_with_inflight_load_.value()));
}
void ValidateHistograms(const char* suffix,
base::HistogramBase::Count expected_base,
base::HistogramBase::Count expected_2_or_more,
base::HistogramBase::Count expected_5_or_more) {
histogram_tester().ExpectTotalCount(
std::string(internal::kHistogramPrefixMultiTabLoading).append(suffix),
expected_base);
histogram_tester().ExpectTotalCount(
std::string(internal::kHistogramPrefixMultiTabLoading2OrMore)
.append(suffix),
expected_2_or_more);
histogram_tester().ExpectTotalCount(
std::string(internal::kHistogramPrefixMultiTabLoading5OrMore)
.append(suffix),
expected_5_or_more);
} }
private: private:
base::Optional<UseCase> use_case_; base::Optional<int> number_of_tabs_with_inflight_load_;
}; };
TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, SingleTabLoading) { TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, SingleTabLoading) {
SimulatePageLoad(SingleTabLoading, Foreground); SimulatePageLoad(0, Foreground);
histogram_tester().ExpectUniqueSample( histogram_tester().ExpectUniqueSample(
internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 0, 1); internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 0, 1);
histogram_tester().ExpectTotalCount(
internal::kHistogramMultiTabLoadingFirstContentfulPaint, 0); ValidateHistograms(internal::kHistogramFirstContentfulPaintSuffix, 0, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramForegroundToFirstContentfulPaintSuffix,
internal::kHistogramMultiTabLoadingForegroundToFirstContentfulPaint, 0); 0, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramFirstMeaningfulPaintSuffix, 0, 0, 0);
internal::kHistogramMultiTabLoadingFirstMeaningfulPaint, 0); ValidateHistograms(internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
histogram_tester().ExpectTotalCount( 0, 0, 0);
internal::kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint, 0); ValidateHistograms(internal::kHistogramDOMContentLoadedEventFiredSuffix, 0, 0,
histogram_tester().ExpectTotalCount( 0);
internal::kHistogramMultiTabLoadingDomContentLoaded, 0); ValidateHistograms(
histogram_tester().ExpectTotalCount( internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix, 0, 0, 0);
internal::kBackgroundHistogramMultiTabLoadingDomContentLoaded, 0); ValidateHistograms(internal::kHistogramLoadEventFiredSuffix, 0, 0, 0);
histogram_tester().ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, ValidateHistograms(internal::kHistogramLoadEventFiredBackgroundSuffix, 0, 0,
0); 0);
histogram_tester().ExpectTotalCount(
internal::kBackgroundHistogramMultiTabLoadingLoad, 0);
} }
TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabLoading) { TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabLoading1) {
SimulatePageLoad(MultiTabLoading, Foreground); SimulatePageLoad(1, Foreground);
histogram_tester().ExpectUniqueSample( histogram_tester().ExpectUniqueSample(
internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 1, 1); internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 1, 1);
histogram_tester().ExpectTotalCount(
internal::kHistogramMultiTabLoadingFirstContentfulPaint, 1); ValidateHistograms(internal::kHistogramFirstContentfulPaintSuffix, 1, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramForegroundToFirstContentfulPaintSuffix,
internal::kHistogramMultiTabLoadingForegroundToFirstContentfulPaint, 0); 0, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramFirstMeaningfulPaintSuffix, 1, 0, 0);
internal::kHistogramMultiTabLoadingFirstMeaningfulPaint, 1); ValidateHistograms(internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
histogram_tester().ExpectTotalCount( 0, 0, 0);
internal::kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint, 0); ValidateHistograms(internal::kHistogramDOMContentLoadedEventFiredSuffix, 1, 0,
histogram_tester().ExpectTotalCount( 0);
internal::kHistogramMultiTabLoadingDomContentLoaded, 1); ValidateHistograms(
histogram_tester().ExpectTotalCount( internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix, 0, 0, 0);
internal::kBackgroundHistogramMultiTabLoadingDomContentLoaded, 0); ValidateHistograms(internal::kHistogramLoadEventFiredSuffix, 1, 0, 0);
histogram_tester().ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, ValidateHistograms(internal::kHistogramLoadEventFiredBackgroundSuffix, 0, 0,
0);
}
TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabLoading2) {
SimulatePageLoad(2, Foreground);
histogram_tester().ExpectUniqueSample(
internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 2, 1);
ValidateHistograms(internal::kHistogramFirstContentfulPaintSuffix, 1, 1, 0);
ValidateHistograms(internal::kHistogramForegroundToFirstContentfulPaintSuffix,
0, 0, 0);
ValidateHistograms(internal::kHistogramFirstMeaningfulPaintSuffix, 1, 1, 0);
ValidateHistograms(internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
0, 0, 0);
ValidateHistograms(internal::kHistogramDOMContentLoadedEventFiredSuffix, 1, 1,
0);
ValidateHistograms(
internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix, 0, 0, 0);
ValidateHistograms(internal::kHistogramLoadEventFiredSuffix, 1, 1, 0);
ValidateHistograms(internal::kHistogramLoadEventFiredBackgroundSuffix, 0, 0,
0);
}
TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabLoading5) {
SimulatePageLoad(5, Foreground);
histogram_tester().ExpectUniqueSample(
internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 5, 1);
ValidateHistograms(internal::kHistogramFirstContentfulPaintSuffix, 1, 1, 1);
ValidateHistograms(internal::kHistogramForegroundToFirstContentfulPaintSuffix,
0, 0, 0);
ValidateHistograms(internal::kHistogramFirstMeaningfulPaintSuffix, 1, 1, 1);
ValidateHistograms(internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
0, 0, 0);
ValidateHistograms(internal::kHistogramDOMContentLoadedEventFiredSuffix, 1, 1,
1); 1);
histogram_tester().ExpectTotalCount( ValidateHistograms(
internal::kBackgroundHistogramMultiTabLoadingLoad, 0); internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix, 0, 0, 0);
ValidateHistograms(internal::kHistogramLoadEventFiredSuffix, 1, 1, 1);
ValidateHistograms(internal::kHistogramLoadEventFiredBackgroundSuffix, 0, 0,
0);
} }
TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabBackground) { TEST_F(MultiTabLoadingPageLoadMetricsObserverTest, MultiTabBackground) {
SimulatePageLoad(MultiTabLoading, Background); SimulatePageLoad(1, Background);
histogram_tester().ExpectUniqueSample( histogram_tester().ExpectUniqueSample(
internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 1, 1); internal::kHistogramMultiTabLoadingNumTabsWithInflightLoad, 1, 1);
histogram_tester().ExpectTotalCount(
internal::kHistogramMultiTabLoadingFirstContentfulPaint, 0); ValidateHistograms(internal::kHistogramFirstContentfulPaintSuffix, 0, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramForegroundToFirstContentfulPaintSuffix,
internal::kHistogramMultiTabLoadingForegroundToFirstContentfulPaint, 1); 1, 0, 0);
histogram_tester().ExpectTotalCount( ValidateHistograms(internal::kHistogramFirstMeaningfulPaintSuffix, 0, 0, 0);
internal::kHistogramMultiTabLoadingFirstMeaningfulPaint, 0); ValidateHistograms(internal::kHistogramForegroundToFirstMeaningfulPaintSuffix,
histogram_tester().ExpectTotalCount( 1, 0, 0);
internal::kHistogramMultiTabLoadingForegroundToFirstMeaningfulPaint, 1); ValidateHistograms(internal::kHistogramDOMContentLoadedEventFiredSuffix, 0, 0,
histogram_tester().ExpectTotalCount( 0);
internal::kHistogramMultiTabLoadingDomContentLoaded, 0); ValidateHistograms(
histogram_tester().ExpectTotalCount( internal::kHistogramDOMContentLoadedEventFiredBackgroundSuffix, 1, 0, 0);
internal::kBackgroundHistogramMultiTabLoadingDomContentLoaded, 1); ValidateHistograms(internal::kHistogramLoadEventFiredSuffix, 0, 0, 0);
histogram_tester().ExpectTotalCount(internal::kHistogramMultiTabLoadingLoad, ValidateHistograms(internal::kHistogramLoadEventFiredBackgroundSuffix, 1, 0,
0); 0);
histogram_tester().ExpectTotalCount(
internal::kBackgroundHistogramMultiTabLoadingLoad, 1);
} }
...@@ -106697,6 +106697,12 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -106697,6 +106697,12 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<suffix name="Clients.MultiTabLoading" <suffix name="Clients.MultiTabLoading"
label="PageLoadMetrics for page loads that started while there are label="PageLoadMetrics for page loads that started while there are
other loading tabs."/> other loading tabs."/>
<suffix name="Clients.MultiTabLoading.2OrMore"
label="PageLoadMetrics for page loads that started while there are 2 or
more other loading tabs."/>
<suffix name="Clients.MultiTabLoading.5OrMore"
label="PageLoadMetrics for page loads that started while there are 5 or
more other loading tabs."/>
<affected-histogram <affected-histogram
name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/> name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
<affected-histogram <affected-histogram
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment