Skip to content

Commit

Permalink
[M115] Add more histograms to the MultiTabLoading UMA family.
Browse files Browse the repository at this point in the history
This CL adds the following UMAs to investigate the negative LCP impacts
caused by simultaneously running other navigations.

- LCP
- Non overlapping histograms divided by the simultaneously running other
  loading count.
- ".MultiTabLoading.1OrMore" as an alias of ".MultiTabLoading"

(cherry picked from commit 42b38da)

Bug: 1448029
Change-Id: If39b17b1e0244dde9028fc84d5076d4aacc31eeb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4554760
Reviewed-by: Takashi Toyoshima <toyoshim@chromium.org>
Reviewed-by: Shunya Shishido <sisidovski@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1148569}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4569843
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Minoru Chikamune <chikamune@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/branch-heads/5790@{#49}
Cr-Branched-From: 1d71a33-refs/heads/main@{#1148114}
  • Loading branch information
chikamune-cr authored and Chromium LUCI CQ committed May 26, 2023
1 parent 9a8c435 commit a0088dd
Show file tree
Hide file tree
Showing 7 changed files with 377 additions and 96 deletions.
Expand Up @@ -21,6 +21,8 @@ const char kHistogramFirstMeaningfulPaintSuffix[] =
const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint";
const char kHistogramForegroundToFirstContentfulPaintSuffix[] =
"PaintTiming.ForegroundToFirstContentfulPaint";
const char kHistogramLargestContentfulPaintSuffix[] =
"PaintTiming.NavigationToLargestContentfulPaint";
const char kHistogramLoadEventFiredBackgroundSuffix[] =
"DocumentTiming.NavigationToLoadEventFired.Background";
const char kHistogramLoadEventFiredSuffix[] =
Expand Down
Expand Up @@ -16,6 +16,7 @@ extern const char kHistogramFirstInputDelaySuffix[];
extern const char kHistogramFirstMeaningfulPaintSuffix[];
extern const char kHistogramFirstPaintSuffix[];
extern const char kHistogramForegroundToFirstContentfulPaintSuffix[];
extern const char kHistogramLargestContentfulPaintSuffix[];
extern const char kHistogramLoadEventFiredBackgroundSuffix[];
extern const char kHistogramLoadEventFiredSuffix[];
extern const char kHistogramParseBlockedOnScriptLoadSuffix[];
Expand Down
Expand Up @@ -24,18 +24,32 @@ namespace internal {

const char kHistogramPrefixMultiTabLoading[] =
"PageLoad.Clients.MultiTabLoading.";
const char kHistogramPrefixMultiTabLoading1OrMore[] =
"PageLoad.Clients.MultiTabLoading.1OrMore.";
const char kHistogramPrefixMultiTabLoading2OrMore[] =
"PageLoad.Clients.MultiTabLoading.2OrMore.";
const char kHistogramPrefixMultiTabLoading5OrMore[] =
"PageLoad.Clients.MultiTabLoading.5OrMore.";
const char kHistogramPrefixMultiTabLoading0[] =
"PageLoad.Clients.MultiTabLoading.With_0_OtherLoading.";
const char kHistogramPrefixMultiTabLoading1[] =
"PageLoad.Clients.MultiTabLoading.With_1_OtherLoading.";
const char kHistogramPrefixMultiTabLoading2[] =
"PageLoad.Clients.MultiTabLoading.With_2_OtherLoading.";
const char kHistogramPrefixMultiTabLoading3[] =
"PageLoad.Clients.MultiTabLoading.With_3_OtherLoading.";
const char kHistogramPrefixMultiTabLoading4[] =
"PageLoad.Clients.MultiTabLoading.With_4_OtherLoading.";
const char kHistogramPrefixMultiTabLoading5[] =
"PageLoad.Clients.MultiTabLoading.With_5_OtherLoading.";

} // namespace internal

MultiTabLoadingPageLoadMetricsObserver::
MultiTabLoadingPageLoadMetricsObserver() {}
MultiTabLoadingPageLoadMetricsObserver() = default;

MultiTabLoadingPageLoadMetricsObserver::
~MultiTabLoadingPageLoadMetricsObserver() {}
~MultiTabLoadingPageLoadMetricsObserver() = default;

page_load_metrics::PageLoadMetricsObserver::ObservePolicy
MultiTabLoadingPageLoadMetricsObserver::OnStart(
Expand All @@ -44,8 +58,7 @@ MultiTabLoadingPageLoadMetricsObserver::OnStart(
bool started_in_foreground) {
num_loading_tabs_when_started_ =
NumberOfTabsWithInflightLoad(navigation_handle);
return num_loading_tabs_when_started_ > 0 ? CONTINUE_OBSERVING
: STOP_OBSERVING;
return CONTINUE_OBSERVING;
}

page_load_metrics::PageLoadMetricsObserver::ObservePolicy
Expand All @@ -64,24 +77,28 @@ MultiTabLoadingPageLoadMetricsObserver::OnPrerenderStart(
return 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); \
} \
#define RECORD_HISTOGRAM(condition, name) \
if (condition) { \
PAGE_LOAD_HISTOGRAM( \
std::string(internal::kHistogramPrefix##name).append(suffix_value), \
sample_value); \
}

#define RECORD_HISTOGRAMS(suffix, sample) \
do { \
int n = num_loading_tabs_when_started_; \
const char* suffix_value = suffix; \
base::TimeDelta sample_value(sample); \
RECORD_HISTOGRAM(n >= 1, MultiTabLoading) \
RECORD_HISTOGRAM(n >= 1, MultiTabLoading1OrMore) \
RECORD_HISTOGRAM(n >= 2, MultiTabLoading2OrMore) \
RECORD_HISTOGRAM(n >= 5, MultiTabLoading5OrMore) \
RECORD_HISTOGRAM(n == 0, MultiTabLoading0) \
RECORD_HISTOGRAM(n == 1, MultiTabLoading1) \
RECORD_HISTOGRAM(n == 2, MultiTabLoading2) \
RECORD_HISTOGRAM(n == 3, MultiTabLoading3) \
RECORD_HISTOGRAM(n == 4, MultiTabLoading4) \
RECORD_HISTOGRAM(n == 5, MultiTabLoading5) \
} while (false)

void MultiTabLoadingPageLoadMetricsObserver::OnFirstContentfulPaintInPage(
Expand Down Expand Up @@ -138,6 +155,34 @@ void MultiTabLoadingPageLoadMetricsObserver::OnLoadEventStart(
}
}

void MultiTabLoadingPageLoadMetricsObserver::OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) {
RecordTimingHistograms();
}

page_load_metrics::PageLoadMetricsObserver::ObservePolicy
MultiTabLoadingPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) {
// This follows UmaPageLoadMetricsObserver.
if (GetDelegate().DidCommit()) {
RecordTimingHistograms();
}
return STOP_OBSERVING;
}

void MultiTabLoadingPageLoadMetricsObserver::RecordTimingHistograms() {
const page_load_metrics::ContentfulPaintTimingInfo& largest_contentful_paint =
GetDelegate()
.GetLargestContentfulPaintHandler()
.MergeMainFrameAndSubframes();
if (largest_contentful_paint.ContainsValidTime() &&
WasStartedInForegroundOptionalEventInForeground(
largest_contentful_paint.Time(), GetDelegate())) {
RECORD_HISTOGRAMS(internal::kHistogramLargestContentfulPaintSuffix,
largest_contentful_paint.Time().value());
}
}

#if BUILDFLAG(IS_ANDROID)

int MultiTabLoadingPageLoadMetricsObserver::NumberOfTabsWithInflightLoad(
Expand Down
Expand Up @@ -15,8 +15,15 @@ namespace internal {

// Exposed for tests.
extern const char kHistogramPrefixMultiTabLoading[];
extern const char kHistogramPrefixMultiTabLoading1OrMore[];
extern const char kHistogramPrefixMultiTabLoading2OrMore[];
extern const char kHistogramPrefixMultiTabLoading5OrMore[];
extern const char kHistogramPrefixMultiTabLoading0[];
extern const char kHistogramPrefixMultiTabLoading1[];
extern const char kHistogramPrefixMultiTabLoading2[];
extern const char kHistogramPrefixMultiTabLoading3[];
extern const char kHistogramPrefixMultiTabLoading4[];
extern const char kHistogramPrefixMultiTabLoading5[];

} // namespace internal

Expand Down Expand Up @@ -61,6 +68,13 @@ class MultiTabLoadingPageLoadMetricsObserver
content::NavigationHandle* navigation_handle);

private:
void OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void RecordTimingHistograms();

int num_loading_tabs_when_started_;
};

Expand Down

0 comments on commit a0088dd

Please sign in to comment.