summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-13 21:59:52 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-13 21:59:52 +0000
commit761cc4739ca2ba8b0d64c4829ce0bfcd4899b732 (patch)
treedc33e629671d915b07aff7cd7c723ae6d38fd70b
parent19fb909bb05f2574c3fc0f16455c68b6143b2e75 (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/browser/prerender/prerender_field_trial.cc24
-rw-r--r--chrome/browser/prerender/prerender_manager.cc35
-rw-r--r--chrome/browser/prerender/prerender_manager.h18
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
};