File: benchmark_utils.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 (62 lines) | stat: -rw-r--r-- 2,133 bytes parent folder | download | duplicates (6)
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
# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import collections

from telemetry import benchmark as b_module
from telemetry.core import optparse_argparse_migration as oam
from telemetry.internal.browser import browser_options


StoryInfo = collections.namedtuple('StoryInfo', ['name', 'description', 'tags'])


def GetBenchmarkStorySet(benchmark, exhaustive=False):
  if not isinstance(benchmark, b_module.Benchmark):
    raise ValueError(
      '|benchmark| must be an instace of telemetry.benchmark.Benchmark class. '
      'Instead found object of type: %s' % type(benchmark))
  options = browser_options.BrowserFinderOptions()
  # Add default values for any extra commandline options
  # provided by the benchmark.
  parser = oam.CreateFromOptparseInputs()
  before, _ = parser.parse_args([])
  benchmark.AddBenchmarkCommandLineArgs(parser)
  after, _ = parser.parse_args([])
  for extra_option in dir(after):
    if extra_option not in dir(before):
      setattr(options, extra_option, getattr(after, extra_option))
  if exhaustive:
    setattr(options, 'story_set_should_be_exhaustive_for_test', True)
  return benchmark.CreateStorySet(options)


def GetBenchmarkStoryInfo(benchmark):
  """Return a list with StoryInfo objects for each story in a benchmark."""
  stories = [
      StoryInfo(name=story.name, description=DescribeStory(story),
                tags=list(story.tags))
      for story in GetBenchmarkStorySet(benchmark)
  ]
  stories.sort(key=lambda s: s.name)
  return stories


def GetBenchmarkStoryNames(benchmark):
  """Return the list of all stories names in the benchmark.
  This guarantees the order of the stories in the list is exactly the same
  of the order of stories to be run by benchmark.
  """
  story_list = []
  for story in GetBenchmarkStorySet(benchmark):
    story_list.append(story.name)
  return story_list


def DescribeStory(story):
  """Get the docstring title out of a given story."""
  description = story.__doc__
  if description:
    return description.strip().splitlines()[0]
  return ''