File: benchmark_finders.py

package info (click to toggle)
chromium 139.0.7258.138-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,120,676 kB
  • sloc: cpp: 35,100,869; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (101 lines) | stat: -rw-r--r-- 3,563 bytes parent folder | download | duplicates (7)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import imp
import inspect
import os
import sys

from core import path_util
from core import perf_benchmark

from telemetry import benchmark as benchmark_module

from py_utils import discover

def GetClassFilePath(clazz):
  """ Return the absolute file path to |clazz|. """
  assert inspect.isclass(clazz)
  path = os.path.abspath(inspect.getfile(clazz))
  if path.endswith('.pyc'):
    return path[:-1]
  return path


def GetBenchmarkNamesForFile(top_level_dir, benchmark_file_dir):
  """  Return the list of all benchmark names of benchmarks defined in
    |benchmark_file_dir|.
  """
  original_sys_path = sys.path[:]
  top_level_dir = os.path.abspath(top_level_dir)
  original_sys_path = sys.path[:]
  if top_level_dir not in sys.path:
    sys.path.append(top_level_dir)
  try:
    module = imp.load_source('_tmp_module_name_', benchmark_file_dir)
    benchmark_names = []
    for _, obj in inspect.getmembers(module):
      if (inspect.isclass(obj) and issubclass(obj, perf_benchmark.PerfBenchmark)
          and GetClassFilePath(obj) == benchmark_file_dir):
        benchmark_names.append(obj.Name())
    return sorted(benchmark_names)
  finally:
    sys.path = original_sys_path


def GetOfficialBenchmarks():
  """Returns the list of all benchmarks to be run on perf waterfall.
  The benchmarks are sorted by order of their names.
  """
  benchmarks = list(
      discover.DiscoverClasses(start_dir=path_util.GetOfficialBenchmarksDir(),
                               top_level_dir=path_util.GetPerfDir(),
                               base_class=benchmark_module.Benchmark,
                               index_by_class_name=True).values())
  benchmarks.sort(key=lambda b: b.Name())
  return benchmarks


def GetContribBenchmarks():
  """Returns the list of all contrib benchmarks.
  The benchmarks are sorted by order of their names.
  """
  _BENCHMARKS_TO_SKIP = {
      # This benchmark is intended to be a convenience base class for writing
      # other benchmarks, and not a standalone benchmark.
      'perf_benchmark_with_profiling.PerfBenchmarkWithProfiling',
      'perf_benchmark_with_profiling_unittest.PerfBenchmarkForTesting',
      # This benchmark is a base class for power measurements.
      'power_perf_benchmark_base.PowerPerfBenchmarkBase',
  }

  benchmarks = list(
      discover.DiscoverClasses(start_dir=path_util.GetContribDir(),
                               top_level_dir=path_util.GetPerfDir(),
                               base_class=benchmark_module.Benchmark,
                               index_by_class_name=True).values())
  benchmarks = [
      benchmark for benchmark in benchmarks
      if benchmark.Name() not in _BENCHMARKS_TO_SKIP
  ]
  benchmarks.sort(key=lambda b: b.Name())
  return benchmarks


def GetAllBenchmarks():
  """Returns all benchmarks in tools/perf directory.
  The benchmarks are sorted by order of their names.
  """
  waterfall_benchmarks = GetOfficialBenchmarks()
  contrib_benchmarks = GetContribBenchmarks()
  benchmarks = waterfall_benchmarks + contrib_benchmarks
  benchmarks.sort(key=lambda b: b.Name())
  return benchmarks


def GetBenchmarksInSubDirectory(directory):
  return list(
      discover.DiscoverClasses(start_dir=directory,
                               top_level_dir=path_util.GetPerfDir(),
                               base_class=benchmark_module.Benchmark,
                               index_by_class_name=True).values())