blob: 434983510535a416e9d19d3caf322299c43a8bd9 [file] [log] [blame] [view]
robliao2ff53322016-09-23 19:28:241# Field Trial Testing Configuration
2
ishermana509c1852017-03-23 21:11:353This directory contains the `fieldtrial_testing_config.json` configuration file,
4which is used to ensure test coverage of active field trials.
robliao2ff53322016-09-23 19:28:245
ishermana509c1852017-03-23 21:11:356For each study, the first available experiment after platform filtering is used
7as the default experiment for Chromium builds. This experiment is also used for
John Abd-El-Malek6cd762c2021-06-15 18:59:378perf bots and various browser tests in the waterfall (e.g. browser_tests,
9components_browsertests, content_browsertests, extensions_browsertests, interactive_ui_tests and
10sync_integration_tests). It is not used by unit test targets.
robliao2ff53322016-09-23 19:28:2411
ishermana509c1852017-03-23 21:11:3512> Note: This configuration applies specifically to Chromium developer builds.
13> Chrome branded / official builds do not use these definitions.
robliao2ff53322016-09-23 19:28:2414
Alexei Svitkine3126867622020-12-02 23:03:0215> Note: Non-developer builds of Chromium (for example, non-Chrome browsers,
16> or Chromium builds provided by Linux distros) should disable the testing
17> config via the GN flag `fieldtrial_testing_like_official_build=true`.
18
robliao2ff53322016-09-23 19:28:2419## Config File Format
20
21```json
22{
23 "StudyName": [
24 {
25 "platforms": [Array of Strings of Valid Platforms for These Experiments],
26 "experiments": [
27 {
28 "//0": "Comment Line 0. Lines 0-9 are supported.",
29 "name": "ExperimentName",
30 "params": {Dictionary of Params},
31 "enable_features": [Array of Strings of Features],
32 "disable_features": [Array of Strings of Features]
33 },
34 ...
35 ]
36 },
37 ...
38 ],
39 ...
40}
41```
42
43The config file is a dictionary at the top level mapping a study name to an
Carlos Knippschilde12741b2019-12-12 01:26:2344array of *study configurations*. The study name in the configuration file
45**must** match the FieldTrial name used in the Chromium client code.
ishermana509c1852017-03-23 21:11:3546
47> Note: Many newer studies do not use study names in the client code at all, and
48> rely on the [Feature List API][FeatureListAPI] instead. Nonetheless, if a
Carlos Knippschilde12741b2019-12-12 01:26:2349> study has a server-side configuration, the study `name` specified here
50> must still match the name specified in the server-side configuration; this is
Joe Mason8c711c202021-07-14 20:04:1451> used to implement consistency checks on the server.
robliao2ff53322016-09-23 19:28:2452
53### Study Configurations
54
ishermana509c1852017-03-23 21:11:3555Each *study configuration* is a dictionary containing `platforms` and
robliao2ff53322016-09-23 19:28:2456`experiments`.
57
ishermana509c1852017-03-23 21:11:3558`platforms` is an array of strings, indicating the targetted platforms. The
Dominik Röttsches1243e0f2019-07-08 18:49:5659strings may be `android`, `android_webview`, `chromeos`, `ios`, `linux`, `mac`,
60or `windows`.
robliao2ff53322016-09-23 19:28:2461
62`experiments` is an array containing the *experiments*.
63
ishermana509c1852017-03-23 21:11:3564The converter uses the `platforms` array to determine which experiment to use
65for the study. The first experiment matching the active platform will be used.
66
67> Note: While `experiments` is defined as an array, currently only the first
68> entry is used*\**. We would love to be able to test all possible study
69> configurations, but don't currently have the buildbot resources to do so.
70> Hence, the current best-practice is to identify which experiment group is the
71> most likely candidate for ultimate launch, and to test that configuration. If
72> there is a server-side configuration for this study, it's typically
73> appropriate to copy/paste one of the experiment definitions into this file.
74>
75> *\**
76> <small>
77> Technically, there is one exception: If there's a forcing_flag group
78> specified in the config, that group will be used if there's a corresponding
79> forcing_flag specified on the command line. You, dear reader, should
80> probably not use this fancy mechanism unless you're <em>quite</em> sure you
81> know what you're doing =)
82> </small>
robliao2ff53322016-09-23 19:28:2483
84### Experiments (Groups)
85Each *experiment* is a dictionary that must contain the `name` key, identifying
Ilya Sherman84225992020-02-28 00:39:2186the experiment group name.
ishermana509c1852017-03-23 21:11:3587
Ilya Sherman84225992020-02-28 00:39:2188> Note: Studies should typically use the [Feature List API][FeatureListAPI]. For
89> such studies, the experiment `name` specified in the testing config is still
90> required (for legacy reasons), but it is ignored. However, the lists of
91> `enable_features`, `disable_features`, and `params` **must** match the server
92> config. This is enforced via server-side Tricorder checks.
93>
94> For old-school studies that do check the actual experiment group name in the
95> client code, the `name` **must** exactly match the client code and the server
96> config.
robliao2ff53322016-09-23 19:28:2497
Jonathan Backer60ac0ec2020-06-17 15:40:5398The remaining keys -- `enable_features`, `disable_features`, `min_os_version`,
99and `params` -- are optional.
robliao2ff53322016-09-23 19:28:24100
robliao2ff53322016-09-23 19:28:24101`enable_features` and `disable_features` indicate which features should be
ishermana509c1852017-03-23 21:11:35102enabled and disabled, respectively, through the
103[Feature List API][FeatureListAPI].
104
Jonathan Backer60ac0ec2020-06-17 15:40:53105`min_os_version` indicates a minimum OS version level (e.g. "10.0.0") to apply
106the experiment. This string is decoded as a `base::Version`. The same version is
107applied to all platforms. If you need different versions for different
108platforms, you will need to use different studies.
109
Ilya Sherman84225992020-02-28 00:39:21110`params` is a dictionary mapping parameter name to parameter value.
111
ishermana509c1852017-03-23 21:11:35112> Reminder: The variations framework does not actually fetch any field trial
113> definitions from the server for Chromium builds, so any feature enabling or
114> disabling must be configured here.
115
116[FeatureListAPI]: https://cs.chromium.org/chromium/src/base/feature_list.h
robliao2ff53322016-09-23 19:28:24117
118#### Comments
119
120Each experiment may have up to 10 lines of comments. The comment key must be of
121the form `//N` where `N` is between 0 and 9.
122
123```json
124{
125 "AStudyWithExperimentComment": [
126 {
Paul Millerad77b7892018-07-11 20:07:43127 "platforms": ["chromeos", "linux", "mac", "windows"],
robliao2ff53322016-09-23 19:28:24128 "experiments": [
129 {
130 "//0": "This is the first comment line.",
131 "//1": "This is the second comment line.",
132 "name": "DesktopExperiment"
133 }
134 ]
135 }
136 ]
137}
138```
139
140### Specifying Different Experiments for Different Platforms
141Simply specify two different study configurations in the study:
142
143```json
144{
145 "DifferentExperimentsPerPlatform": [
146 {
Paul Millerad77b7892018-07-11 20:07:43147 "platforms": ["chromeos", "linux", "mac", "windows"],
robliao2ff53322016-09-23 19:28:24148 "experiments": [{ "name": "DesktopExperiment" }]
149 },
150 {
151 "platforms": ["android", "ios"],
152 "experiments": [{ "name": "MobileExperiment" }]
153 }
154 ]
155}
156```
157
158## Presubmit
159The presubmit tool will ensure that your changes follow the correct ordering and
160format.