| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prerender/prerender_manager.h" | 5 #include "chrome/browser/prerender/prerender_manager.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram.h" |
| 8 #include "base/time.h" | 9 #include "base/time.h" |
| 9 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/browser/browser_thread.h" | 11 #include "chrome/browser/browser_thread.h" |
| 11 #include "chrome/browser/prerender/prerender_contents.h" | 12 #include "chrome/browser/prerender/prerender_contents.h" |
| 12 #include "chrome/browser/renderer_host/render_view_host.h" | 13 #include "chrome/browser/renderer_host/render_view_host.h" |
| 13 #include "chrome/browser/tab_contents/tab_contents.h" | 14 #include "chrome/browser/tab_contents/tab_contents.h" |
| 14 #include "chrome/browser/tab_contents/render_view_host_manager.h" | 15 #include "chrome/browser/tab_contents/render_view_host_manager.h" |
| 15 #include "chrome/common/render_messages.h" | 16 #include "chrome/common/render_messages.h" |
| 16 | 17 |
| 17 struct PrerenderManager::PrerenderContentsData { | 18 struct PrerenderManager::PrerenderContentsData { |
| 18 PrerenderContents* contents_; | 19 PrerenderContents* contents_; |
| 19 base::Time start_time_; | 20 base::Time start_time_; |
| 20 GURL url_; | 21 GURL url_; |
| 21 PrerenderContentsData(PrerenderContents* contents, | 22 PrerenderContentsData(PrerenderContents* contents, |
| 22 base::Time start_time, | 23 base::Time start_time, |
| 23 GURL url) | 24 GURL url) |
| 24 : contents_(contents), | 25 : contents_(contents), |
| 25 start_time_(start_time), | 26 start_time_(start_time), |
| 26 url_(url) { | 27 url_(url) { |
| 27 } | 28 } |
| 28 }; | 29 }; |
| 29 | 30 |
| 30 PrerenderManager::PrerenderManager(Profile* profile) | 31 PrerenderManager::PrerenderManager(Profile* profile) |
| 31 : profile_(profile), | 32 : profile_(profile), |
| 32 max_prerender_age_(base::TimeDelta::FromSeconds( | 33 max_prerender_age_(base::TimeDelta::FromSeconds( |
| 33 kDefaultMaxPrerenderAgeSeconds)), | 34 kDefaultMaxPrerenderAgeSeconds)), |
| 34 max_elements_(kDefaultMaxPrerenderElements), | 35 max_elements_(kDefaultMaxPrerenderElements), |
| 35 prerender_contents_factory_(PrerenderContents::CreateFactory()) { | 36 prerender_contents_factory_(PrerenderContents::CreateFactory()), |
| 37 mode_(PRERENDER_MODE_ENABLED) { |
| 36 } | 38 } |
| 37 | 39 |
| 38 PrerenderManager::~PrerenderManager() { | 40 PrerenderManager::~PrerenderManager() { |
| 39 while (prerender_list_.size() > 0) { | 41 while (prerender_list_.size() > 0) { |
| 40 PrerenderContentsData data = prerender_list_.front(); | 42 PrerenderContentsData data = prerender_list_.front(); |
| 41 prerender_list_.pop_front(); | 43 prerender_list_.pop_front(); |
| 42 delete data.contents_; | 44 delete data.contents_; |
| 43 } | 45 } |
| 44 } | 46 } |
| 45 | 47 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 tc->SwapInRenderViewHost(rvh); | 110 tc->SwapInRenderViewHost(rvh); |
| 109 | 111 |
| 110 ViewHostMsg_FrameNavigate_Params* p = pc->navigate_params(); | 112 ViewHostMsg_FrameNavigate_Params* p = pc->navigate_params(); |
| 111 if (p != NULL) | 113 if (p != NULL) |
| 112 tc->DidNavigate(rvh, *p); | 114 tc->DidNavigate(rvh, *p); |
| 113 | 115 |
| 114 string16 title = pc->title(); | 116 string16 title = pc->title(); |
| 115 if (!title.empty()) | 117 if (!title.empty()) |
| 116 tc->UpdateTitle(rvh, pc->page_id(), UTF16ToWideHack(title)); | 118 tc->UpdateTitle(rvh, pc->page_id(), UTF16ToWideHack(title)); |
| 117 | 119 |
| 120 if (pc->has_stopped_loading()) |
| 121 tc->DidStopLoading(); |
| 122 |
| 118 return true; | 123 return true; |
| 119 } | 124 } |
| 120 | 125 |
| 121 void PrerenderManager::RemoveEntry(PrerenderContents* entry) { | 126 void PrerenderManager::RemoveEntry(PrerenderContents* entry) { |
| 122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 123 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); | 128 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); |
| 124 it != prerender_list_.end(); | 129 it != prerender_list_.end(); |
| 125 ++it) { | 130 ++it) { |
| 126 if (it->contents_ == entry) { | 131 if (it->contents_ == entry) { |
| 127 prerender_list_.erase(it); | 132 prerender_list_.erase(it); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 141 return (now - start < max_prerender_age_); | 146 return (now - start < max_prerender_age_); |
| 142 } | 147 } |
| 143 | 148 |
| 144 PrerenderContents* PrerenderManager::CreatePrerenderContents( | 149 PrerenderContents* PrerenderManager::CreatePrerenderContents( |
| 145 const GURL& url, | 150 const GURL& url, |
| 146 const std::vector<GURL>& alias_urls) { | 151 const std::vector<GURL>& alias_urls) { |
| 147 return prerender_contents_factory_->CreatePrerenderContents( | 152 return prerender_contents_factory_->CreatePrerenderContents( |
| 148 this, profile_, url, alias_urls); | 153 this, profile_, url, alias_urls); |
| 149 } | 154 } |
| 150 | 155 |
| 156 void PrerenderManager::RecordPerceivedPageLoadTime(base::TimeDelta pplt) { |
| 157 switch(mode_) { |
| 158 case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP: |
| 159 UMA_HISTOGRAM_TIMES("PLT.PerceivedPageLoadTime_PrerenderControl", pplt); |
| 160 break; |
| 161 case PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP: |
| 162 UMA_HISTOGRAM_TIMES("PLT.PerceivedPageLoadTime_PrerenderTreatment", pplt); |
| 163 break; |
| 164 default: |
| 165 break; |
| 166 } |
| 167 } |
| 168 |
| 151 PrerenderContents* PrerenderManager::FindEntry(const GURL& url) { | 169 PrerenderContents* PrerenderManager::FindEntry(const GURL& url) { |
| 152 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); | 170 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); |
| 153 it != prerender_list_.end(); | 171 it != prerender_list_.end(); |
| 154 ++it) { | 172 ++it) { |
| 155 if (it->contents_->MatchesURL(url)) | 173 if (it->contents_->MatchesURL(url)) |
| 156 return it->contents_; | 174 return it->contents_; |
| 157 } | 175 } |
| 158 // Entry not found. | 176 // Entry not found. |
| 159 return NULL; | 177 return NULL; |
| 160 } | 178 } |
| OLD | NEW |