Chromium Code Reviews| Index: chrome/browser/prerender/prerender_manager.cc |
| diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
| index b43eec6bd94e869a3cf20555003360251379897b..05eae8ee7111a64b5b0f78bbaa1e5eb4d92b3b13 100644 |
| --- a/chrome/browser/prerender/prerender_manager.cc |
| +++ b/chrome/browser/prerender/prerender_manager.cc |
| @@ -69,9 +69,6 @@ const int kWindowDurationSeconds = 30; |
| // Time interval at which periodic cleanups are performed. |
| const int kPeriodicCleanupIntervalMs = 1000; |
| -// Time interval before a new prerender is allowed. |
| -const int kMinTimeBetweenPrerendersMs = 500; |
| - |
| // Valid HTTP methods for prerendering. |
| const char* const kValidHttpMethods[] = { |
| "GET", |
| @@ -196,6 +193,7 @@ PrerenderManager::PrerenderManager(Profile* profile, |
| // Any other checks simply make sure that the PrerenderManager is accessed on |
| // the same thread that it was created on. |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + config_.max_concurrency = GetMaxConcurrency(); |
| } |
| PrerenderManager::~PrerenderManager() { |
| @@ -555,6 +553,8 @@ const char* PrerenderManager::GetModeString() { |
| return "_Enabled"; |
| case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP: |
| return "_Control"; |
| + case PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: |
| + return "_Multi"; |
| case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP: |
| return "_5MinTTL"; |
| case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP: |
| @@ -586,6 +586,13 @@ bool PrerenderManager::IsNoUseGroup() { |
| return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP; |
| } |
| +// static |
| +size_t PrerenderManager::GetMaxConcurrency() { |
| + if (GetMode() == PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP) |
| + return 3; |
| + return 1; |
| +} |
| + |
| bool PrerenderManager::IsWebContentsPrerendering( |
| WebContents* web_contents) const { |
| DCHECK(CalledOnValidThread()); |
| @@ -945,12 +952,15 @@ PrerenderHandle* PrerenderManager::AddPrerender( |
| session_storage_namespace, |
| control_group_behavior); |
| - while (active_prerender_list_.size() > config_.max_elements) { |
| + DCHECK(Config::kMaximumMaxConcurrency >= config_.max_concurrency); |
|
dominich
2012/07/23 18:45:56
why is this important? if we want to experiment wi
mmenke
2012/07/23 18:48:49
Drive by nit: DCHECK_GE
gavinp
2012/07/23 18:51:55
This test guards the histograms sizing; the altern
gavinp
2012/07/23 18:51:55
DCHECK_GE won't work, as it takes a pointer to its
dominich
2012/07/23 18:57:14
in logging.h it uses const T& or int - I don't see
gavinp
2012/07/23 19:06:10
Sorry, takes a reference.
|
| + while (active_prerender_list_.size() > config_.max_concurrency) { |
| prerender_contents = active_prerender_list_.front()->contents_; |
| DCHECK(prerender_contents); |
| prerender_contents->Destroy(FINAL_STATUS_EVICTED); |
| } |
| + histograms_->RecordConcurrency(active_prerender_list_.size()); |
| + |
| StartSchedulingPeriodicCleanups(); |
| return prerender_handle; |
| } |