Commit 04550d10 authored by dominich@chromium.org's avatar dominich@chromium.org

Add field trial to extend prerender expiration to 5 minutes.


Review URL: http://codereview.chromium.org/9463026

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124777 0039d316-1c4b-4281-b951-d872f2087c98
parent d6dd5aae
......@@ -43,30 +43,41 @@ void SetupPrefetchFieldTrial() {
void SetupPrerenderFieldTrial() {
base::FieldTrial::Probability divisor = 1000;
base::FieldTrial::Probability exp1_probability = 200;
base::FieldTrial::Probability control1_probability = 200;
base::FieldTrial::Probability no_use1_probability = 100;
base::FieldTrial::Probability exp2_probability = 200;
base::FieldTrial::Probability control2_probability = 200;
base::FieldTrial::Probability no_use2_probability = 100;
base::FieldTrial::Probability exp1_probability = 166;
base::FieldTrial::Probability exp1_5min_ttl_probability = 83;
base::FieldTrial::Probability control1_probability = 166;
base::FieldTrial::Probability no_use1_probability = 83;
base::FieldTrial::Probability exp2_probability = 167;
base::FieldTrial::Probability exp2_5min_ttl_probability = 84;
base::FieldTrial::Probability control2_probability = 167;
base::FieldTrial::Probability no_use2_probability = 84;
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
channel == chrome::VersionInfo::CHANNEL_BETA) {
exp1_probability = 495;
exp1_probability = 490;
exp1_5min_ttl_probability = 5;
control1_probability = 5;
no_use1_probability = 0;
exp2_probability = 495;
exp2_probability = 490;
exp2_5min_ttl_probability = 5;
control2_probability = 5;
no_use2_probability = 0;
}
CHECK_EQ(divisor, exp1_probability + control1_probability +
no_use1_probability + exp2_probability +
control2_probability + no_use2_probability);
CHECK_EQ(divisor, exp1_probability + exp1_5min_ttl_probability +
control1_probability + no_use1_probability + exp2_probability +
exp2_5min_ttl_probability + control2_probability +
no_use2_probability);
scoped_refptr<base::FieldTrial> trial(
new base::FieldTrial("Prerender", divisor,
"ContentPrefetchPrerender1", 2012, 6, 30));
const int kExperiment1Group = trial->kDefaultGroupNumber;
const int kExperiment15minTTLGroup =
trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL1",
exp1_5min_ttl_probability);
const int kControl1Group =
trial->AppendGroup("ContentPrefetchPrerenderControl1",
control1_probability);
......@@ -76,6 +87,9 @@ void SetupPrerenderFieldTrial() {
const int kExperiment2Group =
trial->AppendGroup("ContentPrefetchPrerender2",
exp2_probability);
const int kExperiment25minTTLGroup =
trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL2",
exp2_5min_ttl_probability);
const int kControl2Group =
trial->AppendGroup("ContentPrefetchPrerenderControl2",
control2_probability);
......@@ -87,6 +101,10 @@ void SetupPrerenderFieldTrial() {
trial_group == kExperiment2Group) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP);
} else if (trial_group == kExperiment15minTTLGroup ||
trial_group == kExperiment25minTTLGroup) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
} else if (trial_group == kControl1Group ||
trial_group == kControl2Group) {
PrerenderManager::SetMode(
......
......@@ -415,7 +415,7 @@ bool PrerenderManager::MaybeUsePrerenderedPage(WebContents* web_contents,
if (!prerender_contents->load_start_time().is_null()) {
histograms_->RecordTimeUntilUsed(GetCurrentTimeTicks() -
prerender_contents->load_start_time(),
config_.max_age);
GetMaxAge());
}
histograms_->RecordPerSessionCount(++prerenders_per_session_count_);
......@@ -591,10 +591,7 @@ void PrerenderManager::SetMode(PrerenderManagerMode mode) {
// static
bool PrerenderManager::IsPrerenderingPossible() {
return GetMode() == PRERENDER_MODE_ENABLED ||
GetMode() == PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP ||
GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP ||
GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP;
return GetMode() != PRERENDER_MODE_DISABLED;
}
// static
......@@ -724,10 +721,14 @@ DictionaryValue* PrerenderManager::GetAsValue() const {
dict_value->SetBoolean("enabled", enabled_);
dict_value->SetBoolean("omnibox_enabled", IsOmniboxEnabled(profile_));
// If prerender is disabled via a flag this method is not even called.
std::string enabled_note;
if (IsControlGroup())
dict_value->SetString("disabled_reason", "(Disabled for testing)");
enabled_note += "(Control group: Not actually prerendering) ";
if (IsNoUseGroup())
dict_value->SetString("disabled_reason", "(Not using prerendered pages)");
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) ";
dict_value->SetString("enabled_note", enabled_note);
return dict_value;
}
......@@ -984,10 +985,15 @@ void PrerenderManager::PostCleanupTask() {
weak_factory_.GetWeakPtr()));
}
base::TimeDelta PrerenderManager::GetMaxAge() const {
return (GetMode() == PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP ?
base::TimeDelta::FromSeconds(300) : config_.max_age);
}
bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const {
DCHECK(CalledOnValidThread());
base::Time now = GetCurrentTime();
return (now - start < config_.max_age);
return (now - start < GetMaxAge());
}
void PrerenderManager::DeleteOldEntries() {
......
......@@ -69,6 +69,7 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
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_MAX
};
......@@ -317,6 +318,7 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
// automatically be cancelled.
void PostCleanupTask();
base::TimeDelta GetMaxAge() const;
bool IsPrerenderElementFresh(const base::Time start) const;
void DeleteOldEntries();
virtual base::Time GetCurrentTime() const;
......
......@@ -292,8 +292,8 @@ TEST_F(PrerenderManagerTest, ExpireTest) {
EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->AdvanceTime(prerender_manager()->config().max_age
+ base::TimeDelta::FromSeconds(1));
prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() +
base::TimeDelta::FromSeconds(1));
ASSERT_EQ(null, prerender_manager()->GetEntry(url));
}
......
......@@ -57,9 +57,9 @@ var PrerenderView = (function() {
if (prerenderInfo && ('enabled' in prerenderInfo)) {
this.prerenderEnabledSpan_.textContent =
prerenderInfo.enabled.toString();
if (prerenderInfo.disabled_reason) {
if (prerenderInfo.enabled_note) {
this.prerenderEnabledSpan_.textContent +=
' ' + prerenderInfo.disabled_reason;
' ' + prerenderInfo.enabled_note;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment