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

Side by Side Diff: chrome/common/variations/variations_util.cc

Issue 2319293006: Use Study and Experiment Terminology on the C++ Side For Fieldtrials (Closed)
Patch Set: Created 4 years, 3 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/common/variations/variations_util.h" 5 #include "chrome/common/variations/variations_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/feature_list.h" 12 #include "base/feature_list.h"
13 #include "base/metrics/field_trial.h" 13 #include "base/metrics/field_trial.h"
14 #include "base/strings/string_split.h" 14 #include "base/strings/string_split.h"
15 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
16 #include "chrome/common/variations/fieldtrial_testing_config.h" 16 #include "chrome/common/variations/fieldtrial_testing_config.h"
17 #include "components/variations/variations_associated_data.h" 17 #include "components/variations/variations_associated_data.h"
18 #include "net/base/escape.h" 18 #include "net/base/escape.h"
19 19
20 namespace chrome_variations { 20 namespace chrome_variations {
21 21
22 namespace { 22 namespace {
23 23
24 std::string EscapeValue(const std::string& value) { 24 std::string EscapeValue(const std::string& value) {
25 return net::UnescapeURLComponent( 25 return net::UnescapeURLComponent(
26 value, net::UnescapeRule::PATH_SEPARATORS | 26 value, net::UnescapeRule::PATH_SEPARATORS |
27 net::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS); 27 net::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS);
28 } 28 }
29 29
30 void AssociateParamsFromGroup(const std::string& trial_name, 30 void AssociateParamsFromExperiment(
31 const FieldTrialTestingGroup& group, 31 const std::string& study_name,
32 base::FeatureList* feature_list) { 32 const FieldTrialTestingExperiment& experiment,
33 if (group.params_size != 0) { 33 base::FeatureList* feature_list) {
34 if (experiment.params_size != 0) {
34 std::map<std::string, std::string> params; 35 std::map<std::string, std::string> params;
35 for (size_t i = 0; i < group.params_size; ++i) { 36 for (size_t i = 0; i < experiment.params_size; ++i) {
36 const FieldTrialTestingGroupParams& param = group.params[i]; 37 const FieldTrialTestingExperimentParams& param = experiment.params[i];
37 params[param.key] = param.value; 38 params[param.key] = param.value;
38 } 39 }
39 variations::AssociateVariationParams(trial_name, group.name, params); 40 variations::AssociateVariationParams(study_name, experiment.name, params);
40 } 41 }
41 base::FieldTrial* trial = 42 base::FieldTrial* trial =
42 base::FieldTrialList::CreateFieldTrial(trial_name, group.name); 43 base::FieldTrialList::CreateFieldTrial(study_name, experiment.name);
43 44
44 if (!trial) { 45 if (!trial) {
45 DLOG(WARNING) << "Field trial config trial skipped: " << trial_name 46 DLOG(WARNING) << "Field trial config study skipped: " << study_name
46 << "." << group.name 47 << "." << experiment.name
47 << " (it is overridden from chrome://flags)"; 48 << " (it is overridden from chrome://flags)";
48 return; 49 return;
49 } 50 }
50 51
51 for (size_t i = 0; i < group.enable_features_size; ++i) { 52 for (size_t i = 0; i < experiment.enable_features_size; ++i) {
52 feature_list->RegisterFieldTrialOverride( 53 feature_list->RegisterFieldTrialOverride(
53 group.enable_features[i], base::FeatureList::OVERRIDE_ENABLE_FEATURE, 54 experiment.enable_features[i],
54 trial); 55 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial);
55 } 56 }
56 for (size_t i = 0; i < group.disable_features_size; ++i) { 57 for (size_t i = 0; i < experiment.disable_features_size; ++i) {
57 feature_list->RegisterFieldTrialOverride( 58 feature_list->RegisterFieldTrialOverride(
58 group.disable_features[i], 59 experiment.disable_features[i],
59 base::FeatureList::OVERRIDE_DISABLE_FEATURE, trial); 60 base::FeatureList::OVERRIDE_DISABLE_FEATURE, trial);
60 } 61 }
61 } 62 }
62 63
63 } // namespace 64 } // namespace
64 65
65 bool AssociateParamsFromString(const std::string& varations_string) { 66 bool AssociateParamsFromString(const std::string& varations_string) {
66 // Format: Trial1.Group1:k1/v1/k2/v2,Trial2.Group2:k1/v1/k2/v2 67 // Format: Trial1.Group1:k1/v1/k2/v2,Trial2.Group2:k1/v1/k2/v2
67 std::set<std::pair<std::string, std::string>> trial_groups; 68 std::set<std::pair<std::string, std::string>> trial_groups;
68 for (const base::StringPiece& experiment_group : base::SplitStringPiece( 69 for (const base::StringPiece& experiment_group : base::SplitStringPiece(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 std::string value = EscapeValue(key_values[i + 1]); 105 std::string value = EscapeValue(key_values[i + 1]);
105 params[key] = value; 106 params[key] = value;
106 } 107 }
107 variations::AssociateVariationParams(trial, group, params); 108 variations::AssociateVariationParams(trial, group, params);
108 } 109 }
109 return true; 110 return true;
110 } 111 }
111 112
112 void AssociateParamsFromFieldTrialConfig(const FieldTrialTestingConfig& config, 113 void AssociateParamsFromFieldTrialConfig(const FieldTrialTestingConfig& config,
113 base::FeatureList* feature_list) { 114 base::FeatureList* feature_list) {
114 for (size_t i = 0; i < config.trials_size; ++i) { 115 for (size_t i = 0; i < config.studies_size; ++i) {
115 const FieldTrialTestingTrial& trial = config.trials[i]; 116 const FieldTrialTestingStudy& study = config.studies[i];
116 if (trial.groups_size > 0) { 117 if (study.experiments_size > 0) {
117 AssociateParamsFromGroup(trial.name, trial.groups[0], feature_list); 118 AssociateParamsFromExperiment(
119 study.name, study.experiments[0], feature_list);
118 } else { 120 } else {
119 DLOG(ERROR) << "Unexpected empty trial: " << trial.name; 121 DLOG(ERROR) << "Unexpected empty study: " << study.name;
120 } 122 }
121 } 123 }
122 } 124 }
123 125
124 void AssociateDefaultFieldTrialConfig(base::FeatureList* feature_list) { 126 void AssociateDefaultFieldTrialConfig(base::FeatureList* feature_list) {
125 AssociateParamsFromFieldTrialConfig(kFieldTrialConfig, feature_list); 127 AssociateParamsFromFieldTrialConfig(kFieldTrialConfig, feature_list);
126 } 128 }
127 129
128 } // namespace chrome_variations 130 } // namespace chrome_variations
OLDNEW
« no previous file with comments | « chrome/common/variations/fieldtrial_testing_config_schema.json ('k') | chrome/common/variations/variations_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698