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

import argparse
import json
import os
import sys

import common

PERF_DASHBOARD_URL = 'https://chromeperf.appspot.com'


def create_argparser():
  parser = argparse.ArgumentParser()
  parser.add_argument('--platform')
  parser.add_argument('--perf-id')
  parser.add_argument('--results-url', default=PERF_DASHBOARD_URL)
  return parser


def main_run(script_args):
  parser = create_argparser()
  parser.add_argument('prefix')
  args = parser.parse_args(script_args.args)

  runtest_args = [
      '--test-type',
      'sizes',
      '--run-python-script',
  ]
  if args.perf_id:
    runtest_args.extend([
        '--perf-id',
        args.perf_id,
        '--results-url=%s' % args.results_url,
        '--perf-dashboard-id=sizes',
        '--annotate=graphing',
    ])
  sizes_cmd = [
      os.path.join(common.SRC_DIR, 'infra', 'scripts', 'legacy', 'scripts',
                   'slave', 'chromium', 'sizes.py')
  ]
  if args.platform:
    sizes_cmd.extend(['--platform', args.platform])
  rc = common.run_runtest(script_args, runtest_args + sizes_cmd)

  json.dump({
      'valid': rc == 0,
      'failures': [],
  }, script_args.output)

  return rc


def main_compile_targets(script_args):
  parser = create_argparser()
  args = parser.parse_args(script_args.args)

  _COMPILE_TARGETS = {
      'android-cronet': ['cronet'],
      'android-webview': ['libwebviewchromium'],
  }

  json.dump(_COMPILE_TARGETS.get(args.platform, ['chrome']), script_args.output)


if __name__ == '__main__':
  funcs = {
      'run': main_run,
      'compile_targets': main_compile_targets,
  }
  sys.exit(common.run_script(sys.argv[1:], funcs))
