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

Side by Side Diff: chrome/browser/prerender/prerender_field_trial.cc

Issue 10802062: Clean up Prerender field trials. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: who needs unreferenced variables? Created 8 years, 5 months 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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/prerender/prerender_field_trial.h" 5 #include "chrome/browser/prerender/prerender_field_trial.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "chrome/browser/metrics/metrics_service.h" 11 #include "chrome/browser/metrics/metrics_service.h"
12 #include "chrome/browser/predictors/autocomplete_action_predictor.h" 12 #include "chrome/browser/predictors/autocomplete_action_predictor.h"
13 #include "chrome/browser/prefs/pref_service.h" 13 #include "chrome/browser/prefs/pref_service.h"
14 #include "chrome/browser/prerender/prerender_manager.h" 14 #include "chrome/browser/prerender/prerender_manager.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/common/chrome_switches.h" 16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/chrome_version_info.h" 17 #include "chrome/common/chrome_version_info.h"
18 18
19 using base::FieldTrial;
20 using base::FieldTrialList;
21
19 namespace prerender { 22 namespace prerender {
20 23
21 namespace { 24 namespace {
22 25
23 const char kOmniboxTrialName[] = "PrerenderFromOmnibox"; 26 const char kOmniboxTrialName[] = "PrerenderFromOmnibox";
24 int g_omnibox_trial_default_group_number = kint32min; 27 int g_omnibox_trial_default_group_number = kint32min;
25 28
26 const char kSpeculativePrefetchingLearningTrialName[] = 29 const char kSpeculativePrefetchingLearningTrialName[] =
27 "SpeculativePrefetchingLearning"; 30 "SpeculativePrefetchingLearning";
28 int g_speculative_prefetching_learning_default_group_number = kint32min; 31 int g_speculative_prefetching_learning_default_group_number = kint32min;
29 32
30 void SetupPrefetchFieldTrial() { 33 void SetupPrefetchFieldTrial() {
31 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 34 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
32 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 35 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
33 channel == chrome::VersionInfo::CHANNEL_BETA) { 36 channel == chrome::VersionInfo::CHANNEL_BETA) {
34 return; 37 return;
35 } 38 }
36 39
37 const base::FieldTrial::Probability divisor = 1000; 40 const FieldTrial::Probability divisor = 1000;
38 const base::FieldTrial::Probability prefetch_probability = 500; 41 const FieldTrial::Probability prefetch_probability = 500;
39 scoped_refptr<base::FieldTrial> trial( 42 scoped_refptr<FieldTrial> trial(
40 base::FieldTrialList::FactoryGetFieldTrial( 43 FieldTrialList::FactoryGetFieldTrial(
41 "Prefetch", divisor, "ContentPrefetchPrefetchOff", 44 "Prefetch", divisor, "ContentPrefetchPrefetchOff",
42 2013, 6, 30, NULL)); 45 2013, 6, 30, NULL));
43 const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn", 46 const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn",
44 prefetch_probability); 47 prefetch_probability);
45 PrerenderManager::SetIsPrefetchEnabled(trial->group() == kPrefetchOnGroup); 48 PrerenderManager::SetIsPrefetchEnabled(trial->group() == kPrefetchOnGroup);
46 } 49 }
47 50
48 void SetupPrerenderFieldTrial() { 51 void SetupPrerenderFieldTrial() {
49 base::FieldTrial::Probability divisor = 1000; 52 const FieldTrial::Probability divisor = 1000;
50 53
51 base::FieldTrial::Probability exp1_probability = 166; 54 FieldTrial::Probability control_probability;
52 base::FieldTrial::Probability exp1_5min_ttl_probability = 83; 55 FieldTrial::Probability experiment_5min_ttl_probability;
53 base::FieldTrial::Probability control1_probability = 166; 56 FieldTrial::Probability experiment_no_use_probability;
54 base::FieldTrial::Probability no_use1_probability = 83;
55
56 base::FieldTrial::Probability exp2_probability = 167;
57 base::FieldTrial::Probability exp2_5min_ttl_probability = 84;
58 base::FieldTrial::Probability control2_probability = 167;
59 base::FieldTrial::Probability no_use2_probability = 84;
60 57
61 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 58 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
62 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 59 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
63 channel == chrome::VersionInfo::CHANNEL_BETA) { 60 channel == chrome::VersionInfo::CHANNEL_BETA) {
64 exp1_probability = 490; 61 // Use very conservatives and stable settings in beta and stable.
65 exp1_5min_ttl_probability = 5; 62 const FieldTrial::Probability release_prerender_enabled_probability = 980;
66 control1_probability = 5; 63 const FieldTrial::Probability release_control_probability = 10;
67 no_use1_probability = 0; 64 const FieldTrial::Probability release_experiment_5min_ttl_probability = 10;
68 exp2_probability = 490; 65 const FieldTrial::Probability release_experiment_no_use_probability = 0;
69 exp2_5min_ttl_probability = 5; 66 COMPILE_ASSERT(
70 control2_probability = 5; 67 release_prerender_enabled_probability + release_control_probability +
71 no_use2_probability = 0; 68 release_experiment_5min_ttl_probability +
69 release_experiment_no_use_probability == divisor,
70 release_experiment_probabilities_must_equal_divisor);
71
72 control_probability = release_experiment_5min_ttl_probability;
73 experiment_5min_ttl_probability = release_control_probability;
74 experiment_no_use_probability = release_experiment_no_use_probability;
75 } else {
76 // In testing channels, use more experiments and a larger control group to
77 // improve quality of data.
78 const FieldTrial::Probability dev_prerender_enabled_probability = 333;
79 const FieldTrial::Probability dev_control_probability = 333;
80 const FieldTrial::Probability dev_experiment_5min_ttl_probability = 167;
81 const FieldTrial::Probability dev_experiment_no_use_probability = 167;
82 COMPILE_ASSERT(dev_prerender_enabled_probability + dev_control_probability +
83 dev_experiment_5min_ttl_probability +
84 dev_experiment_no_use_probability == divisor,
85 dev_experiment_probabilities_must_equal_divisor);
86
87 control_probability = dev_experiment_5min_ttl_probability;
88 experiment_5min_ttl_probability = dev_control_probability;
89 experiment_no_use_probability = dev_experiment_no_use_probability;
72 } 90 }
73 CHECK_EQ(divisor, exp1_probability + exp1_5min_ttl_probability +
74 control1_probability + no_use1_probability + exp2_probability +
75 exp2_5min_ttl_probability + control2_probability +
76 no_use2_probability);
77 int experiment_1_group = -1;
78 scoped_refptr<base::FieldTrial> trial(
79 base::FieldTrialList::FactoryGetFieldTrial(
80 "Prerender", divisor, "ContentPrefetchPrerender1",
81 2013, 6, 30, &experiment_1_group));
82 91
83 const int experiment_15_min_TTL_group = 92 int prerender_enabled_group = -1;
84 trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL1", 93 scoped_refptr<FieldTrial> trial(
85 exp1_5min_ttl_probability); 94 FieldTrialList::FactoryGetFieldTrial(
86 const int control_1_group = 95 "Prerender", divisor, "PrerenderEnabled",
87 trial->AppendGroup("ContentPrefetchPrerenderControl1", 96 2013, 6, 30, &prerender_enabled_group));
88 control1_probability); 97 const int control_group =
89 const int no_use_1_group = 98 trial->AppendGroup("PrerenderControl",
90 trial->AppendGroup("ContentPrefetchPrerenderNoUse1", 99 control_probability);
91 no_use1_probability); 100 const int experiment_5_min_TTL_group =
92 const int experiment_2_group = 101 trial->AppendGroup("Prerender5minTTL",
93 trial->AppendGroup("ContentPrefetchPrerender2", 102 experiment_5min_ttl_probability);
94 exp2_probability); 103 const int experiment_no_use_group =
95 const int experiment_25_min_TTL_group = 104 trial->AppendGroup("PrerenderNoUse",
96 trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL2", 105 experiment_no_use_probability);
97 exp2_5min_ttl_probability); 106
98 const int control_2_group =
99 trial->AppendGroup("ContentPrefetchPrerenderControl2",
100 control2_probability);
101 const int no_use_2_group =
102 trial->AppendGroup("ContentPrefetchPrerenderNoUse2",
103 no_use2_probability);
104 const int trial_group = trial->group(); 107 const int trial_group = trial->group();
105 if (trial_group == experiment_1_group || 108 if (trial_group == prerender_enabled_group) {
106 trial_group == experiment_2_group) {
107 PrerenderManager::SetMode( 109 PrerenderManager::SetMode(
108 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP); 110 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP);
109 } else if (trial_group == experiment_15_min_TTL_group || 111 } else if (trial_group == control_group) {
110 trial_group == experiment_25_min_TTL_group) { 112 PrerenderManager::SetMode(
113 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
114 } else if (trial_group == experiment_5_min_TTL_group) {
111 PrerenderManager::SetMode( 115 PrerenderManager::SetMode(
112 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); 116 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
113 } else if (trial_group == control_1_group || 117 } else if (trial_group == experiment_no_use_group) {
114 trial_group == control_2_group) {
115 PrerenderManager::SetMode(
116 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
117 } else if (trial_group == no_use_1_group ||
118 trial_group == no_use_2_group) {
119 PrerenderManager::SetMode( 118 PrerenderManager::SetMode(
120 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); 119 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP);
121 } else { 120 } else {
122 NOTREACHED(); 121 NOTREACHED();
123 } 122 }
124 } 123 }
125 124
126 } // end namespace 125 } // end namespace
127 126
128 void ConfigureOmniboxPrerender(); 127 void ConfigureOmniboxPrerender();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", 184 UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions",
186 PrerenderManager::GetMode(), 185 PrerenderManager::GetMode(),
187 PrerenderManager::PRERENDER_MODE_MAX); 186 PrerenderManager::PRERENDER_MODE_MAX);
188 187
189 ConfigureOmniboxPrerender(); 188 ConfigureOmniboxPrerender();
190 ConfigureSpeculativePrefetching(); 189 ConfigureSpeculativePrefetching();
191 } 190 }
192 191
193 void ConfigureOmniboxPrerender() { 192 void ConfigureOmniboxPrerender() {
194 // Field trial to see if we're enabled. 193 // Field trial to see if we're enabled.
195 const base::FieldTrial::Probability kDivisor = 100; 194 const FieldTrial::Probability kDivisor = 100;
196 195
197 base::FieldTrial::Probability kDisabledProbability = 10; 196 FieldTrial::Probability kDisabledProbability = 10;
198 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 197 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
199 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 198 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
200 channel == chrome::VersionInfo::CHANNEL_BETA) { 199 channel == chrome::VersionInfo::CHANNEL_BETA) {
201 kDisabledProbability = 1; 200 kDisabledProbability = 1;
202 } 201 }
203 scoped_refptr<base::FieldTrial> omnibox_prerender_trial( 202 scoped_refptr<FieldTrial> omnibox_prerender_trial(
204 base::FieldTrialList::FactoryGetFieldTrial( 203 FieldTrialList::FactoryGetFieldTrial(
205 kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled", 204 kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled",
206 2012, 12, 30, &g_omnibox_trial_default_group_number)); 205 2012, 12, 30, &g_omnibox_trial_default_group_number));
207 omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled", 206 omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled",
208 kDisabledProbability); 207 kDisabledProbability);
209 } 208 }
210 209
211 bool IsOmniboxEnabled(Profile* profile) { 210 bool IsOmniboxEnabled(Profile* profile) {
212 if (!profile) 211 if (!profile)
213 return false; 212 return false;
214 213
215 if (!PrerenderManager::IsPrerenderingPossible()) 214 if (!PrerenderManager::IsPrerenderingPossible())
216 return false; 215 return false;
217 216
218 // Override any field trial groups if the user has set a command line flag. 217 // Override any field trial groups if the user has set a command line flag.
219 if (CommandLine::ForCurrentProcess()->HasSwitch( 218 if (CommandLine::ForCurrentProcess()->HasSwitch(
220 switches::kPrerenderFromOmnibox)) { 219 switches::kPrerenderFromOmnibox)) {
221 const std::string switch_value = 220 const std::string switch_value =
222 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 221 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
223 switches::kPrerenderFromOmnibox); 222 switches::kPrerenderFromOmnibox);
224 223
225 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled) 224 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled)
226 return true; 225 return true;
227 226
228 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled) 227 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled)
229 return false; 228 return false;
230 229
231 DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto); 230 DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto);
232 } 231 }
233 232
234 const int group = base::FieldTrialList::FindValue(kOmniboxTrialName); 233 const int group = FieldTrialList::FindValue(kOmniboxTrialName);
235 return group == base::FieldTrial::kNotFinalized || 234 return group == FieldTrial::kNotFinalized ||
236 group == g_omnibox_trial_default_group_number; 235 group == g_omnibox_trial_default_group_number;
237 } 236 }
238 237
239 void ConfigureSpeculativePrefetching() { 238 void ConfigureSpeculativePrefetching() {
240 // Field trial to see if we're enabled. 239 // Field trial to see if we're enabled.
241 const base::FieldTrial::Probability kDivisor = 100; 240 const FieldTrial::Probability kDivisor = 100;
242 241
243 base::FieldTrial::Probability kDisabledProbability = 99; 242 FieldTrial::Probability kDisabledProbability = 99;
244 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 243 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
245 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 244 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
246 channel == chrome::VersionInfo::CHANNEL_BETA) { 245 channel == chrome::VersionInfo::CHANNEL_BETA) {
247 kDisabledProbability = 100; 246 kDisabledProbability = 100;
248 } 247 }
249 scoped_refptr<base::FieldTrial> speculative_prefetching_learning_trial( 248 scoped_refptr<FieldTrial> speculative_prefetching_learning_trial(
250 base::FieldTrialList::FactoryGetFieldTrial( 249 FieldTrialList::FactoryGetFieldTrial(
251 kSpeculativePrefetchingLearningTrialName, 250 kSpeculativePrefetchingLearningTrialName,
252 kDivisor, 251 kDivisor,
253 "SpeculativePrefetchingLearningEnabled", 252 "SpeculativePrefetchingLearningEnabled",
254 2012, 12, 30, 253 2012, 12, 30,
255 &g_speculative_prefetching_learning_default_group_number)); 254 &g_speculative_prefetching_learning_default_group_number));
256 speculative_prefetching_learning_trial->AppendGroup( 255 speculative_prefetching_learning_trial->AppendGroup(
257 "SpeculativePrefetchingDisabled", 256 "SpeculativePrefetchingDisabled",
258 kDisabledProbability); 257 kDisabledProbability);
259 } 258 }
260 259
261 bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) { 260 bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) {
262 if (!profile) 261 if (!profile)
263 return false; 262 return false;
264 263
265 // Override any field trial groups if the user has set a command line flag. 264 // Override any field trial groups if the user has set a command line flag.
266 if (CommandLine::ForCurrentProcess()->HasSwitch( 265 if (CommandLine::ForCurrentProcess()->HasSwitch(
267 switches::kSpeculativeResourcePrefetching)) { 266 switches::kSpeculativeResourcePrefetching)) {
268 const std::string switch_value = 267 const std::string switch_value =
269 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 268 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
270 switches::kSpeculativeResourcePrefetching); 269 switches::kSpeculativeResourcePrefetching);
271 270
272 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning) 271 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning)
273 return true; 272 return true;
274 } 273 }
275 274
276 const int group = base::FieldTrialList::FindValue( 275 const int group = FieldTrialList::FindValue(
277 kSpeculativePrefetchingLearningTrialName); 276 kSpeculativePrefetchingLearningTrialName);
278 return group == g_speculative_prefetching_learning_default_group_number; 277 return group == g_speculative_prefetching_learning_default_group_number;
279 } 278 }
280 279
281 } // namespace prerender 280 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698