| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 prerender_contents_factory_(PrerenderContents::CreateFactory()), | 187 prerender_contents_factory_(PrerenderContents::CreateFactory()), |
| 188 last_prerender_start_time_(GetCurrentTimeTicks() - | 188 last_prerender_start_time_(GetCurrentTimeTicks() - |
| 189 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), | 189 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), |
| 190 prerender_history_(new PrerenderHistory(kHistoryLength)), | 190 prerender_history_(new PrerenderHistory(kHistoryLength)), |
| 191 histograms_(new PrerenderHistograms()), | 191 histograms_(new PrerenderHistograms()), |
| 192 profile_network_bytes_(0), | 192 profile_network_bytes_(0), |
| 193 last_recorded_profile_network_bytes_(0) { | 193 last_recorded_profile_network_bytes_(0) { |
| 194 // There are some assumptions that the PrerenderManager is on the UI thread. | 194 // There are some assumptions that the PrerenderManager is on the UI thread. |
| 195 // Any other checks simply make sure that the PrerenderManager is accessed on | 195 // Any other checks simply make sure that the PrerenderManager is accessed on |
| 196 // the same thread that it was created on. | 196 // the same thread that it was created on. |
| 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 197 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 198 | 198 |
| 199 // Certain experiments override our default config_ values. | 199 // Certain experiments override our default config_ values. |
| 200 switch (PrerenderManager::GetMode()) { | 200 switch (PrerenderManager::GetMode()) { |
| 201 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: | 201 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: |
| 202 config_.max_link_concurrency = 4; | 202 config_.max_link_concurrency = 4; |
| 203 config_.max_link_concurrency_per_launcher = 2; | 203 config_.max_link_concurrency_per_launcher = 2; |
| 204 break; | 204 break; |
| 205 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: | 205 case PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: |
| 206 config_.time_to_live = base::TimeDelta::FromMinutes(15); | 206 config_.time_to_live = base::TimeDelta::FromMinutes(15); |
| 207 break; | 207 break; |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 } | 548 } |
| 549 | 549 |
| 550 // Destroy the old WebContents relatively promptly to reduce resource usage. | 550 // Destroy the old WebContents relatively promptly to reduce resource usage. |
| 551 PostCleanupTask(); | 551 PostCleanupTask(); |
| 552 } | 552 } |
| 553 | 553 |
| 554 void PrerenderManager::RecordPageLoadTimeNotSwappedIn( | 554 void PrerenderManager::RecordPageLoadTimeNotSwappedIn( |
| 555 Origin origin, | 555 Origin origin, |
| 556 base::TimeDelta page_load_time, | 556 base::TimeDelta page_load_time, |
| 557 const GURL& url) { | 557 const GURL& url) { |
| 558 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 558 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 559 histograms_->RecordPageLoadTimeNotSwappedIn(origin, page_load_time, url); | 559 histograms_->RecordPageLoadTimeNotSwappedIn(origin, page_load_time, url); |
| 560 } | 560 } |
| 561 | 561 |
| 562 void PrerenderManager::RecordPerceivedPageLoadTime( | 562 void PrerenderManager::RecordPerceivedPageLoadTime( |
| 563 Origin origin, | 563 Origin origin, |
| 564 NavigationType navigation_type, | 564 NavigationType navigation_type, |
| 565 base::TimeDelta perceived_page_load_time, | 565 base::TimeDelta perceived_page_load_time, |
| 566 double fraction_plt_elapsed_at_swap_in, | 566 double fraction_plt_elapsed_at_swap_in, |
| 567 const GURL& url) { | 567 const GURL& url) { |
| 568 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 568 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 569 if (!IsEnabled()) | 569 if (!IsEnabled()) |
| 570 return; | 570 return; |
| 571 | 571 |
| 572 histograms_->RecordPerceivedPageLoadTime( | 572 histograms_->RecordPerceivedPageLoadTime( |
| 573 origin, perceived_page_load_time, navigation_type, url); | 573 origin, perceived_page_load_time, navigation_type, url); |
| 574 | 574 |
| 575 if (navigation_type == NAVIGATION_TYPE_PRERENDERED) { | 575 if (navigation_type == NAVIGATION_TYPE_PRERENDERED) { |
| 576 histograms_->RecordPercentLoadDoneAtSwapin( | 576 histograms_->RecordPercentLoadDoneAtSwapin( |
| 577 origin, fraction_plt_elapsed_at_swap_in); | 577 origin, fraction_plt_elapsed_at_swap_in); |
| 578 } | 578 } |
| (...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1258 } | 1258 } |
| 1259 | 1259 |
| 1260 void PrerenderManager::AddProfileNetworkBytesIfEnabled(int64 bytes) { | 1260 void PrerenderManager::AddProfileNetworkBytesIfEnabled(int64 bytes) { |
| 1261 DCHECK_GE(bytes, 0); | 1261 DCHECK_GE(bytes, 0); |
| 1262 if (IsEnabled() && ActuallyPrerendering()) | 1262 if (IsEnabled() && ActuallyPrerendering()) |
| 1263 profile_network_bytes_ += bytes; | 1263 profile_network_bytes_ += bytes; |
| 1264 } | 1264 } |
| 1265 | 1265 |
| 1266 void PrerenderManager::AddPrerenderProcessHost( | 1266 void PrerenderManager::AddPrerenderProcessHost( |
| 1267 content::RenderProcessHost* process_host) { | 1267 content::RenderProcessHost* process_host) { |
| 1268 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1268 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1269 DCHECK(prerender_process_hosts_.find(process_host) == | 1269 DCHECK(prerender_process_hosts_.find(process_host) == |
| 1270 prerender_process_hosts_.end()); | 1270 prerender_process_hosts_.end()); |
| 1271 prerender_process_hosts_.insert(process_host); | 1271 prerender_process_hosts_.insert(process_host); |
| 1272 process_host->AddObserver(this); | 1272 process_host->AddObserver(this); |
| 1273 } | 1273 } |
| 1274 | 1274 |
| 1275 bool PrerenderManager::MayReuseProcessHost( | 1275 bool PrerenderManager::MayReuseProcessHost( |
| 1276 content::RenderProcessHost* process_host) { | 1276 content::RenderProcessHost* process_host) { |
| 1277 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1277 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1278 // Isolate prerender processes to make the resource monitoring check more | 1278 // Isolate prerender processes to make the resource monitoring check more |
| 1279 // accurate. | 1279 // accurate. |
| 1280 return (prerender_process_hosts_.find(process_host) == | 1280 return (prerender_process_hosts_.find(process_host) == |
| 1281 prerender_process_hosts_.end()); | 1281 prerender_process_hosts_.end()); |
| 1282 } | 1282 } |
| 1283 | 1283 |
| 1284 void PrerenderManager::RenderProcessHostDestroyed( | 1284 void PrerenderManager::RenderProcessHostDestroyed( |
| 1285 content::RenderProcessHost* host) { | 1285 content::RenderProcessHost* host) { |
| 1286 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1286 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1287 size_t erased = prerender_process_hosts_.erase(host); | 1287 size_t erased = prerender_process_hosts_.erase(host); |
| 1288 DCHECK_EQ(1u, erased); | 1288 DCHECK_EQ(1u, erased); |
| 1289 } | 1289 } |
| 1290 | 1290 |
| 1291 } // namespace prerender | 1291 } // namespace prerender |
| OLD | NEW |