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

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

Issue 2152683004: Refactor PageLoadMetricsObserver completion callback policy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@relevantloads
Patch Set: fix metric Created 4 years, 5 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/aborts_page_load_metrics_observer.cc
diff --git a/chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_observer.cc
index e311b7184b7671d20fc8f5a90bac1a7ec9164432..487a863006e47698ccd898bc70a95a51078014ae 100644
--- a/chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_observer.cc
@@ -167,45 +167,58 @@ void RecordAbortDuringParse(UserAbortType abort_type,
NOTREACHED();
}
-} // namespace
-
-AbortsPageLoadMetricsObserver::AbortsPageLoadMetricsObserver() {}
-
-void AbortsPageLoadMetricsObserver::OnComplete(
- const page_load_metrics::PageLoadTiming& timing,
+bool ShouldTrackMetrics(
const page_load_metrics::PageLoadExtraInfo& extra_info) {
UserAbortType abort_type = extra_info.abort_type;
if (abort_type == UserAbortType::ABORT_NONE)
- return;
+ return false;
DCHECK(extra_info.time_to_abort);
// Don't log abort times if the page was backgrounded before the abort event.
if (!WasStartedInForegroundOptionalEventInForeground(extra_info.time_to_abort,
extra_info))
- return;
+ return false;
- const base::TimeDelta& time_to_abort = extra_info.time_to_abort.value();
+ return true;
+}
+
+} // namespace
- if (!extra_info.time_to_commit) {
- RecordAbortBeforeCommit(abort_type, time_to_abort);
+AbortsPageLoadMetricsObserver::AbortsPageLoadMetricsObserver() {}
+
+void AbortsPageLoadMetricsObserver::OnComplete(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& extra_info) {
+ if (!ShouldTrackMetrics(extra_info))
return;
- }
- // If we have a committed load but |timing.IsEmpty()|, then this load was not
- // tracked by the renderer. In this case, it is not possible to know whether
- // the abort signals came before the page painted. Additionally, for
- // consistency with PageLoad.(Document|Paint|Parse)Timing metrics recorded by
- // the CorePageLoadMetricsObserver, we ignore non-render-tracked loads when
- // tracking aborts after commit.
+ // If we did not receive any timing IPCs from the render process, we can't
+ // know for certain if the page was truly aborted before paint, or if the
+ // abort happened before we received the IPC from the render process. Thus, we
+ // do not log aborts for these page loads. Tracked page loads that receive no
+ // timing IPCs are tracked via the ERR_NO_IPCS_RECEIVED error code in the
+ // PageLoad.Events.InternalError histogram, so we can keep track of how often
+ // this happens.
if (timing.IsEmpty())
return;
+ const base::TimeDelta& time_to_abort = extra_info.time_to_abort.value();
if (timing.parse_start && time_to_abort >= timing.parse_start &&
(!timing.parse_stop || timing.parse_stop >= time_to_abort)) {
- RecordAbortDuringParse(abort_type, time_to_abort);
+ RecordAbortDuringParse(extra_info.abort_type, time_to_abort);
}
if (!timing.first_paint || timing.first_paint >= time_to_abort) {
- RecordAbortAfterCommitBeforePaint(abort_type, time_to_abort);
+ RecordAbortAfterCommitBeforePaint(extra_info.abort_type, time_to_abort);
}
}
+
+void AbortsPageLoadMetricsObserver::OnFailedProvisionalLoad(
+ const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info,
+ const page_load_metrics::PageLoadExtraInfo& extra_info) {
+ if (!ShouldTrackMetrics(extra_info))
+ return;
+
+ RecordAbortBeforeCommit(extra_info.abort_type,
+ extra_info.time_to_abort.value());
+}

Powered by Google App Engine
This is Rietveld 408576698