run_measurement revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5import imp
6import os
7import sys
8import urllib
9
10# Directory path in which to save bootstrap files.
11BOOTSTRAPPED_FILES_DIR = 'support/bootstrap_files'
12PERF_DIR = 'src/tools/perf'
13DEPS_FILE = 'bootstrap_deps'
14
15def BootstrapIfNeeded(module_name, module_path, module_deps_url):
16  """Ensures that the given module_name is available, grab from URL if not."""
17  try:
18    imp.find_module(module_name)
19    return
20  except ImportError:
21    sys.path.append(os.path.join(os.path.dirname(__file__),
22                                 BOOTSTRAPPED_FILES_DIR,
23                                 module_path))
24    try:
25      imp.find_module(module_name)
26      return
27    except ImportError:
28      bootstrap_txt = urllib.urlopen('http://src.chromium.org/viewvc/chrome/' +
29                                     'trunk/src/tools/telemetry_tools/' +
30                                     'telemetry_bootstrap.py').read()
31      bootstrap = imp.new_module('bootstrap')
32      exec bootstrap_txt in bootstrap.__dict__
33      bootstrap.DownloadDepsURL(os.path.join(os.path.dirname(__file__),
34                                             BOOTSTRAPPED_FILES_DIR),
35                                module_deps_url)
36      return
37
38def ListBootstrapDeps():
39  """List the deps required for telemetry.
40
41  Returns: a list of telemetry deps.
42  """
43  import perf_tools
44  import telemetry_bootstrap
45  deps_file = os.path.join(os.path.dirname(perf_tools.__file__),
46                           DEPS_FILE)
47  return telemetry_bootstrap.ListAllDepsPaths(open(deps_file).read())
48
49def main():
50  BootstrapIfNeeded('perf_tools', PERF_DIR,
51                    'http://src.chromium.org/viewvc/chrome/trunk/src/tools'
52                    '/perf/perf_tools/' + DEPS_FILE)
53  import perf_tools
54  if '--print-bootstrap-deps' in sys.argv:
55    print ListBootstrapDeps()
56    sys.exit(0)
57
58  from telemetry.page import page_measurement_runner
59  import page_sets
60  page_set_filenames = page_sets.GetAllPageSetFilenames()
61
62  old_benchmark_names = {
63    "cheapness_predictor_benchmark": "cheapness_predictor_measurement",
64    "image_decoding_benchmark": "image_decoding_measurement",
65    "loading_benchmark": "loading_measurement",
66    "memory_benchmark": "memory_measurement",
67    "rasterize_and_record_benchmark": "rasterize_and_record_benchmark",
68    "scrolling_benchmark": "smoothness",
69    "smoothness_benchmark": "smoothness",
70    "smoothness_measurement": "smoothness",
71    "startup_benchmark": "startup_measurement"
72  }
73
74  # There are bots that are hard-coded to run some specific named tests.
75  # Convert these to the current naming conventions by overriding them in the runner.
76  class MeasurementRunner(page_measurement_runner.PageMeasurementRunner):
77    def GetModernizedTestName(self, arg):
78      if arg not in old_benchmark_names:
79        return arg
80      sys.stderr.write(
81        'An old name %s was given. Please use %s in the future.\n' % (
82          arg,
83          old_benchmark_names.get(arg)))
84      return old_benchmark_names[arg]
85
86  runner = MeasurementRunner()
87  sys.exit(runner.Run(os.path.dirname(__file__), page_set_filenames))
88
89if __name__ == '__main__':
90  sys.exit(main())
91