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

Unified Diff: tools/variations/fieldtrial_to_struct.py

Issue 2296493002: Merge all Field Trial Testing Configuration Together (Closed)
Patch Set: Rebase to e3a7b31 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 side-by-side diff with in-line comments
Download patch
Index: tools/variations/fieldtrial_to_struct.py
diff --git a/tools/variations/fieldtrial_to_struct.py b/tools/variations/fieldtrial_to_struct.py
index 946ca61cab2c34c3d127c2662dffda9095292047..f583c718cfaadf87b50cb9283e4ac0e668cfdac7 100755
--- a/tools/variations/fieldtrial_to_struct.py
+++ b/tools/variations/fieldtrial_to_struct.py
@@ -3,6 +3,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import itertools
import json
import os.path
import sys
@@ -28,38 +29,53 @@ def _Load(filename):
result = json.loads(json_comment_eater.Nom(handle.read()))
return result
-def _LoadFieldTrialConfig(filename):
+def _LoadFieldTrialConfig(filename, platform):
"""Loads a field trial config JSON and converts it into a format that can be
used by json_to_struct.
"""
- return _FieldTrialConfigToDescription(_Load(filename))
+ return _FieldTrialConfigToDescription(_Load(filename), platform)
-def _CreateGroup(group_data):
- group = {'name': group_data['group_name']}
- params_data = group_data.get('params')
+def _CreateExperiment(experiment_data):
+ experiment = {'name': experiment_data['name']}
+ params_data = experiment_data.get('params')
if (params_data):
- group['params'] = [{'key': param, 'value': params_data[param]}
+ experiment['params'] = [{'key': param, 'value': params_data[param]}
for param in sorted(params_data.keys())];
- enable_features_data = group_data.get('enable_features')
+ enable_features_data = experiment_data.get('enable_features')
if enable_features_data:
- group['enable_features'] = enable_features_data
- disable_features_data = group_data.get('disable_features')
+ experiment['enable_features'] = enable_features_data
+ disable_features_data = experiment_data.get('disable_features')
if disable_features_data:
- group['disable_features'] = disable_features_data
- return group
+ experiment['disable_features'] = disable_features_data
+ return experiment
-def _CreateTrial(trial_name, groups):
+def _CreateTrial(study_name, experiment_configs, platform):
+ """Returns the applicable experiments for |study_name| and |platform|. This
+ iterates through all of the experiment_configs for |study_name| and picks out
+ the applicable experiments based off of the valid platforms.
+ """
+ platform_experiment_lists = [
+ config['experiments'] for config in experiment_configs
+ if platform in config['platforms']]
+ platform_experiments = list(itertools.chain.from_iterable(
+ platform_experiment_lists))
return {
- 'name': trial_name,
- 'groups': [_CreateGroup(group) for group in groups],
+ 'name': study_name,
+ 'groups': [_CreateExperiment(experiment)
+ for experiment in platform_experiments],
}
-def _FieldTrialConfigToDescription(config):
+def _GenerateTrials(config, platform):
+ for study_name in sorted(config.keys()):
+ study = _CreateTrial(study_name, config[study_name], platform)
+ if study['groups']:
Alexei Svitkine (slow) 2016/09/19 16:59:39 Can you add a comment above this that explains thi
robliao 2016/09/19 17:16:26 Done.
+ yield study
+
+def _FieldTrialConfigToDescription(config, platform):
return {
'elements': {
'kFieldTrialConfig': {
- 'trials': [_CreateTrial(trial_name, config[trial_name])
- for trial_name in sorted(config.keys())]
+ 'trials': [study for study in _GenerateTrials(config, platform)]
}
}
}
@@ -67,13 +83,15 @@ def _FieldTrialConfigToDescription(config):
def main(arguments):
parser = optparse.OptionParser(
description='Generates a struct from a JSON description.',
- usage='usage: %prog [option] -s schema description')
+ usage='usage: %prog [option] -s schema -p platform description')
parser.add_option('-b', '--destbase',
help='base directory of generated files.')
parser.add_option('-d', '--destdir',
help='directory to output generated files, relative to destbase.')
parser.add_option('-n', '--namespace',
help='C++ namespace for generated files. e.g search_providers.')
+ parser.add_option('-p', '--platform',
+ help='target platform for the field trial, mandatory.')
parser.add_option('-s', '--schema', help='path to the schema file, '
'mandatory.')
parser.add_option('-o', '--output', help='output filename, '
@@ -85,6 +103,14 @@ def main(arguments):
if not opts.schema:
parser.error('You must specify a --schema.')
+ if not opts.platform:
+ parser.error('You must specify a --platform.')
+
+ supported_platforms = ['android', 'chromeos', 'ios', 'linux', 'mac', 'win']
+ if opts.platform not in supported_platforms:
+ parser.error('\'%s\' is an unknown platform. Supported platforms: %s' %
+ (opts.platform, supported_platforms))
+
description_filename = os.path.normpath(args[0])
shortroot = opts.output
if opts.destdir:
@@ -98,7 +124,7 @@ def main(arguments):
basepath = ''
schema = _Load(opts.schema)
- description = _LoadFieldTrialConfig(description_filename)
+ description = _LoadFieldTrialConfig(description_filename, opts.platform)
json_to_struct.GenerateStruct(
basepath, output_root, opts.namespace, schema, description,
os.path.split(description_filename)[1], os.path.split(opts.schema)[1],

Powered by Google App Engine
This is Rietveld 408576698