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