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