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 |