summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 15:11:29 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 15:11:29 +0000
commitebcf69f02f4f02e508e77193e51dd6557e6c0085 (patch)
tree80f883eca03bd26b3a5211f9156ff2e860c909ff /chrome
parentb554d462229e4498ba6576d7cd0c2336fb468175 (diff)
downloadchromium_src-ebcf69f02f4f02e508e77193e51dd6557e6c0085.zip
chromium_src-ebcf69f02f4f02e508e77193e51dd6557e6c0085.tar.gz
chromium_src-ebcf69f02f4f02e508e77193e51dd6557e6c0085.tar.bz2
Make field trial randomization type a constructor param.
Changes the Field Trial API to require users to pass ONE_TIME_RANDOMIZED or SESSION_RANDOMIZED at the time the field trial is created. This removes a source of human errors, where developers would sometimes previously forget to call UseOneTimeRandomization() in their CLs. It's a small startup performance win, since one time randomized trials will no longer call RandDouble() that will be then replaced by a value from the entropy provider. (This was showing up in profiles when I was measuring metrics startup perf on mobile.) BUG=262971 TEST=Existing unit tests. TBR=isherman@chromium.org, thakis@chromium.org Review URL: https://codereview.chromium.org/20777005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214352 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chrome_browser_field_trials_desktop.cc21
-rw-r--r--chrome/browser/chrome_browser_field_trials_mobile.cc8
-rw-r--r--chrome/browser/chromeos/external_metrics.cc16
-rw-r--r--chrome/browser/chromeos/login/default_pinned_apps_field_trial.cc4
-rw-r--r--chrome/browser/gpu/chrome_gpu_util.cc9
-rw-r--r--chrome/browser/metrics/gzipped_protobufs_field_trial.cc2
-rw-r--r--chrome/browser/metrics/thread_watcher.cc2
-rw-r--r--chrome/browser/metrics/variations/variations_seed_processor.cc23
-rw-r--r--chrome/browser/net/http_pipelining_compatibility_client.cc3
-rw-r--r--chrome/browser/net/network_stats.cc10
-rw-r--r--chrome/browser/omnibox/omnibox_field_trial.cc9
-rw-r--r--chrome/browser/password_manager/password_manager.cc8
-rw-r--r--chrome/browser/prerender/prerender_field_trial.cc11
-rw-r--r--chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc5
-rw-r--r--chrome/common/metrics/entropy_provider_unittest.cc44
-rw-r--r--chrome/common/metrics/variations/uniformity_field_trials.cc48
-rw-r--r--chrome/common/metrics/variations/variations_util_unittest.cc55
17 files changed, 135 insertions, 143 deletions
diff --git a/chrome/browser/chrome_browser_field_trials_desktop.cc b/chrome/browser/chrome_browser_field_trials_desktop.cc
index 339ee6b..92b6645 100644
--- a/chrome/browser/chrome_browser_field_trials_desktop.cc
+++ b/chrome/browser/chrome_browser_field_trials_desktop.cc
@@ -62,9 +62,9 @@ void SetupInfiniteCacheFieldTrial() {
base::FieldTrial::Probability infinite_cache_probability = 0;
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial("InfiniteCache", kDivisor,
- "No", 2013, 12, 31, NULL));
- trial->UseOneTimeRandomization();
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "InfiniteCache", kDivisor, "No", 2013, 12, 31,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
trial->AppendGroup("Yes", infinite_cache_probability);
trial->AppendGroup("Control", infinite_cache_probability);
}
@@ -106,9 +106,9 @@ void SetupCacheSensitivityAnalysisFieldTrial() {
#endif
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial("CacheSensitivityAnalysis",
- kDivisor, "No",
- 2013, 06, 15, NULL));
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "CacheSensitivityAnalysis", kDivisor, "No", 2013, 06, 15,
+ base::FieldTrial::SESSION_RANDOMIZED, NULL));
trial->AppendGroup("ControlA", sensitivity_analysis_probability);
trial->AppendGroup("ControlB", sensitivity_analysis_probability);
trial->AppendGroup("100A", sensitivity_analysis_probability);
@@ -130,8 +130,9 @@ void WindowsOverlappedTCPReadsFieldTrial(
const base::FieldTrial::Probability kDivisor = 2; // 1 in 2 chance
const base::FieldTrial::Probability kOverlappedReadProbability = 1;
scoped_refptr<base::FieldTrial> overlapped_reads_trial(
- base::FieldTrialList::FactoryGetFieldTrial("OverlappedReadImpact",
- kDivisor, "OverlappedReadEnabled", 2013, 6, 1, NULL));
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "OverlappedReadImpact", kDivisor, "OverlappedReadEnabled",
+ 2013, 6, 1, base::FieldTrial::SESSION_RANDOMIZED, NULL));
int overlapped_reads_disabled_group =
overlapped_reads_trial->AppendGroup("OverlappedReadDisabled",
kOverlappedReadProbability);
@@ -145,8 +146,8 @@ void WindowsOverlappedTCPReadsFieldTrial(
void SetupLowLatencyFlashAudioFieldTrial() {
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
- content::kLowLatencyFlashAudioFieldTrialName,
- 100, "Standard", 2013, 9, 1, NULL));
+ content::kLowLatencyFlashAudioFieldTrialName, 100, "Standard",
+ 2013, 9, 1, base::FieldTrial::SESSION_RANDOMIZED, NULL));
// Trial is enabled for dev / beta / canary users only.
if (chrome::VersionInfo::GetChannel() != chrome::VersionInfo::CHANNEL_STABLE)
diff --git a/chrome/browser/chrome_browser_field_trials_mobile.cc b/chrome/browser/chrome_browser_field_trials_mobile.cc
index 5e17ca7..8d9140c 100644
--- a/chrome/browser/chrome_browser_field_trials_mobile.cc
+++ b/chrome/browser/chrome_browser_field_trials_mobile.cc
@@ -37,10 +37,8 @@ void DataCompressionProxyFieldTrial() {
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
kDataCompressionProxyFieldTrialName, kDataCompressionProxyDivisor,
- kDisabled, 2015, 1, 1, NULL));
+ kDisabled, 2015, 1, 1, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
- // We want our trial results to be persistent.
- trial->UseOneTimeRandomization();
// Non-stable channels will run with probability 1.
const int kEnabledGroup = trial->AppendGroup(
kEnabled,
@@ -77,10 +75,8 @@ void NewTabButtonInToolbarFieldTrial(const CommandLine& parsed_command_line) {
base::FieldTrialList::FactoryGetFieldTrial(
kPhoneNewTabToolbarButtonFieldTrialName,
kPhoneNewTabToolbarButtonDivisor,
- kDisabled, 2015, 1, 1, NULL));
+ kDisabled, 2015, 1, 1, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
- // We want our trial results to be persistent.
- trial->UseOneTimeRandomization();
const int kEnabledGroup = trial->AppendGroup(
kEnabled,
kIsStableChannel ?
diff --git a/chrome/browser/chromeos/external_metrics.cc b/chrome/browser/chromeos/external_metrics.cc
index cabac24..5c6b329 100644
--- a/chrome/browser/chromeos/external_metrics.cc
+++ b/chrome/browser/chromeos/external_metrics.cc
@@ -63,10 +63,10 @@ void SetupProgressiveScanFieldTrial() {
const char path_to_group_file[] = "/home/chronos/.progressive_scan_variation";
const base::FieldTrial::Probability kDivisor = 1000;
scoped_refptr<base::FieldTrial> trial =
- base::FieldTrialList::FactoryGetFieldTrial(name_of_experiment,
- kDivisor,
- "Default",
- 2013, 12, 31, NULL);
+ base::FieldTrialList::FactoryGetFieldTrial(
+ name_of_experiment, kDivisor, "Default", 2013, 12, 31,
+ base::FieldTrial::SESSION_RANDOMIZED, NULL);
+
// Announce the groups with 0 percentage; the actual percentages come from
// the server configuration.
std::map<int, std::string> group_to_char;
@@ -113,10 +113,10 @@ void SetupSwapJankFieldTrial() {
// All groups are either on or off.
const base::FieldTrial::Probability kTotalProbability = 1;
scoped_refptr<base::FieldTrial> trial =
- base::FieldTrialList::FactoryGetFieldTrial(name_of_experiment,
- kTotalProbability,
- "default",
- 2013, 12, 31, NULL);
+ base::FieldTrialList::FactoryGetFieldTrial(
+ name_of_experiment, kTotalProbability, "default", 2013, 12, 31,
+ base::FieldTrial::SESSION_RANDOMIZED, NULL);
+
// Assign probability of 1 to this Chrome's group. Assign 0 to all other
// choices.
trial->AppendGroup("kernel_64_chrome_64",
diff --git a/chrome/browser/chromeos/login/default_pinned_apps_field_trial.cc b/chrome/browser/chromeos/login/default_pinned_apps_field_trial.cc
index c75234a..f6de0e0 100644
--- a/chrome/browser/chromeos/login/default_pinned_apps_field_trial.cc
+++ b/chrome/browser/chromeos/login/default_pinned_apps_field_trial.cc
@@ -134,8 +134,8 @@ void SetupTrial() {
const base::FieldTrial::Probability kDivisor = 100;
scoped_refptr<base::FieldTrial> trial =
base::FieldTrialList::FactoryGetFieldTrial(
- kExperimentName, kDivisor, "Existing", 2013, 12, 31, NULL);
- trial->UseOneTimeRandomization();
+ kExperimentName, kDivisor, "Existing", 2013, 12, 31,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL);
// Split 50/50 between "Control" and "Alternamte" group for new user.
// Existing users already have their default pinned apps and have the trial
diff --git a/chrome/browser/gpu/chrome_gpu_util.cc b/chrome/browser/gpu/chrome_gpu_util.cc
index 441cebc..61da773 100644
--- a/chrome/browser/gpu/chrome_gpu_util.cc
+++ b/chrome/browser/gpu/chrome_gpu_util.cc
@@ -99,11 +99,8 @@ void InitializeCompositingFieldTrial() {
const base::FieldTrial::Probability kDivisor = 3;
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
- content::kGpuCompositingFieldTrialName, kDivisor,
- "disable", 2013, 12, 31, NULL));
-
- // Produce the same result on every run of this client.
- trial->UseOneTimeRandomization();
+ content::kGpuCompositingFieldTrialName, kDivisor, "disable",
+ 2013, 12, 31, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
base::FieldTrial::Probability force_compositing_mode_probability = 0;
base::FieldTrial::Probability threaded_compositing_probability = 0;
@@ -131,5 +128,5 @@ void InitializeCompositingFieldTrial() {
UMA_HISTOGRAM_BOOLEAN("GPU.InCompositorThreadFieldTrial", thread);
}
-} // namespace gpu_util;
+} // namespace gpu_util
diff --git a/chrome/browser/metrics/gzipped_protobufs_field_trial.cc b/chrome/browser/metrics/gzipped_protobufs_field_trial.cc
index cd105be..81c34f7 100644
--- a/chrome/browser/metrics/gzipped_protobufs_field_trial.cc
+++ b/chrome/browser/metrics/gzipped_protobufs_field_trial.cc
@@ -39,8 +39,8 @@ void CreateGzippedProtobufsFieldTrial() {
2013,
10,
1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED,
NULL);
- gzipped_protobufs_trial->UseOneTimeRandomization();
int gzipped_protobufs_group = gzipped_protobufs_trial->AppendGroup(
kGroupName,
kTrialQuotient);
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc
index c8ee4cf..4a14015 100644
--- a/chrome/browser/metrics/thread_watcher.cc
+++ b/chrome/browser/metrics/thread_watcher.cc
@@ -569,7 +569,7 @@ void ThreadWatcherList::ParseCommandLine(
scoped_refptr<base::FieldTrial> field_trial(
base::FieldTrialList::FactoryGetFieldTrial(
"ThreadWatcher", 100, "default_hung_threads",
- 2013, 10, 30, NULL));
+ 2013, 10, 30, base::FieldTrial::SESSION_RANDOMIZED, NULL));
int hung_thread_group = field_trial->AppendGroup("hung_thread", 100);
if (field_trial->group() == hung_thread_group) {
for (CrashOnHangThreadMap::iterator it = crash_on_hang_threads->begin();
diff --git a/chrome/browser/metrics/variations/variations_seed_processor.cc b/chrome/browser/metrics/variations/variations_seed_processor.cc
index 58161f2..ef98d85 100644
--- a/chrome/browser/metrics/variations/variations_seed_processor.cc
+++ b/chrome/browser/metrics/variations/variations_seed_processor.cc
@@ -181,21 +181,24 @@ void VariationsSeedProcessor::CreateTrialFromStudy(
}
}
+ uint32 randomization_seed = 0;
+ base::FieldTrial::RandomizationType randomization_type =
+ base::FieldTrial::SESSION_RANDOMIZED;
+ if (study.has_consistency() &&
+ study.consistency() == Study_Consistency_PERMANENT) {
+ randomization_type = base::FieldTrial::ONE_TIME_RANDOMIZED;
+ if (study.has_randomization_seed())
+ randomization_seed = study.randomization_seed();
+ }
+
// The trial is created without specifying an expiration date because the
// expiration check in field_trial.cc is based on the build date. Instead,
// the expiration check using |reference_date| is done explicitly below.
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(
+ base::FieldTrialList::FactoryGetFieldTrialWithRandomizationSeed(
study.name(), total_probability, study.default_experiment_name(),
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL));
-
- if (study.has_consistency() &&
- study.consistency() == Study_Consistency_PERMANENT) {
- if (study.has_randomization_seed())
- trial->UseOneTimeRandomizationWithCustomSeed(study.randomization_seed());
- else
- trial->UseOneTimeRandomization();
- }
+ base::FieldTrialList::kNoExpirationYear, 1, 1, randomization_type,
+ randomization_seed, NULL));
for (int i = 0; i < study.experiment_size(); ++i) {
const Study_Experiment& experiment = study.experiment(i);
diff --git a/chrome/browser/net/http_pipelining_compatibility_client.cc b/chrome/browser/net/http_pipelining_compatibility_client.cc
index 042a5a2..e90fb03 100644
--- a/chrome/browser/net/http_pipelining_compatibility_client.cc
+++ b/chrome/browser/net/http_pipelining_compatibility_client.cc
@@ -465,7 +465,8 @@ void CollectPipeliningCapabilityStatsOnIOThread(
}
// After May 4, 2012, the trial will disable itself.
trial = base::FieldTrialList::FactoryGetFieldTrial(
- kTrialName, kDivisor, "disable_test", 2012, 5, 4, NULL);
+ kTrialName, kDivisor, "disable_test", 2012, 5, 4,
+ base::FieldTrial::SESSION_RANDOMIZED, NULL);
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_CANARY) {
diff --git a/chrome/browser/net/network_stats.cc b/chrome/browser/net/network_stats.cc
index f9a4f2e..8a9fe1f 100644
--- a/chrome/browser/net/network_stats.cc
+++ b/chrome/browser/net/network_stats.cc
@@ -806,13 +806,9 @@ void CollectNetworkStats(const std::string& network_stats_server,
// After July 31, 2014 builds, it will always be in default group
// (disable_network_stats).
- trial = base::FieldTrialList::FactoryGetFieldTrial("NetworkConnectivity",
- kDivisor,
- "disable_network_stats",
- 2014,
- 7,
- 31,
- NULL);
+ trial = base::FieldTrialList::FactoryGetFieldTrial(
+ "NetworkConnectivity", kDivisor, "disable_network_stats",
+ 2014, 7, 31, base::FieldTrial::SESSION_RANDOMIZED, NULL);
// Add option to collect_stats for NetworkConnectivity.
int collect_stats_group =
diff --git a/chrome/browser/omnibox/omnibox_field_trial.cc b/chrome/browser/omnibox/omnibox_field_trial.cc
index 0fbf10d..09c2d1a 100644
--- a/chrome/browser/omnibox/omnibox_field_trial.cc
+++ b/chrome/browser/omnibox/omnibox_field_trial.cc
@@ -87,9 +87,8 @@ void OmniboxFieldTrial::ActivateStaticTrials() {
// Make it expire on March 1, 2013.
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
- kHUPCullRedirectsFieldTrialName, kHUPCullRedirectsFieldTrialDivisor,
- "Standard", 2013, 3, 1, NULL));
- trial->UseOneTimeRandomization();
+ kHUPCullRedirectsFieldTrialName, kHUPCullRedirectsFieldTrialDivisor,
+ "Standard", 2013, 3, 1, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
hup_dont_cull_redirects_experiment_group =
trial->AppendGroup("DontCullRedirects",
kHUPCullRedirectsFieldTrialExperimentFraction);
@@ -98,8 +97,8 @@ void OmniboxFieldTrial::ActivateStaticTrials() {
// Make it expire on March 1, 2013.
trial = base::FieldTrialList::FactoryGetFieldTrial(
kHUPCreateShorterMatchFieldTrialName,
- kHUPCreateShorterMatchFieldTrialDivisor, "Standard", 2013, 3, 1, NULL);
- trial->UseOneTimeRandomization();
+ kHUPCreateShorterMatchFieldTrialDivisor, "Standard", 2013, 3, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL);
hup_dont_create_shorter_match_experiment_group =
trial->AppendGroup("DontCreateShorterMatch",
kHUPCreateShorterMatchFieldTrialExperimentFraction);
diff --git a/chrome/browser/password_manager/password_manager.cc b/chrome/browser/password_manager/password_manager.cc
index e1390aa..dbeec6b 100644
--- a/chrome/browser/password_manager/password_manager.cc
+++ b/chrome/browser/password_manager/password_manager.cc
@@ -311,8 +311,8 @@ void PasswordManager::OnPasswordFormsRendered(
if (provisional_save_manager_->HasGeneratedPassword())
UMA_HISTOGRAM_COUNTS("PasswordGeneration.Submitted", 1);
- if(!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableSavePasswordBubble)){
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableSavePasswordBubble)) {
if (ShouldShowSavePasswordInfoBar()) {
delegate_->AddSavePasswordInfoBarIfPermitted(
provisional_save_manager_.release());
@@ -344,8 +344,8 @@ void PasswordManager::PossiblyInitializeUsernamesExperiment(
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
kOtherPossibleUsernamesExperiment,
- kDivisor, "Disabled", 2013, 12, 31, NULL));
- trial->UseOneTimeRandomization();
+ kDivisor, "Disabled", 2013, 12, 31,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
base::FieldTrial::Probability enabled_probability = 0;
switch (chrome::VersionInfo::GetChannel()) {
diff --git a/chrome/browser/prerender/prerender_field_trial.cc b/chrome/browser/prerender/prerender_field_trial.cc
index ca12522..4d04ff6 100644
--- a/chrome/browser/prerender/prerender_field_trial.cc
+++ b/chrome/browser/prerender/prerender_field_trial.cc
@@ -56,7 +56,7 @@ void SetupPrefetchFieldTrial() {
scoped_refptr<FieldTrial> trial(
FieldTrialList::FactoryGetFieldTrial(
"Prefetch", divisor, "ContentPrefetchPrefetchOff",
- 2013, 12, 31, NULL));
+ 2013, 12, 31, FieldTrial::SESSION_RANDOMIZED, NULL));
const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn",
prefetch_probability);
PrerenderManager::SetIsPrefetchEnabled(trial->group() == kPrefetchOnGroup);
@@ -118,7 +118,8 @@ void SetupPrerenderFieldTrial() {
scoped_refptr<FieldTrial> trial(
FieldTrialList::FactoryGetFieldTrial(
"Prerender", divisor, "PrerenderEnabled",
- 2013, 12, 31, &prerender_enabled_group));
+ 2013, 12, 31, FieldTrial::SESSION_RANDOMIZED,
+ &prerender_enabled_group));
const int control_group =
trial->AppendGroup("PrerenderControl",
control_probability);
@@ -229,7 +230,8 @@ void ConfigureOmniboxPrerender() {
scoped_refptr<FieldTrial> omnibox_prerender_trial(
FieldTrialList::FactoryGetFieldTrial(
kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled",
- 2013, 12, 31, &g_omnibox_trial_default_group_number));
+ 2013, 12, 31, FieldTrial::SESSION_RANDOMIZED,
+ &g_omnibox_trial_default_group_number));
omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled",
kDisabledProbability);
}
@@ -242,7 +244,8 @@ void ConfigureLocalPredictor() {
}
scoped_refptr<FieldTrial> local_predictor_trial(
FieldTrialList::FactoryGetFieldTrial(
- kLocalPredictorTrialName, 100, kDisabledGroup, 2013, 12, 31, NULL));
+ kLocalPredictorTrialName, 100, kDisabledGroup, 2013, 12, 31,
+ FieldTrial::SESSION_RANDOMIZED, NULL));
local_predictor_trial->AppendGroup(kEnabledGroup, 100);
}
diff --git a/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc b/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
index 9986383..6013a1b 100644
--- a/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
@@ -229,8 +229,9 @@ bool BookmarkPromptController::IsEnabled() {
kBookmarkPromptTrialName, 100, kBookmarkPromptDefaultGroup,
date_range->expiration_date.year,
date_range->expiration_date.month,
- date_range->expiration_date.day_of_month, NULL));
- trial->UseOneTimeRandomization();
+ date_range->expiration_date.day_of_month,
+ base::FieldTrial::ONE_TIME_RANDOMIZED,
+ NULL));
trial->AppendGroup(kBookmarkPromptControlGroup, 10);
trial->AppendGroup(kBookmarkPromptExperimentGroup, 10);
diff --git a/chrome/common/metrics/entropy_provider_unittest.cc b/chrome/common/metrics/entropy_provider_unittest.cc
index e64a8eb..5c54128 100644
--- a/chrome/common/metrics/entropy_provider_unittest.cc
+++ b/chrome/common/metrics/entropy_provider_unittest.cc
@@ -193,15 +193,17 @@ TEST_F(EntropyProviderTest, UseOneTimeRandomizationSHA1) {
// _might_ actually give the same result, but we know that given
// the particular client_id we use for unit tests they won't.
base::FieldTrialList field_trial_list(new SHA1EntropyProvider("client_id"));
+ const int kNoExpirationYear = base::FieldTrialList::kNoExpirationYear;
scoped_refptr<base::FieldTrial> trials[] = {
- base::FieldTrialList::FactoryGetFieldTrial("one", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL),
- base::FieldTrialList::FactoryGetFieldTrial("two", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL) };
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "one", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL),
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "two", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL),
+ };
for (size_t i = 0; i < arraysize(trials); ++i) {
- trials[i]->UseOneTimeRandomization();
-
for (int j = 0; j < 100; ++j)
trials[i]->AppendGroup(std::string(), 1);
}
@@ -221,15 +223,17 @@ TEST_F(EntropyProviderTest, UseOneTimeRandomizationPermuted) {
// the particular client_id we use for unit tests they won't.
base::FieldTrialList field_trial_list(
new PermutedEntropyProvider(1234, kMaxLowEntropySize));
+ const int kNoExpirationYear = base::FieldTrialList::kNoExpirationYear;
scoped_refptr<base::FieldTrial> trials[] = {
- base::FieldTrialList::FactoryGetFieldTrial("one", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL),
- base::FieldTrialList::FactoryGetFieldTrial("two", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL) };
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "one", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL),
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "two", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, NULL),
+ };
for (size_t i = 0; i < arraysize(trials); ++i) {
- trials[i]->UseOneTimeRandomization();
-
for (int j = 0; j < 100; ++j)
trials[i]->AppendGroup(std::string(), 1);
}
@@ -245,16 +249,18 @@ TEST_F(EntropyProviderTest, UseOneTimeRandomizationWithCustomSeedPermuted) {
// for one time randomization produce the same group assignments.
base::FieldTrialList field_trial_list(
new PermutedEntropyProvider(1234, kMaxLowEntropySize));
- scoped_refptr<base::FieldTrial> trials[] = {
- base::FieldTrialList::FactoryGetFieldTrial("one", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL),
- base::FieldTrialList::FactoryGetFieldTrial("two", 100, "default",
- base::FieldTrialList::kNoExpirationYear, 1, 1, NULL) };
+ const int kNoExpirationYear = base::FieldTrialList::kNoExpirationYear;
const uint32 kCustomSeed = 9001;
+ scoped_refptr<base::FieldTrial> trials[] = {
+ base::FieldTrialList::FactoryGetFieldTrialWithRandomizationSeed(
+ "one", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, kCustomSeed, NULL),
+ base::FieldTrialList::FactoryGetFieldTrialWithRandomizationSeed(
+ "two", 100, "default", kNoExpirationYear, 1, 1,
+ base::FieldTrial::ONE_TIME_RANDOMIZED, kCustomSeed, NULL),
+ };
for (size_t i = 0; i < arraysize(trials); ++i) {
- trials[i]->UseOneTimeRandomizationWithCustomSeed(kCustomSeed);
-
for (int j = 0; j < 100; ++j)
trials[i]->AppendGroup(std::string(), 1);
}
diff --git a/chrome/common/metrics/variations/uniformity_field_trials.cc b/chrome/common/metrics/variations/uniformity_field_trials.cc
index 0ae53a5..a51da1e 100644
--- a/chrome/common/metrics/variations/uniformity_field_trials.cc
+++ b/chrome/common/metrics/variations/uniformity_field_trials.cc
@@ -9,6 +9,8 @@
#include "base/time/time.h"
#include "chrome/common/metrics/variations/variations_util.h"
+namespace chrome_variations {
+
namespace {
// Set up a uniformity field trial. |one_time_randomized| indicates if the
@@ -16,9 +18,9 @@ namespace {
// must contain a "%d" since the percentage of the group will be inserted in
// the trial name. |num_trial_groups| must be a divisor of 100 (e.g. 5, 20)
void SetupSingleUniformityFieldTrial(
- bool one_time_randomized,
+ base::FieldTrial::RandomizationType randomization_type,
const std::string& trial_name_string,
- const chrome_variations::VariationID trial_base_id,
+ const VariationID trial_base_id,
int num_trial_groups) {
// Probability per group remains constant for all uniformity trials, what
// changes is the probability divisor.
@@ -35,12 +37,10 @@ void SetupSingleUniformityFieldTrial(
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
- trial_name, divisor, kDefaultGroupName, 2015, 1, 1, NULL));
- if (one_time_randomized)
- trial->UseOneTimeRandomization();
- chrome_variations::AssociateGoogleVariationID(
- chrome_variations::GOOGLE_UPDATE_SERVICE, trial_name, kDefaultGroupName,
- trial_base_id);
+ trial_name, divisor, kDefaultGroupName, 2015, 1, 1,
+ randomization_type, NULL));
+ AssociateGoogleVariationID(GOOGLE_UPDATE_SERVICE, trial_name,
+ kDefaultGroupName, trial_base_id);
// Loop starts with group 1 because the field trial automatically creates a
// default group, which would be group 0.
@@ -49,10 +49,9 @@ void SetupSingleUniformityFieldTrial(
base::StringPrintf("group_%02d", group_number);
DVLOG(1) << " Group name = " << group_name;
trial->AppendGroup(group_name, kProbabilityPerGroup);
- chrome_variations::AssociateGoogleVariationID(
- chrome_variations::GOOGLE_UPDATE_SERVICE, trial_name, group_name,
- static_cast<chrome_variations::VariationID>(trial_base_id +
- group_number));
+ AssociateGoogleVariationID(
+ GOOGLE_UPDATE_SERVICE, trial_name, group_name,
+ static_cast<VariationID>(trial_base_id + group_number));
}
// Now that all groups have been appended, call group() on the trial to
@@ -72,8 +71,7 @@ void SetupNewInstallUniformityTrial(const base::Time install_date) {
scoped_refptr<base::FieldTrial> trial(
base::FieldTrialList::FactoryGetFieldTrial(
"UMA-New-Install-Uniformity-Trial", 100, "Disabled",
- 2015, 1, 1, NULL));
- trial->UseOneTimeRandomization();
+ 2015, 1, 1, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
trial->AppendGroup("Control", 50);
trial->AppendGroup("Experiment", 50);
const base::Time start_date = base::Time::FromLocalExploded(kStartDate);
@@ -85,8 +83,6 @@ void SetupNewInstallUniformityTrial(const base::Time install_date) {
} // namespace
-namespace chrome_variations {
-
void SetupUniformityFieldTrials(const base::Time install_date) {
// One field trial will be created for each entry in this array. The i'th
// field trial will have |trial_sizes[i]| groups in it, including the default
@@ -96,26 +92,28 @@ void SetupUniformityFieldTrials(const base::Time install_date) {
// Declare our variation ID bases along side this array so we can loop over it
// and assign the IDs appropriately. So for example, the 1 percent experiments
// should have a size of 100 (100/100 = 1).
- const chrome_variations::VariationID trial_base_ids[] = {
- chrome_variations::UNIFORMITY_1_PERCENT_BASE,
- chrome_variations::UNIFORMITY_5_PERCENT_BASE,
- chrome_variations::UNIFORMITY_10_PERCENT_BASE,
- chrome_variations::UNIFORMITY_20_PERCENT_BASE,
- chrome_variations::UNIFORMITY_50_PERCENT_BASE
+ const VariationID trial_base_ids[] = {
+ UNIFORMITY_1_PERCENT_BASE,
+ UNIFORMITY_5_PERCENT_BASE,
+ UNIFORMITY_10_PERCENT_BASE,
+ UNIFORMITY_20_PERCENT_BASE,
+ UNIFORMITY_50_PERCENT_BASE
};
const std::string kOneTimeRandomizedTrialName =
"UMA-Uniformity-Trial-%d-Percent";
for (size_t i = 0; i < arraysize(num_trial_groups); ++i) {
- SetupSingleUniformityFieldTrial(true, kOneTimeRandomizedTrialName,
+ SetupSingleUniformityFieldTrial(base::FieldTrial::ONE_TIME_RANDOMIZED,
+ kOneTimeRandomizedTrialName,
trial_base_ids[i], num_trial_groups[i]);
}
// Setup a 5% session-randomized uniformity trial.
const std::string kSessionRandomizedTrialName =
"UMA-Session-Randomized-Uniformity-Trial-%d-Percent";
- SetupSingleUniformityFieldTrial(false, kSessionRandomizedTrialName,
- chrome_variations::UNIFORMITY_SESSION_RANDOMIZED_5_PERCENT_BASE, 20);
+ SetupSingleUniformityFieldTrial(
+ base::FieldTrial::SESSION_RANDOMIZED, kSessionRandomizedTrialName,
+ UNIFORMITY_SESSION_RANDOMIZED_5_PERCENT_BASE, 20);
SetupNewInstallUniformityTrial(install_date);
}
diff --git a/chrome/common/metrics/variations/variations_util_unittest.cc b/chrome/common/metrics/variations/variations_util_unittest.cc
index 6ad78db..173133a 100644
--- a/chrome/common/metrics/variations/variations_util_unittest.cc
+++ b/chrome/common/metrics/variations/variations_util_unittest.cc
@@ -39,6 +39,18 @@ bool IsFieldTrialActive(const std::string& trial_name) {
return false;
}
+// Call FieldTrialList::FactoryGetFieldTrial() with a future expiry date.
+scoped_refptr<base::FieldTrial> CreateFieldTrial(
+ const std::string& trial_name,
+ int total_probability,
+ const std::string& default_group_name,
+ int* default_group_number) {
+ return base::FieldTrialList::FactoryGetFieldTrial(
+ trial_name, total_probability, default_group_name,
+ base::FieldTrialList::kNoExpirationYear, 1, 1,
+ base::FieldTrial::SESSION_RANDOMIZED, default_group_number);
+}
+
} // namespace
class VariationsUtilTest : public ::testing::Test {
@@ -49,22 +61,11 @@ class VariationsUtilTest : public ::testing::Test {
ui_thread_.reset(new content::TestBrowserThread(
content::BrowserThread::UI, &message_loop_));
- base::Time now = base::Time::NowFromSystemTime();
- base::TimeDelta one_year = base::TimeDelta::FromDays(365);
- base::Time::Exploded exploded;
-
- base::Time next_year_time = now + one_year;
- next_year_time.LocalExplode(&exploded);
- next_year_ = exploded.year;
-
// Ensure that the maps are cleared between tests, since they are stored as
// process singletons.
testing::ClearAllVariationIDs();
}
- protected:
- int next_year_;
-
private:
base::FieldTrialList field_trial_list_;
base::MessageLoop message_loop_;
@@ -115,10 +116,7 @@ TEST_F(VariationsUtilTest, GetFieldTrialActiveGroups) {
TEST_F(VariationsUtilTest, DisableImmediately) {
int default_group_number = -1;
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial("trial", 100, "default",
- next_year_, 12, 12,
- &default_group_number));
- trial->Disable();
+ CreateFieldTrial("trial", 100, "default", &default_group_number));
ASSERT_EQ(default_group_number, trial->group());
ASSERT_EQ(EMPTY_ID, GetIDForTrial(GOOGLE_WEB_PROPERTIES, trial.get()));
@@ -132,8 +130,8 @@ TEST_F(VariationsUtilTest, DisableAfterInitialization) {
const std::string non_default_name = "non_default";
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial("trial", 100, default_name,
- next_year_, 12, 12, NULL));
+ CreateFieldTrial("trial", 100, default_name, NULL));
+
trial->AppendGroup(non_default_name, 100);
AssociateGoogleVariationID(GOOGLE_WEB_PROPERTIES, trial->trial_name(),
default_name, TEST_VALUE_A);
@@ -148,8 +146,7 @@ TEST_F(VariationsUtilTest, DisableAfterInitialization) {
TEST_F(VariationsUtilTest, AssociateGoogleVariationID) {
const std::string default_name1 = "default";
scoped_refptr<base::FieldTrial> trial_true(
- base::FieldTrialList::FactoryGetFieldTrial("d1", 10, default_name1,
- next_year_, 12, 31, NULL));
+ CreateFieldTrial("d1", 10, default_name1, NULL));
const std::string winner = "TheWinner";
int winner_group = trial_true->AppendGroup(winner, 10);
@@ -166,8 +163,7 @@ TEST_F(VariationsUtilTest, AssociateGoogleVariationID) {
const std::string default_name2 = "default2";
scoped_refptr<base::FieldTrial> trial_false(
- base::FieldTrialList::FactoryGetFieldTrial("d2", 10, default_name2,
- next_year_, 12, 31, NULL));
+ CreateFieldTrial("d2", 10, default_name2, NULL));
const std::string loser = "ALoser";
const int loser_group = trial_false->AppendGroup(loser, 0);
@@ -186,8 +182,8 @@ TEST_F(VariationsUtilTest, AssociateGoogleVariationID) {
TEST_F(VariationsUtilTest, NoAssociation) {
const std::string default_name = "default";
scoped_refptr<base::FieldTrial> no_id_trial(
- base::FieldTrialList::FactoryGetFieldTrial("d3", 10, default_name,
- next_year_, 12, 31, NULL));
+ CreateFieldTrial("d3", 10, default_name, NULL));
+
const std::string winner = "TheWinner";
const int winner_group = no_id_trial->AppendGroup(winner, 10);
@@ -274,8 +270,7 @@ TEST_F(VariationsUtilTest, AssociateVariationParams_DoesntActivateTrial) {
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(kTrialName, 100, "A",
- next_year_, 1, 1, NULL));
+ CreateFieldTrial(kTrialName, 100, "A", NULL));
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
std::map<std::string, std::string> params;
@@ -309,8 +304,7 @@ TEST_F(VariationsUtilTest, GetVariationParams_ActivatesTrial) {
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(kTrialName, 100, "A",
- next_year_, 1, 1, NULL));
+ CreateFieldTrial(kTrialName, 100, "A", NULL));
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
std::map<std::string, std::string> params;
@@ -323,8 +317,7 @@ TEST_F(VariationsUtilTest, GetVariationParamValue_ActivatesTrial) {
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
scoped_refptr<base::FieldTrial> trial(
- base::FieldTrialList::FactoryGetFieldTrial(kTrialName, 100, "A",
- next_year_, 1, 1, NULL));
+ CreateFieldTrial(kTrialName, 100, "A", NULL));
ASSERT_FALSE(IsFieldTrialActive(kTrialName));
std::map<std::string, std::string> params;
@@ -391,9 +384,7 @@ TEST_F(VariationsUtilTest, CollectionsCoexist) {
const std::string default_name = "default";
int default_group_number = -1;
scoped_refptr<base::FieldTrial> trial_true(
- base::FieldTrialList::FactoryGetFieldTrial("d1", 10, default_name,
- next_year_, 12, 31,
- &default_group_number));
+ CreateFieldTrial("d1", 10, default_name, &default_group_number));
ASSERT_EQ(default_group_number, trial_true->group());
ASSERT_EQ(default_name, trial_true->group_name());