blob: 96b44284345514564e613e47017d7f4c8d0624ae [file] [log] [blame]
#!/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())