Commit 66d73f0d authored by gavinp@chromium.org's avatar gavinp@chromium.org

Revert 148639 - Clean up Prerender field trials.

Remove the second comparison group from the prerender field trials, and reorganize the code so that we can compile assert on the summation. The second group has already shown us our numbers are good. The compile time assertion should avoid fat finger errors that we've caught in other reviews (which would otherwise have been a _beta crasher_!).

I think we should also give consideration to renaming these histograms for ease of understanding. I know that makes a historic comparison cost, but it makes arriving new in this area so much easier.

I'll rebase the multiple prerender CL on top of this.

R=dominich@chromium.org
BUG=None

TEST=


Review URL: https://chromiumcodereview.appspot.com/10802062

TBR=gavinp@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10828041

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148643 0039d316-1c4b-4281-b951-d872f2087c98
parent 37cdb7ac
...@@ -16,9 +16,6 @@ ...@@ -16,9 +16,6 @@
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h" #include "chrome/common/chrome_version_info.h"
using base::FieldTrial;
using base::FieldTrialList;
namespace prerender { namespace prerender {
namespace { namespace {
...@@ -37,10 +34,10 @@ void SetupPrefetchFieldTrial() { ...@@ -37,10 +34,10 @@ void SetupPrefetchFieldTrial() {
return; return;
} }
const FieldTrial::Probability divisor = 1000; const base::FieldTrial::Probability divisor = 1000;
const FieldTrial::Probability prefetch_probability = 500; const base::FieldTrial::Probability prefetch_probability = 500;
scoped_refptr<FieldTrial> trial( scoped_refptr<base::FieldTrial> trial(
FieldTrialList::FactoryGetFieldTrial( base::FieldTrialList::FactoryGetFieldTrial(
"Prefetch", divisor, "ContentPrefetchPrefetchOff", "Prefetch", divisor, "ContentPrefetchPrefetchOff",
2013, 6, 30, NULL)); 2013, 6, 30, NULL));
const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn", const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn",
...@@ -49,75 +46,76 @@ void SetupPrefetchFieldTrial() { ...@@ -49,75 +46,76 @@ void SetupPrefetchFieldTrial() {
} }
void SetupPrerenderFieldTrial() { void SetupPrerenderFieldTrial() {
const FieldTrial::Probability divisor = 1000; base::FieldTrial::Probability divisor = 1000;
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;
FieldTrial::Probability prerender_enabled_probability; base::FieldTrial::Probability exp2_probability = 167;
FieldTrial::Probability control_probability; base::FieldTrial::Probability exp2_5min_ttl_probability = 84;
FieldTrial::Probability experiment_5min_ttl_probability; base::FieldTrial::Probability control2_probability = 167;
FieldTrial::Probability experiment_no_use_probability; 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) {
// Use very conservatives and stable settings in beta and stable. exp1_probability = 490;
const FieldTrial::Probability release_prerender_enabled_probability = 980; exp1_5min_ttl_probability = 5;
const FieldTrial::Probability release_control_probability = 10; control1_probability = 5;
const FieldTrial::Probability release_experiment_5min_ttl_probability = 10; no_use1_probability = 0;
const FieldTrial::Probability release_experiment_no_use_probability = 0; exp2_probability = 490;
COMPILE_ASSERT( exp2_5min_ttl_probability = 5;
release_prerender_enabled_probability + release_control_probability + control2_probability = 5;
release_experiment_5min_ttl_probability + no_use2_probability = 0;
release_experiment_no_use_probability == divisor,
release_experiment_probabilities_must_equal_divisor);
prerender_enabled_probability = release_prerender_enabled_probability;
control_probability = release_experiment_5min_ttl_probability;
experiment_5min_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
// improve quality of data.
const FieldTrial::Probability dev_prerender_enabled_probability = 333;
const FieldTrial::Probability dev_control_probability = 333;
const FieldTrial::Probability dev_experiment_5min_ttl_probability = 167;
const FieldTrial::Probability dev_experiment_no_use_probability = 167;
COMPILE_ASSERT(dev_prerender_enabled_probability + dev_control_probability +
dev_experiment_5min_ttl_probability +
dev_experiment_no_use_probability == divisor,
dev_experiment_probabilities_must_equal_divisor);
prerender_enabled_probability = dev_prerender_enabled_probability;
control_probability = dev_experiment_5min_ttl_probability;
experiment_5min_ttl_probability = dev_control_probability;
experiment_no_use_probability = dev_experiment_no_use_probability;
} }
CHECK_EQ(divisor, exp1_probability + exp1_5min_ttl_probability +
int prerender_enabled_group = -1; control1_probability + no_use1_probability + exp2_probability +
scoped_refptr<FieldTrial> trial( exp2_5min_ttl_probability + control2_probability +
FieldTrialList::FactoryGetFieldTrial( no_use2_probability);
"Prerender", divisor, "PrerenderEnabled", int experiment_1_group = -1;
2013, 6, 30, &prerender_enabled_group)); scoped_refptr<base::FieldTrial> trial(
const int control_group = base::FieldTrialList::FactoryGetFieldTrial(
trial->AppendGroup("PrerenderControl", "Prerender", divisor, "ContentPrefetchPrerender1",
control_probability); 2013, 6, 30, &experiment_1_group));
const int experiment_5_min_TTL_group =
trial->AppendGroup("Prerender5minTTL", const int experiment_15_min_TTL_group =
experiment_5min_ttl_probability); trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL1",
const int experiment_no_use_group = exp1_5min_ttl_probability);
trial->AppendGroup("PrerenderNoUse", const int control_1_group =
experiment_no_use_probability); trial->AppendGroup("ContentPrefetchPrerenderControl1",
control1_probability);
const int no_use_1_group =
trial->AppendGroup("ContentPrefetchPrerenderNoUse1",
no_use1_probability);
const int experiment_2_group =
trial->AppendGroup("ContentPrefetchPrerender2",
exp2_probability);
const int experiment_25_min_TTL_group =
trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL2",
exp2_5min_ttl_probability);
const int control_2_group =
trial->AppendGroup("ContentPrefetchPrerenderControl2",
control2_probability);
const int no_use_2_group =
trial->AppendGroup("ContentPrefetchPrerenderNoUse2",
no_use2_probability);
const int trial_group = trial->group(); const int trial_group = trial->group();
if (trial_group == prerender_enabled_group) { if (trial_group == experiment_1_group ||
trial_group == experiment_2_group) {
PrerenderManager::SetMode( PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP); PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP);
} else if (trial_group == control_group) { } else if (trial_group == experiment_15_min_TTL_group ||
PrerenderManager::SetMode( trial_group == experiment_25_min_TTL_group) {
PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
} else if (trial_group == experiment_5_min_TTL_group) {
PrerenderManager::SetMode( PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
} else if (trial_group == experiment_no_use_group) { } else if (trial_group == control_1_group ||
trial_group == control_2_group) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
} else if (trial_group == no_use_1_group ||
trial_group == no_use_2_group) {
PrerenderManager::SetMode( PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP);
} else { } else {
...@@ -194,16 +192,16 @@ void ConfigurePrefetchAndPrerender(const CommandLine& command_line) { ...@@ -194,16 +192,16 @@ void ConfigurePrefetchAndPrerender(const CommandLine& command_line) {
void ConfigureOmniboxPrerender() { void ConfigureOmniboxPrerender() {
// Field trial to see if we're enabled. // Field trial to see if we're enabled.
const FieldTrial::Probability kDivisor = 100; const base::FieldTrial::Probability kDivisor = 100;
FieldTrial::Probability kDisabledProbability = 10; base::FieldTrial::Probability kDisabledProbability = 10;
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) {
kDisabledProbability = 1; kDisabledProbability = 1;
} }
scoped_refptr<FieldTrial> omnibox_prerender_trial( scoped_refptr<base::FieldTrial> omnibox_prerender_trial(
FieldTrialList::FactoryGetFieldTrial( base::FieldTrialList::FactoryGetFieldTrial(
kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled", kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled",
2012, 12, 30, &g_omnibox_trial_default_group_number)); 2012, 12, 30, &g_omnibox_trial_default_group_number));
omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled", omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled",
...@@ -233,23 +231,23 @@ bool IsOmniboxEnabled(Profile* profile) { ...@@ -233,23 +231,23 @@ bool IsOmniboxEnabled(Profile* profile) {
DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto); DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto);
} }
const int group = FieldTrialList::FindValue(kOmniboxTrialName); const int group = base::FieldTrialList::FindValue(kOmniboxTrialName);
return group == FieldTrial::kNotFinalized || return group == base::FieldTrial::kNotFinalized ||
group == g_omnibox_trial_default_group_number; group == g_omnibox_trial_default_group_number;
} }
void ConfigureSpeculativePrefetching() { void ConfigureSpeculativePrefetching() {
// Field trial to see if we're enabled. // Field trial to see if we're enabled.
const FieldTrial::Probability kDivisor = 100; const base::FieldTrial::Probability kDivisor = 100;
FieldTrial::Probability kDisabledProbability = 99; base::FieldTrial::Probability kDisabledProbability = 99;
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) {
kDisabledProbability = 100; kDisabledProbability = 100;
} }
scoped_refptr<FieldTrial> speculative_prefetching_learning_trial( scoped_refptr<base::FieldTrial> speculative_prefetching_learning_trial(
FieldTrialList::FactoryGetFieldTrial( base::FieldTrialList::FactoryGetFieldTrial(
kSpeculativePrefetchingLearningTrialName, kSpeculativePrefetchingLearningTrialName,
kDivisor, kDivisor,
"SpeculativePrefetchingLearningEnabled", "SpeculativePrefetchingLearningEnabled",
...@@ -275,7 +273,7 @@ bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) { ...@@ -275,7 +273,7 @@ bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) {
return true; return true;
} }
const int group = FieldTrialList::FindValue( const int group = base::FieldTrialList::FindValue(
kSpeculativePrefetchingLearningTrialName); kSpeculativePrefetchingLearningTrialName);
return group == g_speculative_prefetching_learning_default_group_number; return group == g_speculative_prefetching_learning_default_group_number;
} }
......
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