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

Side by Side Diff: chrome/browser/omnibox/omnibox_field_trial.cc

Issue 13940005: Clean up the unused Suggest field trial and make GetActiveSuggestFieldTrialHash (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: M+S comments. Created 7 years, 8 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/omnibox/omnibox_field_trial.h" 5 #include "chrome/browser/omnibox/omnibox_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_util.h" 10 #include "base/string_util.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "chrome/common/metrics/metrics_util.h" 13 #include "chrome/common/metrics/metrics_util.h"
14 #include "chrome/common/metrics/variations/variation_ids.h" 14 #include "chrome/common/metrics/variations/variation_ids.h"
15 #include "chrome/common/metrics/variations/variations_util.h" 15 #include "chrome/common/metrics/variations/variations_util.h"
16 16
17 namespace { 17 namespace {
18 18
19 // Field trial names. 19 // Field trial names.
20 const char kDisallowInlineHQPFieldTrialName[] = "OmniboxDisallowInlineHQP"; 20 const char kDisallowInlineHQPFieldTrialName[] = "OmniboxDisallowInlineHQP";
21 // Because we regularly change the name of the suggest field trial in
22 // order to shuffle users among groups, we use the date the current trial
23 // was created as part of the name.
24 const char kSuggestFieldTrialStarted2013Q1Name[] =
25 "OmniboxSearchSuggestTrialStarted2013Q1";
26 const char kHQPNewScoringFieldTrialName[] = "OmniboxHQPNewScoringMax1400"; 21 const char kHQPNewScoringFieldTrialName[] = "OmniboxHQPNewScoringMax1400";
27 const char kHUPCullRedirectsFieldTrialName[] = "OmniboxHUPCullRedirects"; 22 const char kHUPCullRedirectsFieldTrialName[] = "OmniboxHUPCullRedirects";
28 const char kHUPCreateShorterMatchFieldTrialName[] = 23 const char kHUPCreateShorterMatchFieldTrialName[] =
29 "OmniboxHUPCreateShorterMatch"; 24 "OmniboxHUPCreateShorterMatch";
30 const char kHQPReplaceHUPScoringFieldTrialName[] = 25 const char kHQPReplaceHUPScoringFieldTrialName[] =
31 "OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult"; 26 "OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult";
32 27
33 // The autocomplete dynamic field trial name prefix. Each field trial is 28 // The autocomplete dynamic field trial name prefix. Each field trial is
34 // configured dynamically and is retrieved automatically by Chrome during 29 // configured dynamically and is retrieved automatically by Chrome during
35 // the startup. 30 // the startup.
36 const char kAutocompleteDynamicFieldTrialPrefix[] = "AutocompleteDynamicTrial_"; 31 const char kAutocompleteDynamicFieldTrialPrefix[] = "AutocompleteDynamicTrial_";
37 // The maximum number of the autocomplete dynamic field trials (aka layers). 32 // The maximum number of the autocomplete dynamic field trials (aka layers).
38 const int kMaxAutocompleteDynamicFieldTrials = 5; 33 const int kMaxAutocompleteDynamicFieldTrials = 5;
39 34
40 // Field trial experiment probabilities. 35 // Field trial experiment probabilities.
41 36
42 // For inline History Quick Provider field trial, put 0% ( = 0/100 ) 37 // For inline History Quick Provider field trial, put 0% ( = 0/100 )
43 // of the users in the disallow-inline experiment group. 38 // of the users in the disallow-inline experiment group.
44 const base::FieldTrial::Probability kDisallowInlineHQPFieldTrialDivisor = 100; 39 const base::FieldTrial::Probability kDisallowInlineHQPFieldTrialDivisor = 100;
45 const base::FieldTrial::Probability 40 const base::FieldTrial::Probability
46 kDisallowInlineHQPFieldTrialExperimentFraction = 0; 41 kDisallowInlineHQPFieldTrialExperimentFraction = 0;
47 42
48 // For the search suggestion field trial, divide the people in the
49 // trial into 20 equally-sized buckets. The suggest provider backend
50 // will decide what behavior (if any) to change based on the group.
51 const int kSuggestFieldTrialNumberOfGroups = 20;
52
53 // For History Quick Provider new scoring field trial, put 0% ( = 0/100 ) 43 // For History Quick Provider new scoring field trial, put 0% ( = 0/100 )
54 // of the users in the new scoring experiment group. 44 // of the users in the new scoring experiment group.
55 const base::FieldTrial::Probability kHQPNewScoringFieldTrialDivisor = 100; 45 const base::FieldTrial::Probability kHQPNewScoringFieldTrialDivisor = 100;
56 const base::FieldTrial::Probability 46 const base::FieldTrial::Probability
57 kHQPNewScoringFieldTrialExperimentFraction = 0; 47 kHQPNewScoringFieldTrialExperimentFraction = 0;
58 48
59 // For HistoryURL provider cull redirects field trial, put 0% ( = 0/100 ) 49 // For HistoryURL provider cull redirects field trial, put 0% ( = 0/100 )
60 // of the users in the don't-cull-redirects experiment group. 50 // of the users in the don't-cull-redirects experiment group.
61 // TODO(mpearson): Remove this field trial and the code it uses once I'm 51 // TODO(mpearson): Remove this field trial and the code it uses once I'm
62 // sure it's no longer needed. 52 // sure it's no longer needed.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 // get ingrained, users tend to learn that a particular suggestion is 123 // get ingrained, users tend to learn that a particular suggestion is
134 // at a particular spot in the drop-down--we're going to make these 124 // at a particular spot in the drop-down--we're going to make these
135 // field trials sticky. We want users to stay in them once assigned 125 // field trials sticky. We want users to stay in them once assigned
136 // so they have a better experience and also so we don't get weird 126 // so they have a better experience and also so we don't get weird
137 // effects as omnibox ranking keeps changing and users learn they can't 127 // effects as omnibox ranking keeps changing and users learn they can't
138 // trust the omnibox. 128 // trust the omnibox.
139 trial->UseOneTimeRandomization(); 129 trial->UseOneTimeRandomization();
140 disallow_inline_hqp_experiment_group = trial->AppendGroup("DisallowInline", 130 disallow_inline_hqp_experiment_group = trial->AppendGroup("DisallowInline",
141 kDisallowInlineHQPFieldTrialExperimentFraction); 131 kDisallowInlineHQPFieldTrialExperimentFraction);
142 132
143 // Create the suggest field trial.
144 // Make it expire on September 1, 2013.
145 trial = base::FieldTrialList::FactoryGetFieldTrial(
146 kSuggestFieldTrialStarted2013Q1Name, kSuggestFieldTrialNumberOfGroups,
147 "0", 2013, 9, 1, NULL);
148 trial->UseOneTimeRandomization();
149
150 // Mark this group in suggest requests to Google.
151 chrome_variations::AssociateGoogleVariationID(
152 chrome_variations::GOOGLE_WEB_PROPERTIES,
153 kSuggestFieldTrialStarted2013Q1Name, "0",
154 chrome_variations::SUGGEST_TRIAL_STARTED_2013_Q1_ID_MIN);
155 DCHECK_EQ(kSuggestFieldTrialNumberOfGroups,
156 chrome_variations::SUGGEST_TRIAL_STARTED_2013_Q1_ID_MAX -
157 chrome_variations::SUGGEST_TRIAL_STARTED_2013_Q1_ID_MIN + 1);
158
159 // We've already created one group; now just need to create
160 // kSuggestFieldTrialNumGroups - 1 more. Mark these groups in
161 // suggest requests to Google.
162 for (int i = 1; i < kSuggestFieldTrialNumberOfGroups; i++) {
163 const std::string group_name = base::IntToString(i);
164 trial->AppendGroup(group_name, 1);
165 chrome_variations::AssociateGoogleVariationID(
166 chrome_variations::GOOGLE_WEB_PROPERTIES,
167 kSuggestFieldTrialStarted2013Q1Name, group_name,
168 static_cast<chrome_variations::VariationID>(
169 chrome_variations::SUGGEST_TRIAL_STARTED_2013_Q1_ID_MIN + i));
170 }
171
172 // Make sure that we participate in the suggest experiment by calling group()
173 // on the newly created field trial. This is necessary to activate the field
174 // trial group as there are no more references to it within the Chrome code.
175 trial->group();
176
177 // Create inline History Quick Provider new scoring field trial. 133 // Create inline History Quick Provider new scoring field trial.
178 // Make it expire on April 14, 2013. 134 // Make it expire on April 14, 2013.
179 trial = base::FieldTrialList::FactoryGetFieldTrial( 135 trial = base::FieldTrialList::FactoryGetFieldTrial(
180 kHQPNewScoringFieldTrialName, kHQPNewScoringFieldTrialDivisor, 136 kHQPNewScoringFieldTrialName, kHQPNewScoringFieldTrialDivisor,
181 "Standard", 2013, 4, 14, NULL); 137 "Standard", 2013, 4, 14, NULL);
182 trial->UseOneTimeRandomization(); 138 trial->UseOneTimeRandomization();
183 hqp_new_scoring_experiment_group = trial->AppendGroup("NewScoring", 139 hqp_new_scoring_experiment_group = trial->AppendGroup("NewScoring",
184 kHQPNewScoringFieldTrialExperimentFraction); 140 kHQPNewScoringFieldTrialExperimentFraction);
185 141
186 // Create the HistoryURL provider cull redirects field trial. 142 // Create the HistoryURL provider cull redirects field trial.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 bool OmniboxFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() { 215 bool OmniboxFieldTrial::InDisallowInlineHQPFieldTrialExperimentGroup() {
260 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName)) 216 if (!base::FieldTrialList::TrialExists(kDisallowInlineHQPFieldTrialName))
261 return false; 217 return false;
262 218
263 // Return true if we're in the experiment group. 219 // Return true if we're in the experiment group.
264 const int group = base::FieldTrialList::FindValue( 220 const int group = base::FieldTrialList::FindValue(
265 kDisallowInlineHQPFieldTrialName); 221 kDisallowInlineHQPFieldTrialName);
266 return group == disallow_inline_hqp_experiment_group; 222 return group == disallow_inline_hqp_experiment_group;
267 } 223 }
268 224
269 bool OmniboxFieldTrial::GetActiveSuggestFieldTrialHash( 225 void OmniboxFieldTrial::GetActiveSuggestFieldTrialHashes(
270 uint32* field_trial_hash) { 226 std::vector<uint32>* field_trial_hashes) {
271 if (!base::FieldTrialList::TrialExists(kSuggestFieldTrialStarted2013Q1Name)) 227 field_trial_hashes->clear();
272 return false; 228 for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) {
273 229 const std::string& trial_name = DynamicFieldTrialName(i);
274 *field_trial_hash = metrics::HashName(kSuggestFieldTrialStarted2013Q1Name); 230 if (base::FieldTrialList::TrialExists(trial_name))
275 return true; 231 field_trial_hashes->push_back(metrics::HashName(trial_name));
232 }
276 } 233 }
277 234
278 bool OmniboxFieldTrial::InHQPNewScoringFieldTrial() { 235 bool OmniboxFieldTrial::InHQPNewScoringFieldTrial() {
279 return base::FieldTrialList::TrialExists(kHQPNewScoringFieldTrialName); 236 return base::FieldTrialList::TrialExists(kHQPNewScoringFieldTrialName);
280 } 237 }
281 238
282 bool OmniboxFieldTrial::InHQPNewScoringFieldTrialExperimentGroup() { 239 bool OmniboxFieldTrial::InHQPNewScoringFieldTrialExperimentGroup() {
283 if (!InHQPNewScoringFieldTrial()) 240 if (!InHQPNewScoringFieldTrial())
284 return false; 241 return false;
285 242
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 281
325 bool OmniboxFieldTrial::InHQPReplaceHUPScoringFieldTrialExperimentGroup() { 282 bool OmniboxFieldTrial::InHQPReplaceHUPScoringFieldTrialExperimentGroup() {
326 if (!InHQPReplaceHUPScoringFieldTrial()) 283 if (!InHQPReplaceHUPScoringFieldTrial())
327 return false; 284 return false;
328 285
329 // Return true if we're in the experiment group. 286 // Return true if we're in the experiment group.
330 const int group = base::FieldTrialList::FindValue( 287 const int group = base::FieldTrialList::FindValue(
331 kHQPReplaceHUPScoringFieldTrialName); 288 kHQPReplaceHUPScoringFieldTrialName);
332 return group == hqp_replace_hup_scoring_experiment_group; 289 return group == hqp_replace_hup_scoring_experiment_group;
333 } 290 }
OLDNEW
« no previous file with comments | « chrome/browser/omnibox/omnibox_field_trial.h ('k') | chrome/common/metrics/variations/variation_ids.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698