Chromium Code Reviews| 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/autocomplete/autocomplete_field_trial.h" | 5 #include "chrome/browser/autocomplete/autocomplete_field_trial.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 89 // For the field trial that ignores all mid-term matches in HistoryQuick | 89 // For the field trial that ignores all mid-term matches in HistoryQuick |
| 90 // provider, put 0% ( = 0/100 ) of the users in the experiment group. | 90 // provider, put 0% ( = 0/100 ) of the users in the experiment group. |
| 91 const base::FieldTrial::Probability | 91 const base::FieldTrial::Probability |
| 92 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialDivisor = 100; | 92 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialDivisor = 100; |
| 93 const base::FieldTrial::Probability | 93 const base::FieldTrial::Probability |
| 94 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentFraction = 0; | 94 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentFraction = 0; |
| 95 | 95 |
| 96 | 96 |
| 97 // Field trial IDs. | 97 // Field trial IDs. |
| 98 // Though they are not literally "const", they are set only once, in | 98 // Though they are not literally "const", they are set only once, in |
| 99 // Activate() below. | 99 // ActivateStaticTrials() below. |
| 100 | 100 |
| 101 // Whether the static field trials have been initialized by | 101 // Whether the static field trials have been initialized by |
| 102 // ActivateStaticTrials method. | 102 // ActivateStaticTrials() method. |
| 103 bool static_field_trials_initialized = false; | 103 bool static_field_trials_initialized = false; |
| 104 | 104 |
| 105 // Whether the dynamic field trials have been initialized by | |
| 106 // ActivateDynamicTrials() method. | |
| 107 bool dynamic_field_trials_initialized = false; | |
| 108 | |
| 105 // Field trial ID for the disallow-inline History Quick Provider | 109 // Field trial ID for the disallow-inline History Quick Provider |
| 106 // experiment group. | 110 // experiment group. |
| 107 int disallow_inline_hqp_experiment_group = 0; | 111 int disallow_inline_hqp_experiment_group = 0; |
| 108 | 112 |
| 109 // Field trial ID for the History Quick Provider new scoring experiment group. | 113 // Field trial ID for the History Quick Provider new scoring experiment group. |
| 110 int hqp_new_scoring_experiment_group = 0; | 114 int hqp_new_scoring_experiment_group = 0; |
| 111 | 115 |
| 112 // Field trial ID for the HistoryURL provider cull redirects experiment group. | 116 // Field trial ID for the HistoryURL provider cull redirects experiment group. |
| 113 int hup_dont_cull_redirects_experiment_group = 0; | 117 int hup_dont_cull_redirects_experiment_group = 0; |
| 114 | 118 |
| 115 // Field trial ID for the HistoryURL provider create shorter match | 119 // Field trial ID for the HistoryURL provider create shorter match |
| 116 // experiment group. | 120 // experiment group. |
| 117 int hup_dont_create_shorter_match_experiment_group = 0; | 121 int hup_dont_create_shorter_match_experiment_group = 0; |
| 118 | 122 |
| 119 // Field trial ID for the HistoryQuick provider replaces HistoryURL provider | 123 // Field trial ID for the HistoryQuick provider replaces HistoryURL provider |
| 120 // experiment group. | 124 // experiment group. |
| 121 int hqp_replace_hup_scoring_experiment_group = 0; | 125 int hqp_replace_hup_scoring_experiment_group = 0; |
| 122 | 126 |
| 123 // Field trial ID for the HistoryQuick provider only count matches at | 127 // Field trial ID for the HistoryQuick provider only count matches at |
| 124 // word boundaries experiment group. | 128 // word boundaries experiment group. |
| 125 int hqp_only_count_matches_at_word_boundaries_experiment_group = 0; | 129 int hqp_only_count_matches_at_word_boundaries_experiment_group = 0; |
| 126 | 130 |
| 131 std::string DynamicFieldTrialName(int id) { | |
|
Mark P
2013/02/11 21:13:34
please comment about expected use.
Bart N.
2013/02/11 21:42:12
Done.
| |
| 132 return base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, id); | |
| 127 } | 133 } |
| 128 | 134 |
| 135 } // namespace | |
| 136 | |
| 129 | 137 |
| 130 void AutocompleteFieldTrial::ActivateStaticTrials() { | 138 void AutocompleteFieldTrial::ActivateStaticTrials() { |
| 131 DCHECK(!static_field_trials_initialized); | 139 DCHECK(!static_field_trials_initialized); |
| 132 | 140 |
| 133 // Create inline History Quick Provider field trial. | 141 // Create inline History Quick Provider field trial. |
| 134 // Make it expire on November 8, 2012. | 142 // Make it expire on November 8, 2012. |
| 135 scoped_refptr<base::FieldTrial> trial( | 143 scoped_refptr<base::FieldTrial> trial( |
| 136 base::FieldTrialList::FactoryGetFieldTrial( | 144 base::FieldTrialList::FactoryGetFieldTrial( |
| 137 kDisallowInlineHQPFieldTrialName, kDisallowInlineHQPFieldTrialDivisor, | 145 kDisallowInlineHQPFieldTrialName, kDisallowInlineHQPFieldTrialDivisor, |
| 138 "Standard", 2012, 11, 8, NULL)); | 146 "Standard", 2012, 11, 8, NULL)); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 "Standard", 2013, 6, 23, NULL); | 238 "Standard", 2013, 6, 23, NULL); |
| 231 trial->UseOneTimeRandomization(); | 239 trial->UseOneTimeRandomization(); |
| 232 hqp_only_count_matches_at_word_boundaries_experiment_group = | 240 hqp_only_count_matches_at_word_boundaries_experiment_group = |
| 233 trial->AppendGroup("HQPOnlyCountMatchesAtWordBoundaries", | 241 trial->AppendGroup("HQPOnlyCountMatchesAtWordBoundaries", |
| 234 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentFraction); | 242 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentFraction); |
| 235 | 243 |
| 236 static_field_trials_initialized = true; | 244 static_field_trials_initialized = true; |
| 237 } | 245 } |
| 238 | 246 |
| 239 void AutocompleteFieldTrial::ActivateDynamicTrials() { | 247 void AutocompleteFieldTrial::ActivateDynamicTrials() { |
| 240 // Initialize all autocomplete dynamic field trials. | 248 // Initialize all autocomplete dynamic field trials. This method may be |
| 249 // called multiple times. | |
| 250 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) | |
| 251 base::FieldTrialList::FindValue(DynamicFieldTrialName(i)); | |
| 252 | |
| 253 dynamic_field_trials_initialized = true; | |
| 254 } | |
| 255 | |
| 256 int AutocompleteFieldTrial::GetDisabledProviderTypes() { | |
| 257 DCHECK(dynamic_field_trials_initialized); | |
| 258 | |
| 259 // We assume that each group may contain a substring | |
| 260 // "DisabledProviders_<mask>" where "mask" is a bitmap of disabled provider | |
| 261 // types (AutocompleteProvider::Type). | |
| 262 int provider_types = 0; | |
| 241 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) { | 263 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) { |
| 242 base::FieldTrialList::FindValue( | 264 std::string group_name = base::FieldTrialList::FindFullName( |
| 243 base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, i)); | 265 DynamicFieldTrialName(i)); |
| 266 if (!group_name.empty()) { | |
| 267 const char kDisabledProviders[] = "DisabledProviders_"; | |
| 268 size_t pos = group_name.find(kDisabledProviders); | |
|
Mark P
2013/02/11 21:13:34
const
Bart N.
2013/02/11 21:42:12
Done.
| |
| 269 if (pos == std::string::npos) | |
| 270 continue; | |
| 271 int types = 0; | |
|
Mark P
2013/02/11 21:13:34
do you expect pos to ever not be 0?
perhaps dcheck
Bart N.
2013/02/11 21:42:12
I don't think it's a good idea to DCHECK against s
Mark P
2013/02/11 22:04:18
I don't see a warning message. Can you please add
Bart N.
2013/02/12 01:18:19
As discussed offline, I made now a stronger requir
| |
| 272 base::StringToInt(base::StringPiece( | |
|
Mark P
2013/02/11 21:13:34
consider dchecking the return type of this
Bart N.
2013/02/11 21:42:12
Not really; clarified in the comment.
Mark P
2013/02/11 22:04:18
You really do want perfect conversions. Don't try
Bart N.
2013/02/12 01:18:19
As discussed offline, it was intended. However, I
| |
| 273 group_name.substr(pos + strlen(kDisabledProviders))), &types); | |
| 274 provider_types |= types; | |
| 275 } | |
| 244 } | 276 } |
| 277 return provider_types; | |
| 245 } | 278 } |
| 246 | 279 |
| 247 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() { | 280 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() { |
| 248 return base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName); | 281 return base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName); |
| 249 } | 282 } |
| 250 | 283 |
| 251 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() { | 284 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() { |
| 252 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName)) | 285 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName)) |
| 253 return false; | 286 return false; |
| 254 | 287 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 333 bool AutocompleteFieldTrial:: | 366 bool AutocompleteFieldTrial:: |
| 334 InHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentGroup() { | 367 InHQPOnlyCountMatchesAtWordBoundariesFieldTrialExperimentGroup() { |
| 335 if (!InHQPOnlyCountMatchesAtWordBoundariesFieldTrial()) | 368 if (!InHQPOnlyCountMatchesAtWordBoundariesFieldTrial()) |
| 336 return false; | 369 return false; |
| 337 | 370 |
| 338 // Return true if we're in the experiment group. | 371 // Return true if we're in the experiment group. |
| 339 const int group = base::FieldTrialList::FindValue( | 372 const int group = base::FieldTrialList::FindValue( |
| 340 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialName); | 373 kHQPOnlyCountMatchesAtWordBoundariesFieldTrialName); |
| 341 return group == hqp_only_count_matches_at_word_boundaries_experiment_group; | 374 return group == hqp_only_count_matches_at_word_boundaries_experiment_group; |
| 342 } | 375 } |
| OLD | NEW |