summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_field_trial.cc
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 22:44:59 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 22:44:59 +0000
commit1c76dc3ca13fee61d2e3e1a6e4eab104a4a43c3e (patch)
tree55b23be83caefd602d26a2a8e2026b6d70bcc65e /chrome/browser/prerender/prerender_field_trial.cc
parent4518b61f530e8c8fb41399563b64a70b70112709 (diff)
downloadchromium_src-1c76dc3ca13fee61d2e3e1a6e4eab104a4a43c3e.zip
chromium_src-1c76dc3ca13fee61d2e3e1a6e4eab104a4a43c3e.tar.gz
chromium_src-1c76dc3ca13fee61d2e3e1a6e4eab104a4a43c3e.tar.bz2
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 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148639 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_field_trial.cc')
-rw-r--r--chrome/browser/prerender/prerender_field_trial.cc150
1 files changed, 76 insertions, 74 deletions
diff --git a/chrome/browser/prerender/prerender_field_trial.cc b/chrome/browser/prerender/prerender_field_trial.cc
index a8e8991..82e3461 100644
--- a/chrome/browser/prerender/prerender_field_trial.cc
+++ b/chrome/browser/prerender/prerender_field_trial.cc
@@ -16,6 +16,9 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
+using base::FieldTrial;
+using base::FieldTrialList;
+
namespace prerender {
namespace {
@@ -34,10 +37,10 @@ void SetupPrefetchFieldTrial() {
return;
}
- const base::FieldTrial::Probability divisor = 1000;
- const base::FieldTrial::Probability prefetch_probability = 500;
- scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(
+ const FieldTrial::Probability divisor = 1000;
+ const FieldTrial::Probability prefetch_probability = 500;
+ scoped_refptr<FieldTrial> trial(
+ FieldTrialList::FactoryGetFieldTrial(
"Prefetch", divisor, "ContentPrefetchPrefetchOff",
2013, 6, 30, NULL));
const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn",
@@ -46,76 +49,75 @@ void SetupPrefetchFieldTrial() {
}
void SetupPrerenderFieldTrial() {
- 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;
+ const FieldTrial::Probability divisor = 1000;
- 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;
+ FieldTrial::Probability prerender_enabled_probability;
+ FieldTrial::Probability control_probability;
+ FieldTrial::Probability experiment_5min_ttl_probability;
+ FieldTrial::Probability experiment_no_use_probability;
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
channel == chrome::VersionInfo::CHANNEL_BETA) {
- exp1_probability = 490;
- exp1_5min_ttl_probability = 5;
- control1_probability = 5;
- no_use1_probability = 0;
- exp2_probability = 490;
- exp2_5min_ttl_probability = 5;
- control2_probability = 5;
- no_use2_probability = 0;
+ // Use very conservatives and stable settings in beta and stable.
+ const FieldTrial::Probability release_prerender_enabled_probability = 980;
+ const FieldTrial::Probability release_control_probability = 10;
+ const FieldTrial::Probability release_experiment_5min_ttl_probability = 10;
+ const FieldTrial::Probability release_experiment_no_use_probability = 0;
+ COMPILE_ASSERT(
+ release_prerender_enabled_probability + release_control_probability +
+ release_experiment_5min_ttl_probability +
+ 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 +
- control1_probability + no_use1_probability + exp2_probability +
- exp2_5min_ttl_probability + control2_probability +
- no_use2_probability);
- int experiment_1_group = -1;
- scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(
- "Prerender", divisor, "ContentPrefetchPrerender1",
- 2013, 6, 30, &experiment_1_group));
-
- const int experiment_15_min_TTL_group =
- trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL1",
- exp1_5min_ttl_probability);
- const int control_1_group =
- 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);
+
+ int prerender_enabled_group = -1;
+ scoped_refptr<FieldTrial> trial(
+ FieldTrialList::FactoryGetFieldTrial(
+ "Prerender", divisor, "PrerenderEnabled",
+ 2013, 6, 30, &prerender_enabled_group));
+ const int control_group =
+ trial->AppendGroup("PrerenderControl",
+ control_probability);
+ const int experiment_5_min_TTL_group =
+ trial->AppendGroup("Prerender5minTTL",
+ experiment_5min_ttl_probability);
+ const int experiment_no_use_group =
+ trial->AppendGroup("PrerenderNoUse",
+ experiment_no_use_probability);
+
const int trial_group = trial->group();
- if (trial_group == experiment_1_group ||
- trial_group == experiment_2_group) {
+ if (trial_group == prerender_enabled_group) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP);
- } else if (trial_group == experiment_15_min_TTL_group ||
- trial_group == experiment_25_min_TTL_group) {
- PrerenderManager::SetMode(
- PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
- } else if (trial_group == control_1_group ||
- trial_group == control_2_group) {
+ } else if (trial_group == control_group) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
- } else if (trial_group == no_use_1_group ||
- trial_group == no_use_2_group) {
+ } else if (trial_group == experiment_5_min_TTL_group) {
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
+ } else if (trial_group == experiment_no_use_group) {
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP);
} else {
@@ -192,16 +194,16 @@ void ConfigurePrefetchAndPrerender(const CommandLine& command_line) {
void ConfigureOmniboxPrerender() {
// Field trial to see if we're enabled.
- const base::FieldTrial::Probability kDivisor = 100;
+ const FieldTrial::Probability kDivisor = 100;
- base::FieldTrial::Probability kDisabledProbability = 10;
+ FieldTrial::Probability kDisabledProbability = 10;
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
channel == chrome::VersionInfo::CHANNEL_BETA) {
kDisabledProbability = 1;
}
- scoped_refptr<base::FieldTrial> omnibox_prerender_trial(
- base::FieldTrialList::FactoryGetFieldTrial(
+ scoped_refptr<FieldTrial> omnibox_prerender_trial(
+ FieldTrialList::FactoryGetFieldTrial(
kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled",
2012, 12, 30, &g_omnibox_trial_default_group_number));
omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled",
@@ -231,23 +233,23 @@ bool IsOmniboxEnabled(Profile* profile) {
DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto);
}
- const int group = base::FieldTrialList::FindValue(kOmniboxTrialName);
- return group == base::FieldTrial::kNotFinalized ||
+ const int group = FieldTrialList::FindValue(kOmniboxTrialName);
+ return group == FieldTrial::kNotFinalized ||
group == g_omnibox_trial_default_group_number;
}
void ConfigureSpeculativePrefetching() {
// Field trial to see if we're enabled.
- const base::FieldTrial::Probability kDivisor = 100;
+ const FieldTrial::Probability kDivisor = 100;
- base::FieldTrial::Probability kDisabledProbability = 99;
+ FieldTrial::Probability kDisabledProbability = 99;
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
channel == chrome::VersionInfo::CHANNEL_BETA) {
kDisabledProbability = 100;
}
- scoped_refptr<base::FieldTrial> speculative_prefetching_learning_trial(
- base::FieldTrialList::FactoryGetFieldTrial(
+ scoped_refptr<FieldTrial> speculative_prefetching_learning_trial(
+ FieldTrialList::FactoryGetFieldTrial(
kSpeculativePrefetchingLearningTrialName,
kDivisor,
"SpeculativePrefetchingLearningEnabled",
@@ -273,7 +275,7 @@ bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) {
return true;
}
- const int group = base::FieldTrialList::FindValue(
+ const int group = FieldTrialList::FindValue(
kSpeculativePrefetchingLearningTrialName);
return group == g_speculative_prefetching_learning_default_group_number;
}