OLD | NEW |
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" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 2013, 6, 30, NULL)); | 45 2013, 6, 30, NULL)); |
46 const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn", | 46 const int kPrefetchOnGroup = trial->AppendGroup("ContentPrefetchPrefetchOn", |
47 prefetch_probability); | 47 prefetch_probability); |
48 PrerenderManager::SetIsPrefetchEnabled(trial->group() == kPrefetchOnGroup); | 48 PrerenderManager::SetIsPrefetchEnabled(trial->group() == kPrefetchOnGroup); |
49 } | 49 } |
50 | 50 |
51 void SetupPrerenderFieldTrial() { | 51 void SetupPrerenderFieldTrial() { |
52 const FieldTrial::Probability divisor = 1000; | 52 const FieldTrial::Probability divisor = 1000; |
53 | 53 |
54 FieldTrial::Probability control_probability; | 54 FieldTrial::Probability control_probability; |
| 55 FieldTrial::Probability experiment_multi_prerender_probability; |
55 FieldTrial::Probability experiment_5min_ttl_probability; | 56 FieldTrial::Probability experiment_5min_ttl_probability; |
56 FieldTrial::Probability experiment_no_use_probability; | 57 FieldTrial::Probability experiment_no_use_probability; |
57 | 58 |
58 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); | 59 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); |
59 if (channel == chrome::VersionInfo::CHANNEL_STABLE || | 60 if (channel == chrome::VersionInfo::CHANNEL_STABLE || |
60 channel == chrome::VersionInfo::CHANNEL_BETA) { | 61 channel == chrome::VersionInfo::CHANNEL_BETA) { |
61 // Use very conservatives and stable settings in beta and stable. | 62 // Use very conservatives and stable settings in beta and stable. |
62 const FieldTrial::Probability release_prerender_enabled_probability = 980; | 63 const FieldTrial::Probability release_prerender_enabled_probability = 980; |
63 const FieldTrial::Probability release_control_probability = 10; | 64 const FieldTrial::Probability release_control_probability = 10; |
| 65 const FieldTrial::Probability |
| 66 release_experiment_multi_prerender_probability = 0; |
64 const FieldTrial::Probability release_experiment_5min_ttl_probability = 10; | 67 const FieldTrial::Probability release_experiment_5min_ttl_probability = 10; |
65 const FieldTrial::Probability release_experiment_no_use_probability = 0; | 68 const FieldTrial::Probability release_experiment_no_use_probability = 0; |
66 COMPILE_ASSERT( | 69 COMPILE_ASSERT( |
67 release_prerender_enabled_probability + release_control_probability + | 70 release_prerender_enabled_probability + release_control_probability + |
| 71 release_experiment_multi_prerender_probability + |
68 release_experiment_5min_ttl_probability + | 72 release_experiment_5min_ttl_probability + |
69 release_experiment_no_use_probability == divisor, | 73 release_experiment_no_use_probability == divisor, |
70 release_experiment_probabilities_must_equal_divisor); | 74 release_experiment_probabilities_must_equal_divisor); |
71 | 75 |
72 control_probability = release_experiment_5min_ttl_probability; | 76 control_probability = release_experiment_5min_ttl_probability; |
| 77 experiment_multi_prerender_probability = |
| 78 release_experiment_multi_prerender_probability; |
73 experiment_5min_ttl_probability = release_control_probability; | 79 experiment_5min_ttl_probability = release_control_probability; |
74 experiment_no_use_probability = release_experiment_no_use_probability; | 80 experiment_no_use_probability = release_experiment_no_use_probability; |
75 } else { | 81 } else { |
76 // In testing channels, use more experiments and a larger control group to | 82 // In testing channels, use more experiments and a larger control group to |
77 // improve quality of data. | 83 // improve quality of data. |
78 const FieldTrial::Probability dev_prerender_enabled_probability = 333; | 84 const FieldTrial::Probability dev_prerender_enabled_probability = 250; |
79 const FieldTrial::Probability dev_control_probability = 333; | 85 const FieldTrial::Probability dev_control_probability = 250; |
80 const FieldTrial::Probability dev_experiment_5min_ttl_probability = 167; | 86 const FieldTrial::Probability |
81 const FieldTrial::Probability dev_experiment_no_use_probability = 167; | 87 dev_experiment_multi_prerender_probability = 250; |
| 88 const FieldTrial::Probability dev_experiment_5min_ttl_probability = 125; |
| 89 const FieldTrial::Probability dev_experiment_no_use_probability = 125; |
82 COMPILE_ASSERT(dev_prerender_enabled_probability + dev_control_probability + | 90 COMPILE_ASSERT(dev_prerender_enabled_probability + dev_control_probability + |
| 91 dev_experiment_multi_prerender_probability + |
83 dev_experiment_5min_ttl_probability + | 92 dev_experiment_5min_ttl_probability + |
84 dev_experiment_no_use_probability == divisor, | 93 dev_experiment_no_use_probability == divisor, |
85 dev_experiment_probabilities_must_equal_divisor); | 94 dev_experiment_probabilities_must_equal_divisor); |
86 | 95 |
87 control_probability = dev_experiment_5min_ttl_probability; | 96 control_probability = dev_experiment_5min_ttl_probability; |
| 97 experiment_multi_prerender_probability = |
| 98 dev_experiment_multi_prerender_probability; |
88 experiment_5min_ttl_probability = dev_control_probability; | 99 experiment_5min_ttl_probability = dev_control_probability; |
89 experiment_no_use_probability = dev_experiment_no_use_probability; | 100 experiment_no_use_probability = dev_experiment_no_use_probability; |
90 } | 101 } |
91 | 102 |
92 int prerender_enabled_group = -1; | 103 int prerender_enabled_group = -1; |
93 scoped_refptr<FieldTrial> trial( | 104 scoped_refptr<FieldTrial> trial( |
94 FieldTrialList::FactoryGetFieldTrial( | 105 FieldTrialList::FactoryGetFieldTrial( |
95 "Prerender", divisor, "PrerenderEnabled", | 106 "Prerender", divisor, "PrerenderEnabled", |
96 2013, 6, 30, &prerender_enabled_group)); | 107 2013, 6, 30, &prerender_enabled_group)); |
97 const int control_group = | 108 const int control_group = |
98 trial->AppendGroup("PrerenderControl", | 109 trial->AppendGroup("PrerenderControl", |
99 control_probability); | 110 control_probability); |
| 111 const int experiment_multi_prerender_group = |
| 112 trial->AppendGroup("PrerenderMulti", |
| 113 experiment_multi_prerender_probability); |
100 const int experiment_5_min_TTL_group = | 114 const int experiment_5_min_TTL_group = |
101 trial->AppendGroup("Prerender5minTTL", | 115 trial->AppendGroup("Prerender5minTTL", |
102 experiment_5min_ttl_probability); | 116 experiment_5min_ttl_probability); |
103 const int experiment_no_use_group = | 117 const int experiment_no_use_group = |
104 trial->AppendGroup("PrerenderNoUse", | 118 trial->AppendGroup("PrerenderNoUse", |
105 experiment_no_use_probability); | 119 experiment_no_use_probability); |
106 | 120 |
107 const int trial_group = trial->group(); | 121 const int trial_group = trial->group(); |
108 if (trial_group == prerender_enabled_group) { | 122 if (trial_group == prerender_enabled_group) { |
109 PrerenderManager::SetMode( | 123 PrerenderManager::SetMode( |
110 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP); | 124 PrerenderManager::PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP); |
111 } else if (trial_group == control_group) { | 125 } else if (trial_group == control_group) { |
112 PrerenderManager::SetMode( | 126 PrerenderManager::SetMode( |
113 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 127 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 128 } else if (trial_group == experiment_multi_prerender_group) { |
| 129 PrerenderManager::SetMode( |
| 130 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP); |
114 } else if (trial_group == experiment_5_min_TTL_group) { | 131 } else if (trial_group == experiment_5_min_TTL_group) { |
115 PrerenderManager::SetMode( | 132 PrerenderManager::SetMode( |
116 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); | 133 PrerenderManager::PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP); |
117 } else if (trial_group == experiment_no_use_group) { | 134 } else if (trial_group == experiment_no_use_group) { |
118 PrerenderManager::SetMode( | 135 PrerenderManager::SetMode( |
119 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); | 136 PrerenderManager::PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP); |
120 } else { | 137 } else { |
121 NOTREACHED(); | 138 NOTREACHED(); |
122 } | 139 } |
123 } | 140 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning) | 288 if (switch_value == switches::kSpeculativeResourcePrefetchingLearning) |
272 return true; | 289 return true; |
273 } | 290 } |
274 | 291 |
275 const int group = FieldTrialList::FindValue( | 292 const int group = FieldTrialList::FindValue( |
276 kSpeculativePrefetchingLearningTrialName); | 293 kSpeculativePrefetchingLearningTrialName); |
277 return group == g_speculative_prefetching_learning_default_group_number; | 294 return group == g_speculative_prefetching_learning_default_group_number; |
278 } | 295 } |
279 | 296 |
280 } // namespace prerender | 297 } // namespace prerender |
OLD | NEW |