Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome/browser/chrome_browser_field_trials.cc

Issue 11363062: Create a new-installs-only uniformity trial. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Change start date to Nov 6 Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/chrome_browser_field_trials.h ('k') | chrome/browser/chrome_browser_main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/chrome_browser_field_trials.h" 5 #include "chrome/browser/chrome_browser_field_trials.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/sys_string_conversions.h" 14 #include "base/sys_string_conversions.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "chrome/browser/auto_launch_trial.h" 16 #include "chrome/browser/auto_launch_trial.h"
17 #include "chrome/browser/autocomplete/autocomplete_field_trial.h" 17 #include "chrome/browser/autocomplete/autocomplete_field_trial.h"
18 #include "chrome/browser/chrome_gpu_util.h" 18 #include "chrome/browser/chrome_gpu_util.h"
19 #include "chrome/browser/google/google_util.h" 19 #include "chrome/browser/google/google_util.h"
20 #include "chrome/browser/metrics/variations/variations_service.h"
20 #include "chrome/browser/prerender/prerender_field_trial.h" 21 #include "chrome/browser/prerender/prerender_field_trial.h"
21 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 22 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
22 #include "chrome/browser/ui/sync/one_click_signin_helper.h" 23 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
23 #include "chrome/common/chrome_switches.h" 24 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/chrome_version_info.h" 25 #include "chrome/common/chrome_version_info.h"
25 #include "chrome/common/metrics/variations/variations_util.h" 26 #include "chrome/common/metrics/variations/variations_util.h"
26 #include "net/socket/client_socket_pool_base.h" 27 #include "net/socket/client_socket_pool_base.h"
27 #include "net/spdy/spdy_session.h" 28 #include "net/spdy/spdy_session.h"
28 #include "ui/base/layout.h" 29 #include "ui/base/layout.h"
29 30
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 group_number)); 75 group_number));
75 } 76 }
76 77
77 // Now that all groups have been appended, call group() on the trial to 78 // Now that all groups have been appended, call group() on the trial to
78 // ensure that our trial is registered. This resolves an off-by-one issue 79 // ensure that our trial is registered. This resolves an off-by-one issue
79 // where the default group never gets chosen if we don't "use" the trial. 80 // where the default group never gets chosen if we don't "use" the trial.
80 const int chosen_group = trial->group(); 81 const int chosen_group = trial->group();
81 DVLOG(1) << "Chosen Group: " << chosen_group; 82 DVLOG(1) << "Chosen Group: " << chosen_group;
82 } 83 }
83 84
85 // Setup a 50% uniformity trial for new installs only. This is accomplished by
86 // disabling the trial on clients that were installed before a specified date.
87 void SetupNewInstallUniformityTrial(const base::Time& install_date) {
88 const base::Time::Exploded kStartDate = {
89 2012, 11, 0, 6, // Nov 6, 2012
90 0, 0, 0, 0 // 00:00:00.000
91 };
92 scoped_refptr<base::FieldTrial> trial(
93 base::FieldTrialList::FactoryGetFieldTrial(
94 "UMA-New-Install-Uniformity-Trial", 100, "Disabled",
95 2015, 1, 1, NULL));
96 trial->UseOneTimeRandomization();
97 trial->AppendGroup("Control", 50);
98 trial->AppendGroup("Experiment", 50);
99 const base::Time start_date = base::Time::FromLocalExploded(kStartDate);
100 if (install_date < start_date)
101 trial->Disable();
102 else
103 trial->group();
104 }
105
84 void SetSocketReusePolicy(int warmest_socket_trial_group, 106 void SetSocketReusePolicy(int warmest_socket_trial_group,
85 const int socket_policy[], 107 const int socket_policy[],
86 int num_groups) { 108 int num_groups) {
87 const int* result = std::find(socket_policy, socket_policy + num_groups, 109 const int* result = std::find(socket_policy, socket_policy + num_groups,
88 warmest_socket_trial_group); 110 warmest_socket_trial_group);
89 DCHECK_NE(result, socket_policy + num_groups) 111 DCHECK_NE(result, socket_policy + num_groups)
90 << "Not a valid socket reuse policy group"; 112 << "Not a valid socket reuse policy group";
91 net::SetSocketReusePolicy(result - socket_policy); 113 net::SetSocketReusePolicy(result - socket_policy);
92 } 114 }
93 115
94 } // namespace 116 } // namespace
95 117
96 ChromeBrowserFieldTrials::ChromeBrowserFieldTrials( 118 ChromeBrowserFieldTrials::ChromeBrowserFieldTrials(
97 const CommandLine& parsed_command_line) : 119 const CommandLine& parsed_command_line) :
98 parsed_command_line_(parsed_command_line) { 120 parsed_command_line_(parsed_command_line) {
99 } 121 }
100 122
101 ChromeBrowserFieldTrials::~ChromeBrowserFieldTrials() { 123 ChromeBrowserFieldTrials::~ChromeBrowserFieldTrials() {
102 } 124 }
103 125
104 void ChromeBrowserFieldTrials::SetupFieldTrials() { 126 void ChromeBrowserFieldTrials::SetupFieldTrials(
127 const base::Time& install_time) {
105 prerender::ConfigurePrefetchAndPrerender(parsed_command_line_); 128 prerender::ConfigurePrefetchAndPrerender(parsed_command_line_);
106 SpdyFieldTrial(); 129 SpdyFieldTrial();
107 WarmConnectionFieldTrial(); 130 WarmConnectionFieldTrial();
108 AutoLaunchChromeFieldTrial(); 131 AutoLaunchChromeFieldTrial();
109 gpu_util::InitializeCompositingFieldTrial(); 132 gpu_util::InitializeCompositingFieldTrial();
110 SetupUniformityFieldTrials(); 133 SetupUniformityFieldTrials(install_time);
111 AutocompleteFieldTrial::Activate(); 134 AutocompleteFieldTrial::Activate();
112 DisableNewTabFieldTrialIfNecesssary(); 135 DisableNewTabFieldTrialIfNecesssary();
113 SetUpSafeBrowsingInterstitialFieldTrial(); 136 SetUpSafeBrowsingInterstitialFieldTrial();
114 SetUpInfiniteCacheFieldTrial(); 137 SetUpInfiniteCacheFieldTrial();
115 SetUpCacheSensitivityAnalysisFieldTrial(); 138 SetUpCacheSensitivityAnalysisFieldTrial();
116 WindowsOverlappedTCPReadsFieldTrial(); 139 WindowsOverlappedTCPReadsFieldTrial();
117 #if defined(ENABLE_ONE_CLICK_SIGNIN) 140 #if defined(ENABLE_ONE_CLICK_SIGNIN)
118 OneClickSigninHelper::InitializeFieldTrial(); 141 OneClickSigninHelper::InitializeFieldTrial();
119 #endif 142 #endif
120 InstantiateDynamicTrials(); 143 InstantiateDynamicTrials();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 // Create a 100% field trial based on the brand code. 227 // Create a 100% field trial based on the brand code.
205 if (auto_launch_trial::IsInExperimentGroup(brand)) { 228 if (auto_launch_trial::IsInExperimentGroup(brand)) {
206 base::FieldTrialList::CreateFieldTrial(kAutoLaunchTrialName, 229 base::FieldTrialList::CreateFieldTrial(kAutoLaunchTrialName,
207 kAutoLaunchTrialAutoLaunchGroup); 230 kAutoLaunchTrialAutoLaunchGroup);
208 } else if (auto_launch_trial::IsInControlGroup(brand)) { 231 } else if (auto_launch_trial::IsInControlGroup(brand)) {
209 base::FieldTrialList::CreateFieldTrial(kAutoLaunchTrialName, 232 base::FieldTrialList::CreateFieldTrial(kAutoLaunchTrialName,
210 kAutoLaunchTrialControlGroup); 233 kAutoLaunchTrialControlGroup);
211 } 234 }
212 } 235 }
213 236
214 void ChromeBrowserFieldTrials::SetupUniformityFieldTrials() { 237 void ChromeBrowserFieldTrials::SetupUniformityFieldTrials(
238 const base::Time& install_date) {
215 // One field trial will be created for each entry in this array. The i'th 239 // One field trial will be created for each entry in this array. The i'th
216 // field trial will have |trial_sizes[i]| groups in it, including the default 240 // field trial will have |trial_sizes[i]| groups in it, including the default
217 // group. Each group will have a probability of 1/|trial_sizes[i]|. 241 // group. Each group will have a probability of 1/|trial_sizes[i]|.
218 const int num_trial_groups[] = { 100, 20, 10, 5, 2 }; 242 const int num_trial_groups[] = { 100, 20, 10, 5, 2 };
219 243
220 // Declare our variation ID bases along side this array so we can loop over it 244 // Declare our variation ID bases along side this array so we can loop over it
221 // and assign the IDs appropriately. So for example, the 1 percent experiments 245 // and assign the IDs appropriately. So for example, the 1 percent experiments
222 // should have a size of 100 (100/100 = 1). 246 // should have a size of 100 (100/100 = 1).
223 const chrome_variations::VariationID trial_base_ids[] = { 247 const chrome_variations::VariationID trial_base_ids[] = {
224 chrome_variations::kUniformity1PercentBase, 248 chrome_variations::kUniformity1PercentBase,
225 chrome_variations::kUniformity5PercentBase, 249 chrome_variations::kUniformity5PercentBase,
226 chrome_variations::kUniformity10PercentBase, 250 chrome_variations::kUniformity10PercentBase,
227 chrome_variations::kUniformity20PercentBase, 251 chrome_variations::kUniformity20PercentBase,
228 chrome_variations::kUniformity50PercentBase 252 chrome_variations::kUniformity50PercentBase
229 }; 253 };
230 254
231 const std::string kOneTimeRandomizedTrialName = 255 const std::string kOneTimeRandomizedTrialName =
232 "UMA-Uniformity-Trial-%d-Percent"; 256 "UMA-Uniformity-Trial-%d-Percent";
233 for (size_t i = 0; i < arraysize(num_trial_groups); ++i) { 257 for (size_t i = 0; i < arraysize(num_trial_groups); ++i) {
234 SetupSingleUniformityFieldTrial(true, kOneTimeRandomizedTrialName, 258 SetupSingleUniformityFieldTrial(true, kOneTimeRandomizedTrialName,
235 trial_base_ids[i], num_trial_groups[i]); 259 trial_base_ids[i], num_trial_groups[i]);
236 } 260 }
237 261
238 // Setup a 5% session-randomized uniformity trial. 262 // Setup a 5% session-randomized uniformity trial.
239 const std::string kSessionRandomizedTrialName = 263 const std::string kSessionRandomizedTrialName =
240 "UMA-Session-Randomized-Uniformity-Trial-%d-Percent"; 264 "UMA-Session-Randomized-Uniformity-Trial-%d-Percent";
241 SetupSingleUniformityFieldTrial(false, kSessionRandomizedTrialName, 265 SetupSingleUniformityFieldTrial(false, kSessionRandomizedTrialName,
242 chrome_variations::kUniformitySessionRandomized5PercentBase, 20); 266 chrome_variations::kUniformitySessionRandomized5PercentBase, 20);
267
268 SetupNewInstallUniformityTrial(install_date);
243 } 269 }
244 270
245 void ChromeBrowserFieldTrials::DisableNewTabFieldTrialIfNecesssary() { 271 void ChromeBrowserFieldTrials::DisableNewTabFieldTrialIfNecesssary() {
246 // The new tab button field trial will get created in variations_service.cc 272 // The new tab button field trial will get created in variations_service.cc
247 // through the variations server. However, since there are no HiDPI assets 273 // through the variations server. However, since there are no HiDPI assets
248 // for it, disable it for non-desktop layouts. 274 // for it, disable it for non-desktop layouts.
249 base::FieldTrial* trial = base::FieldTrialList::Find("NewTabButton"); 275 base::FieldTrial* trial = base::FieldTrialList::Find("NewTabButton");
250 if (trial) { 276 if (trial) {
251 bool using_hidpi_assets = false; 277 bool using_hidpi_assets = false;
252 #if defined(ENABLE_HIDPI) && defined(OS_WIN) 278 #if defined(ENABLE_HIDPI) && defined(OS_WIN)
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 #endif 360 #endif
335 } 361 }
336 362
337 void ChromeBrowserFieldTrials::InstantiateDynamicTrials() { 363 void ChromeBrowserFieldTrials::InstantiateDynamicTrials() {
338 // Call |FindValue()| on the trials below, which may come from the server, to 364 // Call |FindValue()| on the trials below, which may come from the server, to
339 // ensure they get marked as "used" for the purposes of data reporting. 365 // ensure they get marked as "used" for the purposes of data reporting.
340 base::FieldTrialList::FindValue("UMA-Dynamic-Binary-Uniformity-Trial"); 366 base::FieldTrialList::FindValue("UMA-Dynamic-Binary-Uniformity-Trial");
341 base::FieldTrialList::FindValue("UMA-Dynamic-Uniformity-Trial"); 367 base::FieldTrialList::FindValue("UMA-Dynamic-Uniformity-Trial");
342 base::FieldTrialList::FindValue("InstantDummy"); 368 base::FieldTrialList::FindValue("InstantDummy");
343 } 369 }
OLDNEW
« no previous file with comments | « chrome/browser/chrome_browser_field_trials.h ('k') | chrome/browser/chrome_browser_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698