| Index: chrome/browser/page_load_metrics/page_load_tracker.h
|
| diff --git a/chrome/browser/page_load_metrics/page_load_tracker.h b/chrome/browser/page_load_metrics/page_load_tracker.h
|
| index ef782b2a6406e91f60814b8ad272c4a4eae62d77..c08628d0d7236c1f13edb318241a19fee8fc8e6f 100644
|
| --- a/chrome/browser/page_load_metrics/page_load_tracker.h
|
| +++ b/chrome/browser/page_load_metrics/page_load_tracker.h
|
| @@ -77,11 +77,11 @@ enum InternalErrorLoadEvent {
|
| // occur if the browser filters loads less aggressively than the renderer.
|
| ERR_NO_IPCS_RECEIVED,
|
|
|
| - // Tracks frequency with which we record an abort time that occurred before
|
| + // Tracks frequency with which we record an end time that occurred before
|
| // navigation start. This is expected to happen in some cases (see comments in
|
| // cc file for details). We use this error counter to understand how often it
|
| // happens.
|
| - ERR_ABORT_BEFORE_NAVIGATION_START,
|
| + ERR_END_BEFORE_NAVIGATION_START,
|
|
|
| // A new navigation triggers abort updates in multiple trackers in
|
| // |aborted_provisional_loads_|, when usually there should only be one (the
|
| @@ -104,6 +104,9 @@ enum InternalErrorLoadEvent {
|
| // commit nor a failed provisional load.
|
| ERR_NO_COMMIT_OR_FAILED_PROVISIONAL_LOAD,
|
|
|
| + // No page load end time was recorded for this page load.
|
| + ERR_NO_PAGE_LOAD_END_TIME,
|
| +
|
| // Add values before this final count.
|
| ERR_LAST_ENTRY,
|
| };
|
| @@ -112,7 +115,7 @@ enum InternalErrorLoadEvent {
|
| // metrics_web_contents_observer.cc. They are declared here to allow both files
|
| // to access them.
|
| void RecordInternalError(InternalErrorLoadEvent event);
|
| -UserAbortType AbortTypeForPageTransition(ui::PageTransition transition);
|
| +PageEndReason EndReasonForPageTransition(ui::PageTransition transition);
|
| void LogAbortChainSameURLHistogram(int aborted_chain_size_same_url);
|
| bool IsNavigationUserInitiated(content::NavigationHandle* handle);
|
|
|
| @@ -138,7 +141,8 @@ class PageLoadTracker {
|
| void WillProcessNavigationResponse(
|
| content::NavigationHandle* navigation_handle);
|
| void Commit(content::NavigationHandle* navigation_handle);
|
| - void FailedProvisionalLoad(content::NavigationHandle* navigation_handle);
|
| + void FailedProvisionalLoad(content::NavigationHandle* navigation_handle,
|
| + base::TimeTicks failed_load_time);
|
| void WebContentsHidden();
|
| void WebContentsShown();
|
|
|
| @@ -168,8 +172,8 @@ class PageLoadTracker {
|
| return aborted_chain_size_same_url_;
|
| }
|
|
|
| - UserAbortType abort_type() const { return abort_type_; }
|
| - base::TimeTicks abort_time() const { return abort_time_; }
|
| + PageEndReason page_end_reason() const { return page_end_reason_; }
|
| + base::TimeTicks page_end_time() const { return page_end_time_; }
|
|
|
| void AddObserver(std::unique_ptr<PageLoadMetricsObserver> observer);
|
|
|
| @@ -180,19 +184,19 @@ class PageLoadTracker {
|
| // in the
|
| // browser process or not. We need this to possibly clamp browser timestamp on
|
| // a machine with inter process time tick skew.
|
| - void NotifyAbort(UserAbortType abort_type,
|
| - UserInitiatedInfo user_initiated_info,
|
| - base::TimeTicks timestamp,
|
| - bool is_certainly_browser_timestamp);
|
| - void UpdateAbort(UserAbortType abort_type,
|
| - UserInitiatedInfo user_initiated_info,
|
| - base::TimeTicks timestamp,
|
| - bool is_certainly_browser_timestamp);
|
| + void NotifyPageEnd(PageEndReason page_end_reason,
|
| + UserInitiatedInfo user_initiated_info,
|
| + base::TimeTicks timestamp,
|
| + bool is_certainly_browser_timestamp);
|
| + void UpdatePageEnd(PageEndReason page_end_reason,
|
| + UserInitiatedInfo user_initiated_info,
|
| + base::TimeTicks timestamp,
|
| + bool is_certainly_browser_timestamp);
|
|
|
| // This method returns true if this page load has been aborted with type of
|
| - // ABORT_OTHER, and the |abort_cause_time| is within a sufficiently close
|
| + // END_OTHER, and the |abort_cause_time| is within a sufficiently close
|
| // delta to when it was aborted. Note that only provisional loads can be
|
| - // aborted with ABORT_OTHER. While this heuristic is coarse, it works better
|
| + // aborted with END_OTHER. While this heuristic is coarse, it works better
|
| // and is simpler than other feasible methods. See https://goo.gl/WKRG98.
|
| bool IsLikelyProvisionalAbort(base::TimeTicks abort_cause_time) const;
|
|
|
| @@ -228,10 +232,10 @@ class PageLoadTracker {
|
| void ClampBrowserTimestampIfInterProcessTimeTickSkew(
|
| base::TimeTicks* event_time);
|
|
|
| - void UpdateAbortInternal(UserAbortType abort_type,
|
| - UserInitiatedInfo user_initiated_info,
|
| - base::TimeTicks timestamp,
|
| - bool is_certainly_browser_timestamp);
|
| + void UpdatePageEndInternal(PageEndReason page_end_reason,
|
| + UserInitiatedInfo user_initiated_info,
|
| + base::TimeTicks timestamp,
|
| + bool is_certainly_browser_timestamp);
|
|
|
| // If |final_navigation| is null, then this is an "unparented" abort chain,
|
| // and represents a sequence of provisional aborts that never ends with a
|
| @@ -266,21 +270,21 @@ class PageLoadTracker {
|
|
|
| std::unique_ptr<FailedProvisionalLoadInfo> failed_provisional_load_info_;
|
|
|
| - // Will be ABORT_NONE if we have not aborted this load yet. Otherwise will
|
| - // be the first abort action the user performed.
|
| - UserAbortType abort_type_;
|
| -
|
| - // Whether the abort for this page load was user initiated. For example, if
|
| - // this page load was aborted by a new navigation, this field tracks whether
|
| - // that new navigation was user-initiated. This field is only useful if this
|
| - // page load's abort type is a value other than ABORT_NONE. Note that this
|
| - // value is currently experimental, and is subject to change. In particular,
|
| - // this field is never set to true for some abort types, such as stop and
|
| - // close, since we don't yet have sufficient instrumentation to know if a stop
|
| - // or close was caused by a user action.
|
| - UserInitiatedInfo abort_user_initiated_info_;
|
| -
|
| - base::TimeTicks abort_time_;
|
| + // Will be END_NONE if we have not ended this load yet. Otherwise will
|
| + // be the first page end reason encountered.
|
| + PageEndReason page_end_reason_;
|
| +
|
| + // Whether the page end cause for this page load was user initiated. For
|
| + // example, if this page load was ended by a new navigation, this field tracks
|
| + // whether that new navigation was user-initiated. This field is only useful
|
| + // if this page load's end reason is a value other than END_NONE. Note that
|
| + // this value is currently experimental, and is subject to change. In
|
| + // particular, this field is never set to true for some page end reasons, such
|
| + // as stop and close, since we don't yet have sufficient instrumentation to
|
| + // know if a stop or close was caused by a user action.
|
| + UserInitiatedInfo page_end_user_initiated_info_;
|
| +
|
| + base::TimeTicks page_end_time_;
|
|
|
| // We record separate metrics for events that occur after a background,
|
| // because metrics like layout/paint are delayed artificially
|
|
|