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

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

Issue 10802024: Make three simultanious prerenders the default maximum in Canary and Dev only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix order of PrerenderManagerMode 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
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 prerender_on_probability;
52 base::FieldTrial::Probability exp1_5min_ttl_probability = 83; 55 FieldTrial::Probability control_probability;
53 base::FieldTrial::Probability control1_probability = 166; 56 FieldTrial::Probability experiment_multi_prerender_probability;
54 base::FieldTrial::Probability no_use1_probability = 83; 57 FieldTrial::Probability experiment_5min_ttl_probability;
55 58 FieldTrial::Probability experiment_no_use_probability;
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 59
61 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 60 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
62 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 61 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
63 channel == chrome::VersionInfo::CHANNEL_BETA) { 62 channel == chrome::VersionInfo::CHANNEL_BETA) {
64 exp1_probability = 490; 63 // Use very conservatives and stable settings in beta and stable.
65 exp1_5min_ttl_probability = 5; 64 const FieldTrial::Probability release_prerender_on_probability = 980;
66 control1_probability = 5; 65 const FieldTrial::Probability release_control_probability = 10;
67 no_use1_probability = 0; 66 const FieldTrial::Probability
68 exp2_probability = 490; 67 release_experiment_multi_prerender_probability = 0;
69 exp2_5min_ttl_probability = 5; 68 const FieldTrial::Probability release_experiment_5min_ttl_probability = 10;
70 control2_probability = 5; 69 const FieldTrial::Probability release_experiment_no_use_probability = 0;
71 no_use2_probability = 0; 70 COMPILE_ASSERT(
71 release_prerender_on_probability + release_control_probability +
72 release_experiment_multi_prerender_probability +
73 release_experiment_5min_ttl_probability +
74 release_experiment_no_use_probability == divisor,
75 release_experiment_probabilities_must_equal_divisor);
76
77 prerender_on_probability = release_prerender_on_probability;
78 control_probability = release_experiment_5min_ttl_probability;
79 experiment_multi_prerender_probability =
80 release_experiment_multi_prerender_probability;
81 experiment_5min_ttl_probability = release_control_probability;
82 experiment_no_use_probability = release_experiment_no_use_probability;
83 } else {
84 // In testing channels, use more experiments and a larger control group to
85 // improve quality of data.
86 const FieldTrial::Probability dev_prerender_on_probability = 250;
87 const FieldTrial::Probability dev_control_probability = 250;
88 const FieldTrial::Probability
89 dev_experiment_multi_prerender_probability = 250;
90 const FieldTrial::Probability dev_experiment_5min_ttl_probability = 125;
91 const FieldTrial::Probability dev_experiment_no_use_probability = 125;
92 COMPILE_ASSERT(dev_prerender_on_probability + dev_control_probability +
93 dev_experiment_multi_prerender_probability +
94 dev_experiment_5min_ttl_probability +
95 dev_experiment_no_use_probability == divisor,
96 dev_experiment_probabilities_must_equal_divisor);
97
98 prerender_on_probability = dev_prerender_on_probability;
99 control_probability = dev_experiment_5min_ttl_probability;
100 experiment_multi_prerender_probability =
101 dev_experiment_multi_prerender_probability;
102 experiment_5min_ttl_probability = dev_control_probability;
103 experiment_no_use_probability = dev_experiment_no_use_probability;
72 } 104 }
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 105
83 const int experiment_15_min_TTL_group = 106 int prerender_on_group = -1;
84 trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL1", 107 scoped_refptr<FieldTrial> trial(
85 exp1_5min_ttl_probability); 108 FieldTrialList::FactoryGetFieldTrial(
86 const int control_1_group = 109 "Prerender", divisor, "PrerenderEnabled",
87 trial->AppendGroup("ContentPrefetchPrerenderControl1", 110 2013, 6, 30, &prerender_on_group));
88 control1_probability); 111 const int control_group =
89 const int no_use_1_group = 112 trial->AppendGroup("PrerenderControl",
90 trial->AppendGroup("ContentPrefetchPrerenderNoUse1", 113 control_probability);
91 no_use1_probability); 114 const int experiment_multi_prerender_group =
92 const int experiment_2_group = 115 trial->AppendGroup("PrerenderMulti",
93 trial->AppendGroup("ContentPrefetchPrerender2", 116 experiment_multi_prerender_probability);
94 exp2_probability); 117 const int experiment_5_min_TTL_group =
95 const int experiment_25_min_TTL_group = 118 trial->AppendGroup("Prerender5minTTL",
96 trial->AppendGroup("ContentPrefetchPrerenderExp5minTTL2", 119 experiment_5min_ttl_probability);
97 exp2_5min_ttl_probability); 120 const int experiment_no_use_group =
98 const int control_2_group = 121 trial->AppendGroup("PrerenderNoUse",
99 trial->AppendGroup("ContentPrefetchPrerenderControl2", 122 experiment_no_use_probability);
100 control2_probability); 123
101 const int no_use_2_group =
102 trial->AppendGroup("ContentPrefetchPrerenderNoUse2",
103 no_use2_probability);
104 const int trial_group = trial->group(); 124 const int trial_group = trial->group();
105 if (trial_group == experiment_1_group || 125 if (trial_group == prerender_on_group) {
106 trial_group == experiment_2_group) {
107 PrerenderManager::SetMode( 126 PrerenderManager::SetMode(
108 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP); 127 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP);
109 } else if (trial_group == experiment_15_min_TTL_group || 128 } else if (trial_group == control_group) {
110 trial_group == experiment_25_min_TTL_group) { 129 PrerenderManager::SetMode(
130 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
131 } else if (trial_group == experiment_multi_prerender_group) {
132 PrerenderManager::SetMode(
133 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP);
134 } else if (trial_group == experiment_5_min_TTL_group) {
111 PrerenderManager::SetMode( 135 PrerenderManager::SetMode(
112 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); 136 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP);
113 } else if (trial_group == control_1_group || 137 } 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( 138 PrerenderManager::SetMode(
120 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); 139 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP);
121 } else { 140 } else {
122 NOTREACHED(); 141 NOTREACHED();
123 } 142 }
124 } 143 }
125 144
126 } // end namespace 145 } // end namespace
127 146
128 void ConfigureOmniboxPrerender(); 147 void ConfigureOmniboxPrerender();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", 204 UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions",
186 PrerenderManager::GetMode(), 205 PrerenderManager::GetMode(),
187 PrerenderManager::PRERENDER_MODE_MAX); 206 PrerenderManager::PRERENDER_MODE_MAX);
188 207
189 ConfigureOmniboxPrerender(); 208 ConfigureOmniboxPrerender();
190 ConfigureSpeculativePrefetching(); 209 ConfigureSpeculativePrefetching();
191 } 210 }
192 211
193 void ConfigureOmniboxPrerender() { 212 void ConfigureOmniboxPrerender() {
194 // Field trial to see if we're enabled. 213 // Field trial to see if we're enabled.
195 const base::FieldTrial::Probability kDivisor = 100; 214 const FieldTrial::Probability kDivisor = 100;
196 215
197 base::FieldTrial::Probability kDisabledProbability = 10; 216 FieldTrial::Probability kDisabledProbability = 10;
198 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 217 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
199 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 218 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
200 channel == chrome::VersionInfo::CHANNEL_BETA) { 219 channel == chrome::VersionInfo::CHANNEL_BETA) {
201 kDisabledProbability = 1; 220 kDisabledProbability = 1;
202 } 221 }
203 scoped_refptr<base::FieldTrial> omnibox_prerender_trial( 222 scoped_refptr<FieldTrial> omnibox_prerender_trial(
204 base::FieldTrialList::FactoryGetFieldTrial( 223 FieldTrialList::FactoryGetFieldTrial(
205 kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled", 224 kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled",
206 2012, 12, 30, &g_omnibox_trial_default_group_number)); 225 2012, 12, 30, &g_omnibox_trial_default_group_number));
207 omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled", 226 omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled",
208 kDisabledProbability); 227 kDisabledProbability);
209 } 228 }
210 229
211 bool IsOmniboxEnabled(Profile* profile) { 230 bool IsOmniboxEnabled(Profile* profile) {
212 if (!profile) 231 if (!profile)
213 return false; 232 return false;
214 233
215 if (!PrerenderManager::IsPrerenderingPossible()) 234 if (!PrerenderManager::IsPrerenderingPossible())
216 return false; 235 return false;
217 236
218 // Override any field trial groups if the user has set a command line flag. 237 // Override any field trial groups if the user has set a command line flag.
219 if (CommandLine::ForCurrentProcess()->HasSwitch( 238 if (CommandLine::ForCurrentProcess()->HasSwitch(
220 switches::kPrerenderFromOmnibox)) { 239 switches::kPrerenderFromOmnibox)) {
221 const std::string switch_value = 240 const std::string switch_value =
222 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 241 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
223 switches::kPrerenderFromOmnibox); 242 switches::kPrerenderFromOmnibox);
224 243
225 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled) 244 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled)
226 return true; 245 return true;
227 246
228 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled) 247 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled)
229 return false; 248 return false;
230 249
231 DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto); 250 DCHECK(switch_value == switches::kPrerenderFromOmniboxSwitchValueAuto);
232 } 251 }
233 252
234 const int group = base::FieldTrialList::FindValue(kOmniboxTrialName); 253 const int group = FieldTrialList::FindValue(kOmniboxTrialName);
235 return group == base::FieldTrial::kNotFinalized || 254 return group == FieldTrial::kNotFinalized ||
236 group == g_omnibox_trial_default_group_number; 255 group == g_omnibox_trial_default_group_number;
237 } 256 }
238 257
239 void ConfigureSpeculativePrefetching() { 258 void ConfigureSpeculativePrefetching() {
240 // Field trial to see if we're enabled. 259 // Field trial to see if we're enabled.
241 const base::FieldTrial::Probability kDivisor = 100; 260 const FieldTrial::Probability kDivisor = 100;
242 261
243 base::FieldTrial::Probability kDisabledProbability = 99; 262 FieldTrial::Probability kDisabledProbability = 99;
244 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 263 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
245 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 264 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
246 channel == chrome::VersionInfo::CHANNEL_BETA) { 265 channel == chrome::VersionInfo::CHANNEL_BETA) {
247 kDisabledProbability = 100; 266 kDisabledProbability = 100;
248 } 267 }
249 scoped_refptr<base::FieldTrial> speculative_prefetching_learning_trial( 268 scoped_refptr<FieldTrial> speculative_prefetching_learning_trial(
250 base::FieldTrialList::FactoryGetFieldTrial( 269 FieldTrialList::FactoryGetFieldTrial(
251 kSpeculativePrefetchingLearningTrialName, 270 kSpeculativePrefetchingLearningTrialName,
252 kDivisor, 271 kDivisor,
253 "SpeculativePrefetchingLearningEnabled", 272 "SpeculativePrefetchingLearningEnabled",
254 2012, 12, 30, 273 2012, 12, 30,
255 &g_speculative_prefetching_learning_default_group_number)); 274 &g_speculative_prefetching_learning_default_group_number));
256 speculative_prefetching_learning_trial->AppendGroup( 275 speculative_prefetching_learning_trial->AppendGroup(
257 "SpeculativePrefetchingDisabled", 276 "SpeculativePrefetchingDisabled",
258 kDisabledProbability); 277 kDisabledProbability);
259 } 278 }
260 279
261 bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) { 280 bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) {
262 if (!profile) 281 if (!profile)
263 return false; 282 return false;
264 283
265 // Override any field trial groups if the user has set a command line flag. 284 // Override any field trial groups if the user has set a command line flag.
266 if (CommandLine::ForCurrentProcess()->HasSwitch( 285 if (CommandLine::ForCurrentProcess()->HasSwitch(
267 switches::kSpeculativeResourcePrefetching)) { 286 switches::kSpeculativeResourcePrefetching)) {
268 const std::string switch_value = 287 const std::string switch_value =
269 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 288 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
270 switches::kSpeculativeResourcePrefetching); 289 switches::kSpeculativeResourcePrefetching);
271 290
272 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning) 291 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning)
273 return true; 292 return true;
274 } 293 }
275 294
276 const int group = base::FieldTrialList::FindValue( 295 const int group = FieldTrialList::FindValue(
277 kSpeculativePrefetchingLearningTrialName); 296 kSpeculativePrefetchingLearningTrialName);
278 return group == g_speculative_prefetching_learning_default_group_number; 297 return group == g_speculative_prefetching_learning_default_group_number;
279 } 298 }
280 299
281 } // namespace prerender 300 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698