• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2023 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from __future__ import annotations
6
7import logging
8from typing import TYPE_CHECKING, Any, Tuple
9
10from crossbench import helper
11from crossbench.benchmarks.speedometer.speedometer import (SpeedometerProbe,
12                                                           SpeedometerStory)
13
14if TYPE_CHECKING:
15  from crossbench.runner.run import Run
16
17
18class Speedometer2Probe(SpeedometerProbe):
19
20  def _is_valid_metric_key(self, metric_key: str) -> bool:
21    parts = metric_key.split("/")
22    if len(parts) == 2:
23      return True
24    if len(parts) == 1:
25      return parts[0] in ("Geomean", "Score")
26    return parts[-1] == "total"
27
28  def process_json_data(self, json_data) -> Any:
29    # Move aggregate scores to the end
30    for iteration_data in json_data:
31      iteration_data["Mean"] = iteration_data.pop("mean")
32      iteration_data["Total"] = iteration_data.pop("total")
33      iteration_data["Geomean"] = iteration_data.pop("geomean")
34      iteration_data["Score"] = iteration_data.pop("score")
35    return json_data
36
37
38class Speedometer2Story(SpeedometerStory):
39  __doc__ = SpeedometerStory.__doc__
40  SUBSTORIES: Tuple[str, ...] = (
41      "VanillaJS-TodoMVC",
42      "Vanilla-ES2015-TodoMVC",
43      "Vanilla-ES2015-Babel-Webpack-TodoMVC",
44      "React-TodoMVC",
45      "React-Redux-TodoMVC",
46      "EmberJS-TodoMVC",
47      "EmberJS-Debug-TodoMVC",
48      "BackboneJS-TodoMVC",
49      "AngularJS-TodoMVC",
50      "Angular2-TypeScript-TodoMVC",
51      "VueJS-TodoMVC",
52      "jQuery-TodoMVC",
53      "Preact-TodoMVC",
54      "Inferno-TodoMVC",
55      "Elm-TodoMVC",
56      "Flight-TodoMVC",
57  )
58
59  def log_run_test_url(self, run: Run) -> None:
60    test_url = f"{self.URL}/InteractiveRunner.html"
61    params = self.url_params
62    if len(self.substories) == 1:
63      params["suite"] = self.substories[0]
64    params["startAutomatically"] = "true"
65    official_test_url = helper.update_url_query(test_url, params)
66    logging.info("STORY PUBLIC TEST URL: %s", official_test_url)
67