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

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

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