summaryrefslogtreecommitdiffstats
path: root/tools/perf/run_multipage_benchmarks
blob: f2370d7bb8a60b3672a782032e5079a57abebb76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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 urllib

# Directory path in which to save bootstrap files.
BOOTSTRAPPED_FILES_DIR = 'support/bootstrap_files'
PERF_DIR = 'src/tools/perf'
DEPS_FILE = 'bootstrap_deps'

def BootstrapIfNeeded(module_name, module_path, module_deps_url):
  """Ensures that the given module_name is available, grab from URL if not."""
  try:
    imp.find_module(module_name)
    return
  except ImportError:
    sys.path.append(os.path.join(os.path.dirname(__file__),
                                 BOOTSTRAPPED_FILES_DIR,
                                 module_path))
    try:
      imp.find_module(module_name)
      return
    except ImportError:
      bootstrap_txt = urllib.urlopen('http://src.chromium.org/viewvc/chrome/' +
                                     'trunk/src/tools/telemetry_tools/' +
                                     'telemetry_bootstrap.py').read()
      bootstrap = imp.new_module('bootstrap')
      exec bootstrap_txt in bootstrap.__dict__
      bootstrap.DownloadDepsURL(os.path.join(os.path.dirname(__file__),
                                             BOOTSTRAPPED_FILES_DIR),
                                module_deps_url)
      return

def ListBootstrapDeps():
  """List the deps required for telemetry.

  Returns: a list of telemetry deps.
  """
  import telemetry_bootstrap
  deps_file = os.path.join(os.path.dirname(perf_tools.__file__),
                           DEPS_FILE)
  return telemetry_bootstrap.ListAllDepsPaths(open(deps_file).read())

if __name__ == '__main__':
  BootstrapIfNeeded('perf_tools', PERF_DIR,
                    'http://src.chromium.org/viewvc/chrome/trunk/src/tools'
                    '/perf/perf_tools/' + DEPS_FILE)
  import perf_tools
  if '--print-bootstrap-deps' in sys.argv:
    print ListBootstrapDeps()
    sys.exit(0)

  from telemetry.page import page_measurement_runner
  import page_sets
  measurement_dir = os.path.dirname(perf_tools.__file__)
  page_set_filenames = page_sets.GetAllPageSetFilenames()

  old_benchmark_names = {
    "cheapness_predictor_benchmark": "cheapness_predictor_measurement",
    "image_decoding_benchmark": "image_decoding_measurement",
    "loading_benchmark": "loading_measurement",
    "memory_benchmark": "memory_measurement",
    "rasterize_and_record_benchmark": "rasterize_and_record_benchmark",
    "scrolling_benchmark": "smoothness_measurement",
    "smoothness_benchmark": "smoothness_measurement",
    "startup_benchmark": "startup_measurement"
  }

  # 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()
  sys.exit(runner.Run(measurement_dir, page_set_filenames))