OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <functional> | 10 #include <functional> |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 : url(url), time(time), origin(origin) {} | 158 : url(url), time(time), origin(origin) {} |
159 | 159 |
160 GURL url; | 160 GURL url; |
161 base::TimeTicks time; | 161 base::TimeTicks time; |
162 Origin origin; | 162 Origin origin; |
163 }; | 163 }; |
164 | 164 |
165 PrerenderManager::PrerenderManager(Profile* profile) | 165 PrerenderManager::PrerenderManager(Profile* profile) |
166 : profile_(profile), | 166 : profile_(profile), |
167 prerender_contents_factory_(PrerenderContents::CreateFactory()), | 167 prerender_contents_factory_(PrerenderContents::CreateFactory()), |
168 last_prerender_start_time_( | |
169 GetCurrentTimeTicks() - | |
170 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), | |
171 prerender_history_(new PrerenderHistory(kHistoryLength)), | 168 prerender_history_(new PrerenderHistory(kHistoryLength)), |
172 histograms_(new PrerenderHistograms()), | 169 histograms_(new PrerenderHistograms()), |
173 profile_network_bytes_(0), | 170 profile_network_bytes_(0), |
174 last_recorded_profile_network_bytes_(0), | 171 last_recorded_profile_network_bytes_(0), |
175 weak_factory_(this) { | 172 weak_factory_(this) { |
176 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 173 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
177 | 174 |
| 175 last_prerender_start_time_ = |
| 176 GetCurrentTimeTicks() - |
| 177 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs); |
| 178 |
178 // Certain experiments override our default config_ values. | 179 // Certain experiments override our default config_ values. |
179 switch (PrerenderManager::GetMode()) { | 180 switch (PrerenderManager::GetMode()) { |
180 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: | 181 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: |
181 config_.max_link_concurrency = 4; | 182 config_.max_link_concurrency = 4; |
182 config_.max_link_concurrency_per_launcher = 2; | 183 config_.max_link_concurrency_per_launcher = 2; |
183 break; | 184 break; |
184 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: | 185 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: |
185 config_.time_to_live = base::TimeDelta::FromMinutes(15); | 186 config_.time_to_live = base::TimeDelta::FromMinutes(15); |
186 break; | 187 break; |
187 default: | 188 default: |
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 DCHECK(prerender_data); | 1088 DCHECK(prerender_data); |
1088 DCHECK(prerender_data->contents()); | 1089 DCHECK(prerender_data->contents()); |
1089 | 1090 |
1090 if (prerender_data->expiry_time() > GetCurrentTimeTicks()) | 1091 if (prerender_data->expiry_time() > GetCurrentTimeTicks()) |
1091 return; | 1092 return; |
1092 prerender_data->contents()->Destroy(FINAL_STATUS_TIMED_OUT); | 1093 prerender_data->contents()->Destroy(FINAL_STATUS_TIMED_OUT); |
1093 } | 1094 } |
1094 } | 1095 } |
1095 | 1096 |
1096 base::Time PrerenderManager::GetCurrentTime() const { | 1097 base::Time PrerenderManager::GetCurrentTime() const { |
| 1098 if (time_override_) { |
| 1099 return time_override_->GetCurrentTime(); |
| 1100 } |
1097 return base::Time::Now(); | 1101 return base::Time::Now(); |
1098 } | 1102 } |
1099 | 1103 |
1100 base::TimeTicks PrerenderManager::GetCurrentTimeTicks() const { | 1104 base::TimeTicks PrerenderManager::GetCurrentTimeTicks() const { |
| 1105 if (time_override_) { |
| 1106 return time_override_->GetCurrentTimeTicks(); |
| 1107 } |
1101 return base::TimeTicks::Now(); | 1108 return base::TimeTicks::Now(); |
1102 } | 1109 } |
1103 | 1110 |
| 1111 void PrerenderManager::SetTimeOverride(std::unique_ptr<TimeOverride> override) { |
| 1112 time_override_ = std::move(override); |
| 1113 } |
| 1114 |
1104 std::unique_ptr<PrerenderContents> PrerenderManager::CreatePrerenderContents( | 1115 std::unique_ptr<PrerenderContents> PrerenderManager::CreatePrerenderContents( |
1105 const GURL& url, | 1116 const GURL& url, |
1106 const content::Referrer& referrer, | 1117 const content::Referrer& referrer, |
1107 Origin origin) { | 1118 Origin origin) { |
1108 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1119 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1109 return base::WrapUnique(prerender_contents_factory_->CreatePrerenderContents( | 1120 return base::WrapUnique(prerender_contents_factory_->CreatePrerenderContents( |
1110 this, profile_, url, referrer, origin)); | 1121 this, profile_, url, referrer, origin)); |
1111 } | 1122 } |
1112 | 1123 |
1113 void PrerenderManager::SortActivePrerenders() { | 1124 void PrerenderManager::SortActivePrerenders() { |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 DCHECK_EQ(1u, erased); | 1377 DCHECK_EQ(1u, erased); |
1367 } | 1378 } |
1368 | 1379 |
1369 void PrerenderManager::SetPrerenderContentsFactoryForTest( | 1380 void PrerenderManager::SetPrerenderContentsFactoryForTest( |
1370 PrerenderContents::Factory* prerender_contents_factory) { | 1381 PrerenderContents::Factory* prerender_contents_factory) { |
1371 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1382 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1372 prerender_contents_factory_.reset(prerender_contents_factory); | 1383 prerender_contents_factory_.reset(prerender_contents_factory); |
1373 } | 1384 } |
1374 | 1385 |
1375 } // namespace prerender | 1386 } // namespace prerender |
OLD | NEW |