#!/usr/bin/env vpython3 # Copyright 2024 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ The entry of the metric system.""" from typing import List, Set from measure import Measure from test_script_metrics_pb2 import TestScriptMetrics class Metric: def __init__(self) -> None: # A list of Measure to dump. self._metrics: List[Measure] = [] # A list of tags to suffix the dumped results; see tag and dump function. self._tags: Set[str] = set() def register(self, metric: Measure) -> None: self._metrics.append(metric) def size(self) -> int: return len(self._metrics) def clear(self) -> None: self._metrics.clear() self._tags.clear() def tag(self, *args: str) -> None: # Tags the metrics, the tags will be suffixed to the name of each metric for # easy selection. # This is an easy and hacky solution before adding output properties from # test script becomes possible. Currently adding output properties is # limited to the scope of the recipe, so any runtime tags are pretty much # impossible. self._tags.update(list(args)) def dump(self) -> TestScriptMetrics: result = TestScriptMetrics() result.metrics.extend([m.dump() for m in self._metrics]) for tag in sorted(self._tags): for metric in self._metrics: m = metric.dump() m.name = m.name + '@' + tag result.metrics.append(m) return result