/* * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ syntax = "proto3"; package webrtc.test_metrics; // Root message of the proto file. Contains collection of all the metrics. message MetricsSet { repeated Metric metrics = 1; } enum Unit { // Default value that has to be defined. UNDEFINED_UNIT = 0; // General unitless value. Can be used either for dimensionless quantities // (ex ratio) or for units not presented in this enum and too specific to add // to this enum. UNITLESS = 1; MILLISECONDS = 2; PERCENT = 3; BYTES = 4; KILOBITS_PER_SECOND = 5; HERTZ = 6; COUNT = 7; } enum ImprovementDirection { // Default value that has to be defined. UNDEFINED_IMPROVEMENT_DIRECTION = 0; BIGGER_IS_BETTER = 1; NEITHER_IS_BETTER = 2; SMALLER_IS_BETTER = 3; } // Single performance metric with all related metadata. message Metric { // Metric name, for example PSNR, SSIM, decode_time, etc. string name = 1; Unit unit = 2; ImprovementDirection improvement_direction = 3; // If the metric is generated by a test, this field can be used to specify // this information. string test_case = 4; // Metadata associated with the whole metric. map metric_metadata = 5; message TimeSeries { message Sample { // Timestamp in microseconds associated with a sample. For example, // the timestamp when the sample was collected. int64 timestamp_us = 1; double value = 2; // Metadata associated with this particular sample. map sample_metadata = 3; } // All samples collected for this metric. It can be empty if the Metric // object only contains `stats`. repeated Sample samples = 1; } // Contains all samples of the metric collected during test execution. // It can be empty if the user only stores precomputed statistics into // `stats`. TimeSeries time_series = 6; // Contains metric's precomputed statistics based on the `time_series` or if // `time_series` is omitted (has 0 samples) contains precomputed statistics // provided by the metric's calculator. message Stats { // Sample mean of the metric // (https://en.wikipedia.org/wiki/Sample_mean_and_covariance). optional double mean = 1; // Standard deviation (https://en.wikipedia.org/wiki/Standard_deviation). // Is undefined if `time_series` contains only a single sample. optional double stddev = 2; optional double min = 3; optional double max = 4; } Stats stats = 7; }