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

Side by Side Diff: chrome/browser/autocomplete/autocomplete_field_trial.cc

Issue 12220004: Introduce dynamic ablation of AutocompleteProviders using AC dynamic trials. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 7 years, 10 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/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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // For the field trial that allows HistoryQuick provider to use the 98 // For the field trial that allows HistoryQuick provider to use the
99 // cursor position, put 25% ( = 25/100 ) of the users in the experiment group. 99 // cursor position, put 25% ( = 25/100 ) of the users in the experiment group.
100 const base::FieldTrial::Probability 100 const base::FieldTrial::Probability
101 kHQPUseCursorPositionFieldTrialDivisor = 100; 101 kHQPUseCursorPositionFieldTrialDivisor = 100;
102 const base::FieldTrial::Probability 102 const base::FieldTrial::Probability
103 kHQPUseCursorPositionFieldTrialExperimentFraction = 25; 103 kHQPUseCursorPositionFieldTrialExperimentFraction = 25;
104 104
105 105
106 // Field trial IDs. 106 // Field trial IDs.
107 // Though they are not literally "const", they are set only once, in 107 // Though they are not literally "const", they are set only once, in
108 // Activate() below. 108 // ActivateStaticTrials() below.
109 109
110 // Whether the static field trials have been initialized by 110 // Whether the static field trials have been initialized by
111 // ActivateStaticTrials method. 111 // ActivateStaticTrials() method.
112 bool static_field_trials_initialized = false; 112 bool static_field_trials_initialized = false;
113 113
114 // Field trial ID for the disallow-inline History Quick Provider 114 // Field trial ID for the disallow-inline History Quick Provider
115 // experiment group. 115 // experiment group.
116 int disallow_inline_hqp_experiment_group = 0; 116 int disallow_inline_hqp_experiment_group = 0;
117 117
118 // Field trial ID for the History Quick Provider new scoring experiment group. 118 // Field trial ID for the History Quick Provider new scoring experiment group.
119 int hqp_new_scoring_experiment_group = 0; 119 int hqp_new_scoring_experiment_group = 0;
120 120
121 // Field trial ID for the HistoryURL provider cull redirects experiment group. 121 // Field trial ID for the HistoryURL provider cull redirects experiment group.
122 int hup_dont_cull_redirects_experiment_group = 0; 122 int hup_dont_cull_redirects_experiment_group = 0;
123 123
124 // Field trial ID for the HistoryURL provider create shorter match 124 // Field trial ID for the HistoryURL provider create shorter match
125 // experiment group. 125 // experiment group.
126 int hup_dont_create_shorter_match_experiment_group = 0; 126 int hup_dont_create_shorter_match_experiment_group = 0;
127 127
128 // Field trial ID for the HistoryQuick provider replaces HistoryURL provider 128 // Field trial ID for the HistoryQuick provider replaces HistoryURL provider
129 // experiment group. 129 // experiment group.
130 int hqp_replace_hup_scoring_experiment_group = 0; 130 int hqp_replace_hup_scoring_experiment_group = 0;
131 131
132 // Field trial ID for the HistoryQuick provider only count matches at 132 // Field trial ID for the HistoryQuick provider only count matches at
133 // word boundaries experiment group. 133 // word boundaries experiment group.
134 int hqp_only_count_matches_at_word_boundaries_experiment_group = 0; 134 int hqp_only_count_matches_at_word_boundaries_experiment_group = 0;
135 135
136 // Field trial ID for the HistoryQuick provider use cursor position 136 // Field trial ID for the HistoryQuick provider use cursor position
137 // experiment group. 137 // experiment group.
138 int hqp_use_cursor_position_experiment_group = 0; 138 int hqp_use_cursor_position_experiment_group = 0;
139 139
140 // Concatenates the autocomplete dynamic field trial prefix with a field trial
141 // ID to form a complete autocomplete field trial name.
142 std::string DynamicFieldTrialName(int id) {
143 return base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, id);
140 } 144 }
141 145
146 } // namespace
147
142 148
143 void AutocompleteFieldTrial::ActivateStaticTrials() { 149 void AutocompleteFieldTrial::ActivateStaticTrials() {
144 DCHECK(!static_field_trials_initialized); 150 DCHECK(!static_field_trials_initialized);
145 151
146 // Create inline History Quick Provider field trial. 152 // Create inline History Quick Provider field trial.
147 // Make it expire on November 8, 2012. 153 // Make it expire on November 8, 2012.
148 scoped_refptr<base::FieldTrial> trial( 154 scoped_refptr<base::FieldTrial> trial(
149 base::FieldTrialList::FactoryGetFieldTrial( 155 base::FieldTrialList::FactoryGetFieldTrial(
150 kDisallowInlineHQPFieldTrialName, kDisallowInlineHQPFieldTrialDivisor, 156 kDisallowInlineHQPFieldTrialName, kDisallowInlineHQPFieldTrialDivisor,
151 "Standard", 2012, 11, 8, NULL)); 157 "Standard", 2012, 11, 8, NULL));
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 "Standard", 2013, 8, 23, NULL); 260 "Standard", 2013, 8, 23, NULL);
255 trial->UseOneTimeRandomization(); 261 trial->UseOneTimeRandomization();
256 hqp_use_cursor_position_experiment_group = 262 hqp_use_cursor_position_experiment_group =
257 trial->AppendGroup("HQPUseCursorPosition", 263 trial->AppendGroup("HQPUseCursorPosition",
258 kHQPUseCursorPositionFieldTrialExperimentFraction); 264 kHQPUseCursorPositionFieldTrialExperimentFraction);
259 265
260 static_field_trials_initialized = true; 266 static_field_trials_initialized = true;
261 } 267 }
262 268
263 void AutocompleteFieldTrial::ActivateDynamicTrials() { 269 void AutocompleteFieldTrial::ActivateDynamicTrials() {
264 // Initialize all autocomplete dynamic field trials. 270 // Initialize all autocomplete dynamic field trials. This method may be
271 // called multiple times.
272 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i)
273 base::FieldTrialList::FindValue(DynamicFieldTrialName(i));
274 }
275
276 int AutocompleteFieldTrial::GetDisabledProviderTypes() {
277 // Make sure that Autocomplete dynamic field trials are activated. It's OK to
278 // call this method multiple times.
279 ActivateDynamicTrials();
280
281 // We assume that each group may contain a substring
282 // "DisabledProviders_<mask>" where "mask" is a bitmap of disabled provider
283 // types (AutocompleteProvider::Type).
284 int provider_types = 0;
265 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) { 285 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) {
266 base::FieldTrialList::FindValue( 286 std::string group_name = base::FieldTrialList::FindFullName(
267 base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, i)); 287 DynamicFieldTrialName(i));
288 if (!group_name.empty()) {
289 const char kDisabledProviders[] = "DisabledProviders_";
290 const size_t pos = group_name.find(kDisabledProviders);
291 if (pos == std::string::npos)
292 continue;
293 int types = 0;
294 // It's OK to ignore the result, because we don't care about perfect
295 // conversions.
296 base::StringToInt(base::StringPiece(
297 group_name.substr(pos + strlen(kDisabledProviders))), &types);
298 if (types == 0)
299 LOG(WARNING) << "Expecting a non-zero bitmap; group = " << group_name;
300 provider_types |= types;
301 }
268 } 302 }
303 return provider_types;
269 } 304 }
270 305
271 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() { 306 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() {
272 return base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName); 307 return base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName);
273 } 308 }
274 309
275 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() { 310 bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() {
276 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName)) 311 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName))
277 return false; 312 return false;
278 313
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 bool AutocompleteFieldTrial:: 407 bool AutocompleteFieldTrial::
373 InHQPUseCursorPositionFieldTrialExperimentGroup() { 408 InHQPUseCursorPositionFieldTrialExperimentGroup() {
374 if (!InHQPUseCursorPositionFieldTrial()) 409 if (!InHQPUseCursorPositionFieldTrial())
375 return false; 410 return false;
376 411
377 // Return true if we're in the experiment group. 412 // Return true if we're in the experiment group.
378 const int group = base::FieldTrialList::FindValue( 413 const int group = base::FieldTrialList::FindValue(
379 kHQPUseCursorPositionFieldTrialName); 414 kHQPUseCursorPositionFieldTrialName);
380 return group == hqp_use_cursor_position_experiment_group; 415 return group == hqp_use_cursor_position_experiment_group;
381 } 416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698