1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/env vpython3 2*8975f5c5SAndroid Build Coastguard Worker 3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2024 The Chromium Authors 4*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 6*8975f5c5SAndroid Build Coastguard Worker""" A metric implementation to calculate the average of the inputs. """ 7*8975f5c5SAndroid Build Coastguard Worker 8*8975f5c5SAndroid Build Coastguard Workerfrom measure import Measure 9*8975f5c5SAndroid Build Coastguard Workerfrom test_script_metrics_pb2 import TestScriptMetric 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Workerclass Average(Measure): 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker def __init__(self, name: str) -> None: 15*8975f5c5SAndroid Build Coastguard Worker self._name = name 16*8975f5c5SAndroid Build Coastguard Worker self._value = 0 17*8975f5c5SAndroid Build Coastguard Worker self._count = 0 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker def record(self, value: float) -> None: 20*8975f5c5SAndroid Build Coastguard Worker self._value = (self._value * self._count + value) / (self._count + 1) 21*8975f5c5SAndroid Build Coastguard Worker self._count += 1 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Worker def dump(self) -> TestScriptMetric: 24*8975f5c5SAndroid Build Coastguard Worker result = TestScriptMetric() 25*8975f5c5SAndroid Build Coastguard Worker result.name = self._name 26*8975f5c5SAndroid Build Coastguard Worker result.value = self._value 27*8975f5c5SAndroid Build Coastguard Worker return result 28