Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1799)

Unified Diff: chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc

Issue 2699933003: Generalize abort tracking to page end state tracking (Closed)
Patch Set: fix comment Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698