| #!/usr/bin/env python |
| # Copyright (c) 2012 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 imp |
| import os |
| import sys |
| import urllib2 |
| |
| |
| BASE_URL = 'http://src.chromium.org/chrome/trunk/' |
| DEPS_FILE = 'bootstrap_deps' |
| |
| SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) |
| # Directory containing src/ in a Chromium checkout. |
| CHECKOUT_BASE_PATH = os.path.join(SCRIPT_PATH, os.pardir, os.pardir, os.pardir) |
| # Directory in which to save bootstrap files. |
| BOOTSTRAP_BASE_PATH = os.path.join(SCRIPT_PATH, 'support', 'bootstrap_files') |
| |
| PERF_DIR = os.path.join('src', 'tools', 'perf') |
| TELEMETRY_DIR = os.path.join('src', 'tools', 'telemetry') |
| TELEMETRY_TOOLS_DIR = os.path.join('src', 'tools', 'telemetry_tools') |
| |
| |
| def _GetBasePath(): |
| """Find the location of our Chromium or bootstrap checkout. |
| |
| It tries to import Telemetry. If the import succeeds, |
| we assume that's the correct location. |
| |
| Returns: |
| The path containing the src/ directory, or None if no checkout is found. |
| """ |
| module_name = 'telemetry' |
| module_path = TELEMETRY_DIR |
| |
| try: |
| paths = [os.path.join(CHECKOUT_BASE_PATH, module_path)] |
| imp.find_module(module_name, paths) |
| return CHECKOUT_BASE_PATH |
| except ImportError: |
| pass |
| |
| try: |
| paths = [os.path.join(BOOTSTRAP_BASE_PATH, module_path)] |
| imp.find_module(module_name, paths) |
| return BOOTSTRAP_BASE_PATH |
| except ImportError: |
| pass |
| |
| return None |
| |
| |
| def _Bootstrap(bootstrap_deps_url): |
| """Grab all the deps listed in the file at bootstrap_deps_url.""" |
| bootstrap_txt = urllib2.urlopen( |
| BASE_URL + 'src/tools/telemetry_tools/telemetry_bootstrap.py').read() |
| bootstrap = imp.new_module('bootstrap') |
| exec bootstrap_txt in bootstrap.__dict__ |
| bootstrap.DownloadDeps(BOOTSTRAP_BASE_PATH, bootstrap_deps_url) |
| |
| |
| def ListBootstrapDeps(base_path): |
| """List the deps required for telemetry.""" |
| sys.path.append(os.path.join(base_path, TELEMETRY_TOOLS_DIR)) |
| import telemetry_bootstrap |
| |
| deps_file = os.path.join(base_path, PERF_DIR, DEPS_FILE) |
| return telemetry_bootstrap.ListAllDepsPaths(deps_file) |
| |
| |
| def Main(): |
| if not _GetBasePath(): |
| _Bootstrap(BASE_URL + 'src/tools/perf/' + DEPS_FILE) |
| |
| new_base_path = _GetBasePath() |
| new_perf_path = os.path.join(new_base_path, PERF_DIR) |
| new_telemetry_path = os.path.join(new_base_path, TELEMETRY_DIR) |
| |
| if '--print-bootstrap-deps' in sys.argv: |
| print ListBootstrapDeps(new_base_path) |
| return 0 |
| |
| sys.path.append(new_perf_path) |
| import page_sets |
| page_set_filenames = page_sets.GetAllPageSetFilenames() |
| |
| old_benchmark_names = { |
| "image_decoding_benchmark": "image_decoding", |
| "image_decoding_measurement": "image_decoding", |
| "loading_benchmark": "loading", |
| "loading_measurement": "loading", |
| "media_measurement": "media", |
| "memory_benchmark": "memory", |
| "memory_measurement": "memory", |
| "rasterize_and_record_benchmark": "rasterize_and_record", |
| "rasterize_and_record_measurement": "rasterize_and_record", |
| "robohornetpro": "robohornet_pro", |
| "scrolling_benchmark": "smoothness", |
| "smoothness_benchmark": "smoothness", |
| "smoothness_measurement": "smoothness", |
| "startup_benchmark": "startup_warm_blank_page", |
| "startup_measurement": "startup", |
| "tab_switching_measurement": "tab_switching", |
| } |
| |
| sys.path.append(new_telemetry_path) |
| from telemetry.page import page_measurement_runner |
| # There are bots that are hard-coded to run some specific named tests. |
| # Convert these to the current naming conventions by overriding them |
| # in the runner. |
| class MeasurementRunner(page_measurement_runner.PageMeasurementRunner): |
| def GetModernizedTestName(self, arg): |
| if arg not in old_benchmark_names: |
| return arg |
| sys.stderr.write( |
| 'An old name %s was given. Please use %s in the future.\n' % ( |
| arg, |
| old_benchmark_names.get(arg))) |
| return old_benchmark_names[arg] |
| |
| runner = MeasurementRunner() |
| return runner.Run(new_perf_path, page_set_filenames) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(Main()) |