mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Migrate CallSimulator to the new perf metrics logging API
Bug: b/246095034 Change-Id: I613f702d2f469b6bc8d1634f8dda40d444ff7cf2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276632 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38213}
This commit is contained in:
parent
e2f2cae3fb
commit
7fee2f7908
4 changed files with 27 additions and 45 deletions
|
@ -19,6 +19,10 @@
|
|||
namespace webrtc {
|
||||
|
||||
SamplesStatsCounter::SamplesStatsCounter() = default;
|
||||
SamplesStatsCounter::SamplesStatsCounter(size_t expected_samples_count) {
|
||||
samples_.reserve(expected_samples_count);
|
||||
}
|
||||
|
||||
SamplesStatsCounter::~SamplesStatsCounter() = default;
|
||||
SamplesStatsCounter::SamplesStatsCounter(const SamplesStatsCounter&) = default;
|
||||
SamplesStatsCounter& SamplesStatsCounter::operator=(
|
||||
|
|
|
@ -34,6 +34,7 @@ class SamplesStatsCounter {
|
|||
};
|
||||
|
||||
SamplesStatsCounter();
|
||||
explicit SamplesStatsCounter(size_t expected_samples_count);
|
||||
~SamplesStatsCounter();
|
||||
SamplesStatsCounter(const SamplesStatsCounter&);
|
||||
SamplesStatsCounter& operator=(const SamplesStatsCounter&);
|
||||
|
|
|
@ -498,13 +498,15 @@ if (rtc_include_tests) {
|
|||
":audio_processing",
|
||||
":audioproc_test_utils",
|
||||
"../../api:array_view",
|
||||
"../../api/numerics",
|
||||
"../../api/test/metrics:global_metrics_logger_and_exporter",
|
||||
"../../api/test/metrics:metric",
|
||||
"../../rtc_base:platform_thread",
|
||||
"../../rtc_base:protobuf_utils",
|
||||
"../../rtc_base:random",
|
||||
"../../rtc_base:rtc_event",
|
||||
"../../rtc_base:safe_conversions",
|
||||
"../../system_wrappers",
|
||||
"../../test:perf_test",
|
||||
"../../test:test_support",
|
||||
]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
|
||||
|
|
|
@ -16,6 +16,9 @@
|
|||
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "api/array_view.h"
|
||||
#include "api/numerics/samples_stats_counter.h"
|
||||
#include "api/test/metrics/global_metrics_logger_and_exporter.h"
|
||||
#include "api/test/metrics/metric.h"
|
||||
#include "modules/audio_processing/audio_processing_impl.h"
|
||||
#include "modules/audio_processing/test/audio_processing_builder_for_testing.h"
|
||||
#include "modules/audio_processing/test/test_utils.h"
|
||||
|
@ -25,13 +28,14 @@
|
|||
#include "rtc_base/random.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/testsupport/perf_test.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
namespace {
|
||||
|
||||
static const bool kPrintAllDurations = false;
|
||||
using ::webrtc::test::GetGlobalMetricsLogger;
|
||||
using ::webrtc::test::ImprovementDirection;
|
||||
using ::webrtc::test::Metric;
|
||||
using ::webrtc::test::Unit;
|
||||
|
||||
class CallSimulator;
|
||||
|
||||
|
@ -203,11 +207,11 @@ class TimedThreadApiProcessor {
|
|||
frame_data_(kMaxFrameSize),
|
||||
clock_(webrtc::Clock::GetRealTimeClock()),
|
||||
num_durations_to_store_(num_durations_to_store),
|
||||
api_call_durations_(num_durations_to_store_ - kNumInitializationFrames),
|
||||
samples_count_(0),
|
||||
input_level_(input_level),
|
||||
processor_type_(processor_type),
|
||||
num_channels_(num_channels) {
|
||||
api_call_durations_.reserve(num_durations_to_store_);
|
||||
}
|
||||
num_channels_(num_channels) {}
|
||||
|
||||
// Implements the callback functionality for the threads.
|
||||
bool Process();
|
||||
|
@ -219,21 +223,17 @@ class TimedThreadApiProcessor {
|
|||
const std::string sample_rate_name =
|
||||
"_" + std::to_string(simulation_config_->sample_rate_hz) + "Hz";
|
||||
|
||||
webrtc::test::PrintResultMeanAndError(
|
||||
"apm_timing", sample_rate_name, processor_name, GetDurationAverage(),
|
||||
GetDurationStandardDeviation(), "us", false);
|
||||
|
||||
if (kPrintAllDurations) {
|
||||
webrtc::test::PrintResultList("apm_call_durations", sample_rate_name,
|
||||
processor_name, api_call_durations_, "us",
|
||||
false);
|
||||
}
|
||||
GetGlobalMetricsLogger()->LogMetric(
|
||||
"apm_timing" + sample_rate_name, processor_name, api_call_durations_,
|
||||
Unit::kMilliseconds, ImprovementDirection::kNeitherIsBetter);
|
||||
}
|
||||
|
||||
void AddDuration(int64_t duration) {
|
||||
if (api_call_durations_.size() < num_durations_to_store_) {
|
||||
api_call_durations_.push_back(duration);
|
||||
if (samples_count_ >= kNumInitializationFrames &&
|
||||
samples_count_ < num_durations_to_store_) {
|
||||
api_call_durations_.AddSample(duration);
|
||||
}
|
||||
samples_count_++;
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -241,32 +241,6 @@ class TimedThreadApiProcessor {
|
|||
static const int kMaxFrameSize = 480;
|
||||
static const int kNumInitializationFrames = 5;
|
||||
|
||||
int64_t GetDurationStandardDeviation() const {
|
||||
double variance = 0;
|
||||
const int64_t average_duration = GetDurationAverage();
|
||||
for (size_t k = kNumInitializationFrames; k < api_call_durations_.size();
|
||||
k++) {
|
||||
int64_t tmp = api_call_durations_[k] - average_duration;
|
||||
variance += static_cast<double>(tmp * tmp);
|
||||
}
|
||||
const int denominator = rtc::checked_cast<int>(api_call_durations_.size()) -
|
||||
kNumInitializationFrames;
|
||||
return (denominator > 0
|
||||
? rtc::checked_cast<int64_t>(sqrt(variance / denominator))
|
||||
: -1);
|
||||
}
|
||||
|
||||
int64_t GetDurationAverage() const {
|
||||
int64_t average_duration = 0;
|
||||
for (size_t k = kNumInitializationFrames; k < api_call_durations_.size();
|
||||
k++) {
|
||||
average_duration += api_call_durations_[k];
|
||||
}
|
||||
const int denominator = rtc::checked_cast<int>(api_call_durations_.size()) -
|
||||
kNumInitializationFrames;
|
||||
return (denominator > 0 ? average_duration / denominator : -1);
|
||||
}
|
||||
|
||||
int ProcessCapture() {
|
||||
// Set the stream delay.
|
||||
apm_->set_stream_delay_ms(30);
|
||||
|
@ -382,7 +356,8 @@ class TimedThreadApiProcessor {
|
|||
AudioFrameData frame_data_;
|
||||
webrtc::Clock* clock_;
|
||||
const size_t num_durations_to_store_;
|
||||
std::vector<double> api_call_durations_;
|
||||
SamplesStatsCounter api_call_durations_;
|
||||
size_t samples_count_ = 0;
|
||||
const float input_level_;
|
||||
bool first_process_call_ = true;
|
||||
const ProcessorType processor_type_;
|
||||
|
|
Loading…
Reference in a new issue