diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-13 21:59:52 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-13 21:59:52 +0000 |
commit | 761cc4739ca2ba8b0d64c4829ce0bfcd4899b732 (patch) | |
tree | dc33e629671d915b07aff7cd7c723ae6d38fd70b | |
parent | 19fb909bb05f2574c3fc0f16455c68b6143b2e75 (diff) | |
download | chromium_src-761cc4739ca2ba8b0d64c4829ce0bfcd4899b732.zip chromium_src-761cc4739ca2ba8b0d64c4829ce0bfcd4899b732.tar.gz chromium_src-761cc4739ca2ba8b0d64c4829ce0bfcd4899b732.tar.bz2 |
Make 5 minutes the default prerender TTL, create new 15 minute field trial.
The 5min TTL field trial is going well; especially with the new abandon logic in the 5min trial, the results suggest slightly faster PLT. Since this is also a correctness issue for making the prerender API widely useable, let's go ahead an extend the TTL, and start a new field trial for a 15 minute TTL, to see if that far a horizon helps further.
While I was here, I discovered a misedit of PrerenderManager::PrerenderManagerMode from a while back; I've made that enum much less susceptable to careless edits now by coping the form of PrerenderFinalStatus.
R=mmenke@chromium.org,dominich@chromium.org
BUG=None
Review URL: https://chromiumcodereview.appspot.com/10908235
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156647 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/prerender/prerender_config.cc | 2 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_field_trial.cc | 24 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_manager.cc | 35 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_manager.h | 18 |
4 files changed, 40 insertions, 39 deletions
diff --git a/chrome/browser/prerender/prerender_config.cc b/chrome/browser/prerender/prerender_config.cc index fbe4351..b9482d4 100644 --- a/chrome/browser/prerender/prerender_config.cc +++ b/chrome/browser/prerender/prerender_config.cc @@ -9,7 +9,7 @@ namespace prerender { Config::Config() : max_bytes(100 * 1024 * 1024), max_concurrency(1), rate_limit_enabled(true), - time_to_live(base::TimeDelta::FromSeconds(30)), + time_to_live(base::TimeDelta::FromMinutes(5)), abandon_time_to_live(base::TimeDelta::FromSeconds(30)), https_allowed(true), default_tab_bounds(640, 480), diff --git a/chrome/browser/prerender/prerender_field_trial.cc b/chrome/browser/prerender/prerender_field_trial.cc index 160a033..69edf7b 100644 --- a/chrome/browser/prerender/prerender_field_trial.cc +++ b/chrome/browser/prerender/prerender_field_trial.cc @@ -53,7 +53,7 @@ void SetupPrerenderFieldTrial() { FieldTrial::Probability control_probability; FieldTrial::Probability experiment_multi_prerender_probability; - FieldTrial::Probability experiment_5min_ttl_probability; + FieldTrial::Probability experiment_15min_ttl_probability; FieldTrial::Probability experiment_no_use_probability; chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); @@ -64,19 +64,19 @@ void SetupPrerenderFieldTrial() { const FieldTrial::Probability release_control_probability = 10; const FieldTrial::Probability release_experiment_multi_prerender_probability = 0; - const FieldTrial::Probability release_experiment_5min_ttl_probability = 10; + const FieldTrial::Probability release_experiment_15min_ttl_probability = 10; const FieldTrial::Probability release_experiment_no_use_probability = 0; COMPILE_ASSERT( release_prerender_enabled_probability + release_control_probability + release_experiment_multi_prerender_probability + - release_experiment_5min_ttl_probability + + release_experiment_15min_ttl_probability + release_experiment_no_use_probability == divisor, release_experiment_probabilities_must_equal_divisor); - control_probability = release_experiment_5min_ttl_probability; + control_probability = release_experiment_15min_ttl_probability; experiment_multi_prerender_probability = release_experiment_multi_prerender_probability; - experiment_5min_ttl_probability = release_control_probability; + experiment_15min_ttl_probability = release_control_probability; experiment_no_use_probability = release_experiment_no_use_probability; } else { // In testing channels, use more experiments and a larger control group to @@ -85,18 +85,18 @@ void SetupPrerenderFieldTrial() { const FieldTrial::Probability dev_control_probability = 250; const FieldTrial::Probability dev_experiment_multi_prerender_probability = 250; - const FieldTrial::Probability dev_experiment_5min_ttl_probability = 125; + const FieldTrial::Probability dev_experiment_15min_ttl_probability = 125; const FieldTrial::Probability dev_experiment_no_use_probability = 125; COMPILE_ASSERT(dev_prerender_enabled_probability + dev_control_probability + dev_experiment_multi_prerender_probability + - dev_experiment_5min_ttl_probability + + dev_experiment_15min_ttl_probability + dev_experiment_no_use_probability == divisor, dev_experiment_probabilities_must_equal_divisor); - control_probability = dev_experiment_5min_ttl_probability; + control_probability = dev_experiment_15min_ttl_probability; experiment_multi_prerender_probability = dev_experiment_multi_prerender_probability; - experiment_5min_ttl_probability = dev_control_probability; + experiment_15min_ttl_probability = dev_control_probability; experiment_no_use_probability = dev_experiment_no_use_probability; } @@ -112,8 +112,8 @@ void SetupPrerenderFieldTrial() { trial->AppendGroup("PrerenderMulti", experiment_multi_prerender_probability); const int experiment_5_min_TTL_group = - trial->AppendGroup("Prerender5minTTL", - experiment_5min_ttl_probability); + trial->AppendGroup("Prerender15minTTL", + experiment_15min_ttl_probability); const int experiment_no_use_group = trial->AppendGroup("PrerenderNoUse", experiment_no_use_probability); @@ -130,7 +130,7 @@ void SetupPrerenderFieldTrial() { PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP); } else if (trial_group == experiment_5_min_TTL_group) { PrerenderManager::SetMode( - PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); + PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP); } else if (trial_group == experiment_no_use_group) { PrerenderManager::SetMode( PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc index b33554a..82cf8b1 100644 --- a/chrome/browser/prerender/prerender_manager.cc +++ b/chrome/browser/prerender/prerender_manager.cc @@ -107,17 +107,6 @@ bool NeedMatchCompleteDummyForFinalStatus(FinalStatus final_status) { final_status != FINAL_STATUS_CROSS_SITE_NAVIGATION_PENDING; } -size_t GetMaxConcurrency() { - return PrerenderManager::GetMode() == - PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP ? 3 : 1; -} - -base::TimeDelta GetTimeToLive() { - return PrerenderManager::GetMode() == - PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP ? - base::TimeDelta::FromMinutes(5) : base::TimeDelta::FromSeconds(30); -} - } // namespace class PrerenderManager::OnCloseTabContentsDeleter @@ -199,8 +188,18 @@ 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(); - config_.time_to_live = GetTimeToLive(); + + // Certain experiments override our default config_ values. + switch (PrerenderManager::GetMode()) { + case PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: + config_.max_concurrency = 3; + break; + case PrerenderManager::PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: + config_.time_to_live = base::TimeDelta::FromMinutes(15); + break; + default: + break; + } } PrerenderManager::~PrerenderManager() { @@ -568,11 +567,12 @@ const char* PrerenderManager::GetModeString() { return "_Control"; case PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP: return "_Multi"; - case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP: - return "_5MinTTL"; + case PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP: + return "_15MinTTL"; case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP: return "_NoUse"; case PRERENDER_MODE_MAX: + default: NOTREACHED() << "Invalid PrerenderManager mode."; break; }; @@ -713,8 +713,9 @@ DictionaryValue* PrerenderManager::GetAsValue() const { enabled_note += "(Control group: Not actually prerendering) "; if (IsNoUseGroup()) enabled_note += "(No-use group: Not swapping in prerendered pages) "; - if (GetMode() == PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP) - enabled_note += "(5 min TTL group: Extended prerender eviction to 5 mins) "; + if (GetMode() == PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP) + enabled_note += + "(15 min TTL group: Extended prerender eviction to 15 mins) "; dict_value->SetString("enabled_note", enabled_note); return dict_value; } diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h index 3510962..058aa35 100644 --- a/chrome/browser/prerender/prerender_manager.h +++ b/chrome/browser/prerender/prerender_manager.h @@ -69,16 +69,16 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, public base::NonThreadSafe, public ProfileKeyedService { public: - // PrerenderManagerMode is used in a UMA_HISTOGRAM, so please do not - // add in the middle. + // NOTE: New values need to be appended, since they are used in histograms. enum PrerenderManagerMode { - PRERENDER_MODE_DISABLED, - PRERENDER_MODE_ENABLED, - PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP, - PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP, - PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP, - PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP, - PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP, + PRERENDER_MODE_DISABLED = 0, + PRERENDER_MODE_ENABLED = 1, + PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP = 2, + PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP = 3, + // Obsolete: PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP = 4, + PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP = 5, + PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP = 6, + PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP = 7, PRERENDER_MODE_MAX }; |