| Index: chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
|
| diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
|
| index 49faa4f434487bef4b222ab5f066b7375bf2426b..3cf2d12708ffabf4a0498f9c5d0d0d77c458117f 100644
|
| --- a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
|
| +++ b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
|
| @@ -11,7 +11,7 @@
|
| #include "chrome/common/page_load_metrics/page_load_timing.h"
|
| #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
|
|
|
| -using page_load_metrics::UserAbortType;
|
| +using page_load_metrics::PageAbortReason;
|
|
|
| namespace internal {
|
|
|
| @@ -100,114 +100,113 @@ const char kHistogramFromGWSAbortBackgroundBeforeInteraction[] =
|
|
|
| namespace {
|
|
|
| -void LogCommittedAbortsBeforePaint(UserAbortType abort_type,
|
| - base::TimeDelta time_to_abort) {
|
| - switch (abort_type) {
|
| - case UserAbortType::ABORT_STOP:
|
| +void LogCommittedAbortsBeforePaint(PageAbortReason abort_reason,
|
| + base::TimeDelta page_end_time) {
|
| + switch (abort_reason) {
|
| + case PageAbortReason::ABORT_STOP:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortStopBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| - case UserAbortType::ABORT_CLOSE:
|
| + case PageAbortReason::ABORT_CLOSE:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortCloseBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| - case UserAbortType::ABORT_NEW_NAVIGATION:
|
| + case PageAbortReason::ABORT_NEW_NAVIGATION:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortNewNavigationBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| - case UserAbortType::ABORT_RELOAD:
|
| + case PageAbortReason::ABORT_RELOAD:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortReloadBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| - case UserAbortType::ABORT_FORWARD_BACK:
|
| + case PageAbortReason::ABORT_FORWARD_BACK:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortForwardBackBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| - case UserAbortType::ABORT_BACKGROUND:
|
| + case PageAbortReason::ABORT_BACKGROUND:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortBackgroundBeforePaint,
|
| - time_to_abort);
|
| + page_end_time);
|
| break;
|
| default:
|
| // These should only be logged for provisional aborts.
|
| - DCHECK_NE(abort_type, UserAbortType::ABORT_OTHER);
|
| + DCHECK_NE(abort_reason, PageAbortReason::ABORT_OTHER);
|
| break;
|
| }
|
| }
|
|
|
| -void LogAbortsAfterPaintBeforeInteraction(UserAbortType abort_type,
|
| - base::TimeDelta time_to_abort) {
|
| - switch (abort_type) {
|
| - case UserAbortType::ABORT_STOP:
|
| +void LogAbortsAfterPaintBeforeInteraction(
|
| + const page_load_metrics::PageAbortInfo& abort_info) {
|
| + switch (abort_info.reason) {
|
| + case PageAbortReason::ABORT_STOP:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortStopBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_CLOSE:
|
| + case PageAbortReason::ABORT_CLOSE:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortCloseBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_NEW_NAVIGATION:
|
| + case PageAbortReason::ABORT_NEW_NAVIGATION:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortNewNavigationBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_RELOAD:
|
| + case PageAbortReason::ABORT_RELOAD:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortReloadBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_FORWARD_BACK:
|
| + case PageAbortReason::ABORT_FORWARD_BACK:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortForwardBackBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_BACKGROUND:
|
| + case PageAbortReason::ABORT_BACKGROUND:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortBackgroundBeforeInteraction,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| default:
|
| // These should only be logged for provisional aborts.
|
| - DCHECK_NE(abort_type, UserAbortType::ABORT_OTHER);
|
| + DCHECK_NE(abort_info.reason, PageAbortReason::ABORT_OTHER);
|
| break;
|
| }
|
| }
|
|
|
| -void LogProvisionalAborts(UserAbortType abort_type,
|
| - base::TimeDelta time_to_abort) {
|
| - switch (abort_type) {
|
| - case UserAbortType::ABORT_STOP:
|
| +void LogProvisionalAborts(const page_load_metrics::PageAbortInfo& abort_info) {
|
| + switch (abort_info.reason) {
|
| + case PageAbortReason::ABORT_STOP:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortStopBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_CLOSE:
|
| + case PageAbortReason::ABORT_CLOSE:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortCloseBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_OTHER:
|
| + case PageAbortReason::ABORT_OTHER:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortOtherBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_NEW_NAVIGATION:
|
| + case PageAbortReason::ABORT_NEW_NAVIGATION:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortNewNavigationBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_RELOAD:
|
| + case PageAbortReason::ABORT_RELOAD:
|
| PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSAbortReloadBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_FORWARD_BACK:
|
| + case PageAbortReason::ABORT_FORWARD_BACK:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortForwardBackBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| - case UserAbortType::ABORT_BACKGROUND:
|
| + case PageAbortReason::ABORT_BACKGROUND:
|
| PAGE_LOAD_HISTOGRAM(
|
| internal::kHistogramFromGWSAbortBackgroundBeforeCommit,
|
| - time_to_abort);
|
| + abort_info.time_to_abort);
|
| break;
|
| default:
|
| NOTREACHED();
|
| @@ -216,24 +215,21 @@ void LogProvisionalAborts(UserAbortType abort_type,
|
| }
|
|
|
| bool WasAbortedInForeground(
|
| - UserAbortType abort_type,
|
| - const base::Optional<base::TimeDelta>& time_to_abort,
|
| - const page_load_metrics::PageLoadExtraInfo& info) {
|
| - if (!time_to_abort)
|
| - return false;
|
| - if (abort_type == UserAbortType::ABORT_NONE)
|
| + const page_load_metrics::PageLoadExtraInfo& info,
|
| + const page_load_metrics::PageAbortInfo& abort_info) {
|
| + if (!info.started_in_foreground ||
|
| + abort_info.reason == PageAbortReason::ABORT_NONE)
|
| return false;
|
| +
|
| + base::Optional<base::TimeDelta> time_to_abort(abort_info.time_to_abort);
|
| if (WasStartedInForegroundOptionalEventInForeground(time_to_abort, info))
|
| return true;
|
| - if (!info.started_in_foreground)
|
| - return false;
|
|
|
| - const base::TimeDelta time_to_abort_val = time_to_abort.value();
|
| const base::TimeDelta time_to_first_background =
|
| info.first_background_time.value();
|
| - DCHECK_GT(time_to_abort_val, time_to_first_background);
|
| + DCHECK_GT(abort_info.time_to_abort, time_to_first_background);
|
| base::TimeDelta background_abort_delta =
|
| - time_to_abort_val - time_to_first_background;
|
| + abort_info.time_to_abort - time_to_first_background;
|
| // Consider this a foregrounded abort if it occurred within 100ms of a
|
| // background. This is needed for closing some tabs, where the signal for
|
| // background is often slightly ahead of the signal for close.
|
| @@ -243,14 +239,12 @@ bool WasAbortedInForeground(
|
| }
|
|
|
| bool WasAbortedBeforeInteraction(
|
| - UserAbortType abort_type,
|
| - const base::Optional<base::TimeDelta>& time_to_interaction,
|
| - const base::Optional<base::TimeDelta>& time_to_abort) {
|
| + const page_load_metrics::PageAbortInfo& abort_info,
|
| + const base::Optional<base::TimeDelta>& time_to_interaction) {
|
| // These conditions should be guaranteed by the call to
|
| // WasAbortedInForeground, which is called before WasAbortedBeforeInteraction
|
| // gets invoked.
|
| - DCHECK(time_to_abort);
|
| - DCHECK(abort_type != UserAbortType::ABORT_NONE);
|
| + DCHECK(abort_info.reason != PageAbortReason::ABORT_NONE);
|
|
|
| if (!time_to_interaction)
|
| return true;
|
| @@ -264,13 +258,13 @@ bool WasAbortedBeforeInteraction(
|
| // 1000ms is enough to perform a pull to reload / forward_back gesture.
|
| // It's also too short a time for a user to consume any content
|
| // revealed by the interaction.
|
| - if (abort_type == UserAbortType::ABORT_RELOAD ||
|
| - abort_type == UserAbortType::ABORT_FORWARD_BACK) {
|
| + if (abort_info.reason == PageAbortReason::ABORT_RELOAD ||
|
| + abort_info.reason == PageAbortReason::ABORT_FORWARD_BACK) {
|
| return time_to_interaction.value() +
|
| base::TimeDelta::FromMilliseconds(1000) >
|
| - time_to_abort;
|
| + abort_info.time_to_abort;
|
| } else {
|
| - return time_to_interaction > time_to_abort;
|
| + return time_to_interaction > abort_info.time_to_abort;
|
| }
|
| }
|
|
|
| @@ -532,8 +526,8 @@ void FromGWSPageLoadMetricsLogger::OnComplete(
|
| if (!ShouldLogPostCommitMetrics(extra_info.url))
|
| return;
|
|
|
| - UserAbortType abort_type = extra_info.abort_type;
|
| - if (!WasAbortedInForeground(abort_type, extra_info.time_to_abort, extra_info))
|
| + page_load_metrics::PageAbortInfo abort_info = GetPageAbortInfo(extra_info);
|
| + if (!WasAbortedInForeground(extra_info, abort_info))
|
| return;
|
|
|
| // If we did not receive any timing IPCs from the render process, we can't
|
| @@ -546,13 +540,11 @@ void FromGWSPageLoadMetricsLogger::OnComplete(
|
| if (timing.IsEmpty())
|
| return;
|
|
|
| - base::TimeDelta time_to_abort = extra_info.time_to_abort.value();
|
| - if (!timing.first_paint || timing.first_paint >= time_to_abort) {
|
| - LogCommittedAbortsBeforePaint(abort_type, time_to_abort);
|
| - } else if (WasAbortedBeforeInteraction(abort_type,
|
| - first_user_interaction_after_paint_,
|
| - extra_info.time_to_abort)) {
|
| - LogAbortsAfterPaintBeforeInteraction(abort_type, time_to_abort);
|
| + if (!timing.first_paint || timing.first_paint >= abort_info.time_to_abort) {
|
| + LogCommittedAbortsBeforePaint(abort_info.reason, abort_info.time_to_abort);
|
| + } else if (WasAbortedBeforeInteraction(abort_info,
|
| + first_user_interaction_after_paint_)) {
|
| + LogAbortsAfterPaintBeforeInteraction(abort_info);
|
| }
|
| }
|
|
|
| @@ -562,11 +554,11 @@ void FromGWSPageLoadMetricsLogger::OnFailedProvisionalLoad(
|
| if (!ShouldLogFailedProvisionalLoadMetrics())
|
| return;
|
|
|
| - UserAbortType abort_type = extra_info.abort_type;
|
| - if (!WasAbortedInForeground(abort_type, extra_info.time_to_abort, extra_info))
|
| + page_load_metrics::PageAbortInfo abort_info = GetPageAbortInfo(extra_info);
|
| + if (!WasAbortedInForeground(extra_info, abort_info))
|
| return;
|
|
|
| - LogProvisionalAborts(abort_type, extra_info.time_to_abort.value());
|
| + LogProvisionalAborts(abort_info);
|
| }
|
|
|
| bool FromGWSPageLoadMetricsLogger::ShouldLogFailedProvisionalLoadMetrics() {
|
|
|