#!/usr/bin/env vpython
# Copyright 2013 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 sys

from core import path_util
sys.path.insert(1, path_util.GetTelemetryDir())

from telemetry import benchmark_runner

from chrome_telemetry_build import chromium_config


def main():
  config = chromium_config.ChromiumConfig(
      benchmark_dirs=[path_util.GetOfficialBenchmarksDir(),
                      path_util.GetContribDir()],
      top_level_dir=path_util.GetPerfDir(),
      expectations_files=[path_util.GetExpectationsPath()])
  return benchmark_runner.main(config)


if __name__ == '__main__':
  sys.exit(main())
