OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/metrics/variations/uniformity_field_trials.h" | 5 #include "chrome/common/metrics/variations/uniformity_field_trials.h" |
6 | 6 |
7 #include "base/metrics/field_trial.h" | 7 #include "base/metrics/field_trial.h" |
tfarina
2013/03/05 16:46:24
do you want to include base/time.h? now here?
SteveT
2013/03/05 17:54:24
Done.
| |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "chrome/common/metrics/variations/variations_util.h" | 9 #include "chrome/common/metrics/variations/variations_util.h" |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 // Set up a uniformity field trial. |one_time_randomized| indicates if the | 13 // Set up a uniformity field trial. |one_time_randomized| indicates if the |
14 // field trial is one-time randomized or session-randomized. |trial_name_string| | 14 // field trial is one-time randomized or session-randomized. |trial_name_string| |
15 // must contain a "%d" since the percentage of the group will be inserted in | 15 // must contain a "%d" since the percentage of the group will be inserted in |
16 // the trial name. |num_trial_groups| must be a divisor of 100 (e.g. 5, 20) | 16 // the trial name. |num_trial_groups| must be a divisor of 100 (e.g. 5, 20) |
17 void SetupSingleUniformityFieldTrial( | 17 void SetupSingleUniformityFieldTrial( |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
62 | 62 |
63 // Now that all groups have been appended, call group() on the trial to | 63 // Now that all groups have been appended, call group() on the trial to |
64 // ensure that our trial is registered. This resolves an off-by-one issue | 64 // ensure that our trial is registered. This resolves an off-by-one issue |
65 // where the default group never gets chosen if we don't "use" the trial. | 65 // where the default group never gets chosen if we don't "use" the trial. |
66 const int chosen_group = trial->group(); | 66 const int chosen_group = trial->group(); |
67 DVLOG(1) << "Chosen Group: " << chosen_group; | 67 DVLOG(1) << "Chosen Group: " << chosen_group; |
68 } | 68 } |
69 | 69 |
70 // Setup a 50% uniformity trial for new installs only. This is accomplished by | 70 // Setup a 50% uniformity trial for new installs only. This is accomplished by |
71 // disabling the trial on clients that were installed before a specified date. | 71 // disabling the trial on clients that were installed before a specified date. |
72 void SetupNewInstallUniformityTrial(const base::Time& install_date) { | 72 void SetupNewInstallUniformityTrial(const base::Time& install_date) { |
tfarina
2013/03/05 16:46:24
do you want to pass by value here too?
SteveT
2013/03/05 17:54:24
Done.
| |
73 const base::Time::Exploded kStartDate = { | 73 const base::Time::Exploded kStartDate = { |
74 2012, 11, 0, 6, // Nov 6, 2012 | 74 2012, 11, 0, 6, // Nov 6, 2012 |
75 0, 0, 0, 0 // 00:00:00.000 | 75 0, 0, 0, 0 // 00:00:00.000 |
76 }; | 76 }; |
77 scoped_refptr<base::FieldTrial> trial( | 77 scoped_refptr<base::FieldTrial> trial( |
78 base::FieldTrialList::FactoryGetFieldTrial( | 78 base::FieldTrialList::FactoryGetFieldTrial( |
79 "UMA-New-Install-Uniformity-Trial", 100, "Disabled", | 79 "UMA-New-Install-Uniformity-Trial", 100, "Disabled", |
80 2015, 1, 1, NULL)); | 80 2015, 1, 1, NULL)); |
81 trial->UseOneTimeRandomization(); | 81 trial->UseOneTimeRandomization(); |
82 trial->AppendGroup("Control", 50); | 82 trial->AppendGroup("Control", 50); |
83 trial->AppendGroup("Experiment", 50); | 83 trial->AppendGroup("Experiment", 50); |
84 const base::Time start_date = base::Time::FromLocalExploded(kStartDate); | 84 const base::Time start_date = base::Time::FromLocalExploded(kStartDate); |
85 if (install_date < start_date) | 85 if (install_date < start_date) |
86 trial->Disable(); | 86 trial->Disable(); |
87 else | 87 else |
88 trial->group(); | 88 trial->group(); |
89 } | 89 } |
90 | 90 |
91 } // namespace | 91 } // namespace |
92 | 92 |
93 namespace chrome_variations { | 93 namespace chrome_variations { |
94 | 94 |
95 void SetupUniformityFieldTrials(const base::Time& install_date) { | 95 void SetupUniformityFieldTrials(const base::Time install_date) { |
96 // One field trial will be created for each entry in this array. The i'th | 96 // One field trial will be created for each entry in this array. The i'th |
97 // field trial will have |trial_sizes[i]| groups in it, including the default | 97 // field trial will have |trial_sizes[i]| groups in it, including the default |
98 // group. Each group will have a probability of 1/|trial_sizes[i]|. | 98 // group. Each group will have a probability of 1/|trial_sizes[i]|. |
99 const int num_trial_groups[] = { 100, 20, 10, 5, 2 }; | 99 const int num_trial_groups[] = { 100, 20, 10, 5, 2 }; |
100 | 100 |
101 // Declare our variation ID bases along side this array so we can loop over it | 101 // Declare our variation ID bases along side this array so we can loop over it |
102 // and assign the IDs appropriately. So for example, the 1 percent experiments | 102 // and assign the IDs appropriately. So for example, the 1 percent experiments |
103 // should have a size of 100 (100/100 = 1). | 103 // should have a size of 100 (100/100 = 1). |
104 const chrome_variations::VariationID trial_base_ids[] = { | 104 const chrome_variations::VariationID trial_base_ids[] = { |
105 chrome_variations::UNIFORMITY_1_PERCENT_BASE, | 105 chrome_variations::UNIFORMITY_1_PERCENT_BASE, |
(...skipping 13 matching lines...) Expand all Loading... | |
119 // Setup a 5% session-randomized uniformity trial. | 119 // Setup a 5% session-randomized uniformity trial. |
120 const std::string kSessionRandomizedTrialName = | 120 const std::string kSessionRandomizedTrialName = |
121 "UMA-Session-Randomized-Uniformity-Trial-%d-Percent"; | 121 "UMA-Session-Randomized-Uniformity-Trial-%d-Percent"; |
122 SetupSingleUniformityFieldTrial(false, kSessionRandomizedTrialName, | 122 SetupSingleUniformityFieldTrial(false, kSessionRandomizedTrialName, |
123 chrome_variations::UNIFORMITY_SESSION_RANDOMIZED_5_PERCENT_BASE, 20); | 123 chrome_variations::UNIFORMITY_SESSION_RANDOMIZED_5_PERCENT_BASE, 20); |
124 | 124 |
125 SetupNewInstallUniformityTrial(install_date); | 125 SetupNewInstallUniformityTrial(install_date); |
126 } | 126 } |
127 | 127 |
128 } // namespace chrome_variations | 128 } // namespace chrome_variations |
OLD | NEW |