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/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" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 | 98 |
99 ChromeBrowserFieldTrials::ChromeBrowserFieldTrials( | 99 ChromeBrowserFieldTrials::ChromeBrowserFieldTrials( |
100 const CommandLine& parsed_command_line) : | 100 const CommandLine& parsed_command_line) : |
101 parsed_command_line_(parsed_command_line) { | 101 parsed_command_line_(parsed_command_line) { |
102 } | 102 } |
103 | 103 |
104 ChromeBrowserFieldTrials::~ChromeBrowserFieldTrials() { | 104 ChromeBrowserFieldTrials::~ChromeBrowserFieldTrials() { |
105 } | 105 } |
106 | 106 |
107 void ChromeBrowserFieldTrials::SetupFieldTrials(bool proxy_policy_is_set) { | 107 void ChromeBrowserFieldTrials::SetupFieldTrials(bool proxy_policy_is_set) { |
108 SocketTimeoutFieldTrial(); | |
109 prerender::ConfigurePrefetchAndPrerender(parsed_command_line_); | 108 prerender::ConfigurePrefetchAndPrerender(parsed_command_line_); |
110 SpdyFieldTrial(); | 109 SpdyFieldTrial(); |
111 WarmConnectionFieldTrial(); | 110 WarmConnectionFieldTrial(); |
112 PredictorFieldTrial(); | 111 PredictorFieldTrial(); |
113 AutoLaunchChromeFieldTrial(); | 112 AutoLaunchChromeFieldTrial(); |
114 gpu_util::InitializeCompositingFieldTrial(); | 113 gpu_util::InitializeCompositingFieldTrial(); |
115 SetupUniformityFieldTrials(); | 114 SetupUniformityFieldTrials(); |
116 AutocompleteFieldTrial::Activate(); | 115 AutocompleteFieldTrial::Activate(); |
117 DisableNewTabFieldTrialIfNecesssary(); | 116 DisableNewTabFieldTrialIfNecesssary(); |
118 SetUpSafeBrowsingInterstitialFieldTrial(); | 117 SetUpSafeBrowsingInterstitialFieldTrial(); |
119 SetUpInfiniteCacheFieldTrial(); | 118 SetUpInfiniteCacheFieldTrial(); |
120 SetUpCacheSensitivityAnalysisFieldTrial(); | 119 SetUpCacheSensitivityAnalysisFieldTrial(); |
121 #if defined(ENABLE_ONE_CLICK_SIGNIN) | 120 #if defined(ENABLE_ONE_CLICK_SIGNIN) |
122 OneClickSigninHelper::InitializeFieldTrial(); | 121 OneClickSigninHelper::InitializeFieldTrial(); |
123 #endif | 122 #endif |
124 } | 123 } |
125 | 124 |
126 // A/B test for determining a value for unused socket timeout. Currently the | |
127 // timeout defaults to 10 seconds. Having this value set too low won't allow us | |
128 // to take advantage of idle sockets. Setting it to too high could possibly | |
129 // result in more ERR_CONNECTION_RESETs, since some servers will kill a socket | |
130 // before we time it out. Since these are "unused" sockets, we won't retry the | |
131 // connection and instead show an error to the user. So we need to be | |
132 // conservative here. We've seen that some servers will close the socket after | |
133 // as short as 10 seconds. See http://crbug.com/84313 for more details. | |
134 void ChromeBrowserFieldTrials::SocketTimeoutFieldTrial() { | |
135 const base::FieldTrial::Probability kIdleSocketTimeoutDivisor = 100; | |
136 // 1% probability for all experimental settings. | |
137 const base::FieldTrial::Probability kSocketTimeoutProbability = 1; | |
138 | |
139 // After June 30, 2011 builds, it will always be in default group. | |
140 int socket_timeout_10 = -1; | |
141 scoped_refptr<base::FieldTrial> socket_timeout_trial( | |
142 base::FieldTrialList::FactoryGetFieldTrial( | |
143 "IdleSktToImpact", kIdleSocketTimeoutDivisor, "idle_timeout_10", | |
144 2011, 6, 30, &socket_timeout_10)); | |
145 | |
146 const int socket_timeout_5 = | |
147 socket_timeout_trial->AppendGroup("idle_timeout_5", | |
148 kSocketTimeoutProbability); | |
149 const int socket_timeout_20 = | |
150 socket_timeout_trial->AppendGroup("idle_timeout_20", | |
151 kSocketTimeoutProbability); | |
152 | |
153 const int idle_to_trial_group = socket_timeout_trial->group(); | |
154 | |
155 if (idle_to_trial_group == socket_timeout_5) { | |
156 net::ClientSocketPool::set_unused_idle_socket_timeout( | |
157 base::TimeDelta::FromSeconds(5)); | |
158 } else if (idle_to_trial_group == socket_timeout_10) { | |
159 net::ClientSocketPool::set_unused_idle_socket_timeout( | |
160 base::TimeDelta::FromSeconds(10)); | |
161 } else if (idle_to_trial_group == socket_timeout_20) { | |
162 net::ClientSocketPool::set_unused_idle_socket_timeout( | |
163 base::TimeDelta::FromSeconds(20)); | |
164 } else { | |
165 NOTREACHED(); | |
166 } | |
167 } | |
168 | |
169 // When --use-spdy not set, users will be in A/B test for spdy. | 125 // When --use-spdy not set, users will be in A/B test for spdy. |
170 // group A (npn_with_spdy): this means npn and spdy are enabled. In case server | 126 // group A (npn_with_spdy): this means npn and spdy are enabled. In case server |
171 // supports spdy, browser will use spdy. | 127 // supports spdy, browser will use spdy. |
172 // group B (npn_with_http): this means npn is enabled but spdy won't be used. | 128 // group B (npn_with_http): this means npn is enabled but spdy won't be used. |
173 // Http is still used for all requests. | 129 // Http is still used for all requests. |
174 // default group: no npn or spdy is involved. The "old" non-spdy | 130 // default group: no npn or spdy is involved. The "old" non-spdy |
175 // chrome behavior. | 131 // chrome behavior. |
176 void ChromeBrowserFieldTrials::SpdyFieldTrial() { | 132 void ChromeBrowserFieldTrials::SpdyFieldTrial() { |
177 // Setup SPDY CWND Field trial. | 133 // Setup SPDY CWND Field trial. |
178 const base::FieldTrial::Probability kSpdyCwndDivisor = 100; | 134 const base::FieldTrial::Probability kSpdyCwndDivisor = 100; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 2012, 12, 31, NULL)); | 388 2012, 12, 31, NULL)); |
433 trial->AppendGroup("ControlA", sensitivity_analysis_probability); | 389 trial->AppendGroup("ControlA", sensitivity_analysis_probability); |
434 trial->AppendGroup("ControlB", sensitivity_analysis_probability); | 390 trial->AppendGroup("ControlB", sensitivity_analysis_probability); |
435 trial->AppendGroup("100A", sensitivity_analysis_probability); | 391 trial->AppendGroup("100A", sensitivity_analysis_probability); |
436 trial->AppendGroup("100B", sensitivity_analysis_probability); | 392 trial->AppendGroup("100B", sensitivity_analysis_probability); |
437 trial->AppendGroup("200A", sensitivity_analysis_probability); | 393 trial->AppendGroup("200A", sensitivity_analysis_probability); |
438 trial->AppendGroup("200B", sensitivity_analysis_probability); | 394 trial->AppendGroup("200B", sensitivity_analysis_probability); |
439 trial->AppendGroup("400A", sensitivity_analysis_probability); | 395 trial->AppendGroup("400A", sensitivity_analysis_probability); |
440 trial->AppendGroup("400B", sensitivity_analysis_probability); | 396 trial->AppendGroup("400B", sensitivity_analysis_probability); |
441 } | 397 } |
OLD | NEW |