chromium/tools/perf/core/tbmv3/run_tbmv3_metric.py

#!/usr/bin/env vpython3
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from __future__ import print_function

import argparse
import json
import logging
import os
import sys

# TODO(crbug.com/40102479): Adding tools/perf to path. We can remove this when
# we have a wrapper script under tools/perf that sets up import paths more
# nicely.
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))

from core import path_util
path_util.AddPyUtilsToPath()
path_util.AddTracingToPath()

from core.tbmv3 import trace_processor


_CHROMIUM_SRC_PATH  = os.path.join(
    os.path.dirname(__file__), '..', '..', '..', '..')


def _WriteHistogramSetToFile(histograms, outfile):
  with open(outfile, 'w') as f:
    json.dump(histograms.AsDicts(), f, indent=2, sort_keys=True,
              separators=(',', ': '))
    f.write("\n")


def Main(cli_args):
  parser = argparse.ArgumentParser(
    description='[Experimental] Runs TBMv3 metrics on local traces and '
    'produces histogram json.')
  parser.add_argument('--trace', required=True,
                      help='Trace file you want to compute metric on')
  parser.add_argument('--metric', required=True,
                      help=('Name of the metric you want to run'))
  parser.add_argument(
      '--trace-processor-path',
      help='Path to trace processor shell. '
      'Default: Binary downloaded from cloud storage.')
  parser.add_argument('--outfile', default='results.json',
                      help='Path to output file. Default: %(default)s')
  args = parser.parse_args(cli_args)

  histograms = trace_processor.RunMetric(args.trace_processor_path,
                                         args.trace, args.metric)
  _WriteHistogramSetToFile(histograms, args.outfile)
  logging.info('JSON result created in file://%s' % (args.outfile))


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