Source code

Revision control

Copy as Markdown

Other Tools

#!/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