Chromium Code Reviews| Index: chrome/browser/prerender/prerender_tab_helper.cc |
| diff --git a/chrome/browser/prerender/prerender_tab_helper.cc b/chrome/browser/prerender/prerender_tab_helper.cc |
| index 096705dc8ab5c57a1f271d56271684e192e30a71..1aae2ea609343c5e18f3a7a7c6bb8c5bf4d76c70 100644 |
| --- a/chrome/browser/prerender/prerender_tab_helper.cc |
| +++ b/chrome/browser/prerender/prerender_tab_helper.cc |
| @@ -26,16 +26,7 @@ PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents) |
| origin_(ORIGIN_NONE), |
| next_load_is_control_prerender_(false), |
| next_load_origin_(ORIGIN_NONE), |
| - weak_factory_(this) { |
| - // Determine if this is a prerender. |
| - PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
| - if (prerender_manager && |
| - prerender_manager->IsWebContentsPrerendering(web_contents, &origin_)) { |
| - navigation_type_ = NAVIGATION_TYPE_PRERENDERED; |
| - } else { |
| - navigation_type_ = NAVIGATION_TYPE_NORMAL; |
| - } |
| -} |
| + weak_factory_(this) {} |
| PrerenderTabHelper::~PrerenderTabHelper() { |
| } |
| @@ -106,12 +97,22 @@ void PrerenderTabHelper::DidStartProvisionalLoadForFrame( |
| const GURL& validated_url, |
| bool is_error_page, |
| bool is_iframe_srcdoc) { |
| + // Determine the navigation type. |
| + PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
| + if (prerender_manager && |
| + prerender_manager->IsWebContentsPrerendering(web_contents(), &origin_)) { |
| + navigation_type_ = NAVIGATION_TYPE_PRERENDERED; |
| + } else { |
| + navigation_type_ = NAVIGATION_TYPE_NORMAL; |
| + } |
| + |
| if (render_frame_host->GetParent()) |
| return; |
| // Record PPLT state for the beginning of a new navigation. |
| pplt_load_start_ = GetTimeTicksFromPrerenderManager(); |
| actual_load_start_ = base::TimeTicks(); |
| + last_load_ = GetTimeTicksFromPrerenderManager(); |
|
Bryan McQuade
2016/11/18 15:46:42
the reference start time that all page load metric
mattcary
2016/11/21 11:05:00
Done, although there seems no nice way to test due
|
| if (next_load_is_control_prerender_) { |
| DCHECK_EQ(NAVIGATION_TYPE_NORMAL, navigation_type_); |
| @@ -156,10 +157,10 @@ void PrerenderTabHelper::PrerenderSwappedIn() { |
| // Ensure we are not prerendering any more. |
| DCHECK_EQ(NAVIGATION_TYPE_PRERENDERED, navigation_type_); |
| DCHECK(!IsPrerendering()); |
| + last_swap_ = GetTimeTicksFromPrerenderManager(); |
| if (pplt_load_start_.is_null()) { |
| // If we have already finished loading, report a 0 PPLT. |
| RecordPerceivedPageLoadTime(base::TimeDelta(), 1.0); |
| - DCHECK_EQ(NAVIGATION_TYPE_NORMAL, navigation_type_); |
| } else { |
| // If we have not finished loading yet, record the actual load start, and |
| // rebase the start time to now. |
| @@ -173,6 +174,17 @@ void PrerenderTabHelper::WouldHavePrerenderedNextLoad(Origin origin) { |
| next_load_origin_ = origin; |
| } |
| +bool PrerenderTabHelper::LoadToPerceivedDelta(base::TimeDelta* delta) { |
| + if (!last_load_.is_null() && !last_swap_.is_null() && |
| + last_swap_ >= last_load_) { |
| + if (delta) { |
| + *delta = last_swap_ - last_load_; |
| + } |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| void PrerenderTabHelper::RecordPerceivedPageLoadTime( |
| base::TimeDelta perceived_page_load_time, |
| double fraction_plt_elapsed_at_swap_in) { |
| @@ -188,10 +200,6 @@ void PrerenderTabHelper::RecordPerceivedPageLoadTime( |
| prerender_manager->RecordPerceivedPageLoadTime( |
| origin_, navigation_type_, perceived_page_load_time, |
| fraction_plt_elapsed_at_swap_in, url_); |
| - |
| - // Reset state for the next navigation. |
| - navigation_type_ = NAVIGATION_TYPE_NORMAL; |
| - origin_ = ORIGIN_NONE; |
| } |
| } // namespace prerender |