| 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();
|
|
|
| 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
|
|
|