| 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..ab818ae8473c6728ede53048e8575a8ce842dda6 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,14 @@ PrerenderHandle* PrerenderManager::AddPrerender(
|
| session_storage_namespace,
|
| control_group_behavior);
|
|
|
| - while (active_prerender_list_.size() > config_.max_elements) {
|
| + 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;
|
| }
|
|
|