普通文本  |  69行  |  1.94 KB

#!/usr/bin/env python2
#
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# pylint: disable=cros-logging-import

"""Script to re-format json result to one with branch_name and build_id"""
from __future__ import print_function

import argparse
import config
import json
import logging
import os
import subprocess
import sys

# Turn the logging level to INFO before importing other autotest
# code, to avoid having failed import logging messages confuse the
# test_droid user.
logging.basicConfig(level=logging.INFO)


def _parse_arguments_internal(argv):
    parser = argparse.ArgumentParser(description='Convert result to JSON'
                                     'format')
    parser.add_argument(
        '-b', '--bench', help='Generate JSON format file for which benchmark.')
    return parser.parse_args(argv)

def fix_json(bench):
    # Set environment variable for crosperf
    os.environ['PYTHONPATH'] = os.path.dirname(config.toolchain_utils)

    logging.info('Generating Crosperf Report...')
    json_path = os.path.join(config.bench_suite_dir, bench + '_refined')
    crosperf_cmd = [
        os.path.join(config.toolchain_utils, 'generate_report.py'), '--json',
        '-i=' + os.path.join(config.bench_suite_dir, bench + '.json'),
        '-o=' + json_path, '-f'
    ]

    # Run crosperf generate_report.py
    logging.info('Command: %s', crosperf_cmd)
    subprocess.call(crosperf_cmd)

    json_path += '.json'
    with open(json_path) as fout:
        objs = json.load(fout)
    for obj in objs:
        obj['branch_name'] = 'aosp/master'
        obj['build_id'] = 0
    with open(json_path, 'w') as fout:
        json.dump(objs, fout)

    logging.info('JSON file fixed successfully!')

def main(argv):
    arguments = _parse_arguments_internal(argv)

    bench = arguments.bench

    fix_json(bench)

if __name__ == '__main__':
    main(sys.argv[1:])