Introduce Metric object for new perf metrics logging system
Bug: b/246095034 Change-Id: I854ee8e5ea93e4046837ae9f54a652a8c92dd1bc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/274861 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38078}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
0a617882df
commit
c898c82884
2
BUILD.gn
2
BUILD.gn
@ -52,6 +52,7 @@ if (!build_with_chromium) {
|
||||
":voip_unittests",
|
||||
":webrtc_nonparallel_tests",
|
||||
":webrtc_perf_tests",
|
||||
"api/test/metrics:metrics_unittests",
|
||||
"common_audio:common_audio_unittests",
|
||||
"common_video:common_video_unittests",
|
||||
"examples:examples_unittests",
|
||||
@ -475,6 +476,7 @@ if (!build_with_chromium) {
|
||||
"api/rtc_event_log:rtc_event_log_factory",
|
||||
"api/task_queue",
|
||||
"api/task_queue:default_task_queue_factory",
|
||||
"api/test/metrics",
|
||||
"audio",
|
||||
"call",
|
||||
"common_audio",
|
||||
|
||||
31
api/test/metrics/BUILD.gn
Normal file
31
api/test/metrics/BUILD.gn
Normal file
@ -0,0 +1,31 @@
|
||||
# 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.
|
||||
|
||||
import("../../../webrtc.gni")
|
||||
|
||||
group("metrics") {
|
||||
deps = [ ":metric" ]
|
||||
}
|
||||
|
||||
if (rtc_include_tests) {
|
||||
group("metrics_unittests") {
|
||||
testonly = true
|
||||
|
||||
deps = []
|
||||
}
|
||||
}
|
||||
|
||||
rtc_library("metric") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
"metric.cc",
|
||||
"metric.h",
|
||||
]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
||||
deps = [ "../../../api/units:timestamp" ]
|
||||
}
|
||||
48
api/test/metrics/metric.cc
Normal file
48
api/test/metrics/metric.cc
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
#include "api/test/metrics/metric.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace webrtc {
|
||||
namespace test {
|
||||
|
||||
absl::string_view ToString(Unit unit) {
|
||||
switch (unit) {
|
||||
case Unit::kTimeMs:
|
||||
return "TimeMs";
|
||||
case Unit::kPercent:
|
||||
return "Percent";
|
||||
case Unit::kSizeInBytes:
|
||||
return "SizeInBytes";
|
||||
case Unit::kKilobitsPerSecond:
|
||||
return "KilobitsPerSecond";
|
||||
case Unit::kHertz:
|
||||
return "Hertz";
|
||||
case Unit::kUnitless:
|
||||
return "Unitless";
|
||||
case Unit::kCount:
|
||||
return "Count";
|
||||
}
|
||||
}
|
||||
|
||||
absl::string_view ToString(ImprovementDirection direction) {
|
||||
switch (direction) {
|
||||
case ImprovementDirection::kBiggerIsBetter:
|
||||
return "BiggerIsBetter";
|
||||
case ImprovementDirection::kNeitherIsBetter:
|
||||
return "NeitherIsBetter";
|
||||
case ImprovementDirection::kSmallerIsBetter:
|
||||
return "SmallerIsBetter";
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
96
api/test/metrics/metric.h
Normal file
96
api/test/metrics/metric.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef API_TEST_METRICS_METRIC_H_
|
||||
#define API_TEST_METRICS_METRIC_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/units/timestamp.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace test {
|
||||
|
||||
enum class Unit {
|
||||
kTimeMs,
|
||||
kPercent,
|
||||
kSizeInBytes,
|
||||
kKilobitsPerSecond,
|
||||
kHertz,
|
||||
// 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.
|
||||
kUnitless,
|
||||
kCount
|
||||
};
|
||||
|
||||
absl::string_view ToString(Unit unit);
|
||||
|
||||
enum class ImprovementDirection {
|
||||
kBiggerIsBetter,
|
||||
kNeitherIsBetter,
|
||||
kSmallerIsBetter
|
||||
};
|
||||
|
||||
absl::string_view ToString(ImprovementDirection direction);
|
||||
|
||||
struct Metric {
|
||||
struct TimeSeries {
|
||||
struct Sample {
|
||||
// Timestamp in microseconds associated with a sample. For example,
|
||||
// the timestamp when the sample was collected.
|
||||
webrtc::Timestamp timestamp;
|
||||
double value;
|
||||
// Metadata associated with this particular sample.
|
||||
std::map<std::string, std::string> sample_metadata;
|
||||
};
|
||||
|
||||
// All samples collected for this metric. It can be empty if the Metric
|
||||
// object only contains `stats`.
|
||||
std::vector<Sample> samples;
|
||||
};
|
||||
|
||||
// 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.
|
||||
struct Stats {
|
||||
// Sample mean of the metric
|
||||
// (https://en.wikipedia.org/wiki/Sample_mean_and_covariance).
|
||||
absl::optional<double> mean;
|
||||
// Standard deviation (https://en.wikipedia.org/wiki/Standard_deviation).
|
||||
// Is undefined if `time_series` contains only a single value.
|
||||
absl::optional<double> stddev;
|
||||
absl::optional<double> min;
|
||||
absl::optional<double> max;
|
||||
};
|
||||
|
||||
// Metric name, for example PSNR, SSIM, decode_time, etc.
|
||||
std::string name;
|
||||
Unit unit;
|
||||
ImprovementDirection improvement_direction;
|
||||
// If the metric is generated by a test, this field can be used to specify
|
||||
// this information.
|
||||
std::string test_case;
|
||||
// Metadata associated with the whole metric.
|
||||
std::map<std::string, std::string> metric_metadata;
|
||||
// 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;
|
||||
Stats stats;
|
||||
};
|
||||
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // API_TEST_METRICS_METRIC_H_
|
||||
Reference in New Issue
Block a user