diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index e46f33d2bd..7b9365b6cd 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -385,6 +385,7 @@ rtc_source_set("default_audio_quality_analyzer") { "../../../api:libjingle_peerconnection_api", "../../../api:stats_observer_interface", "../../../api:track_id_stream_label_map", + "../../../rtc_base:criticalsection", "../../../rtc_base:logging", "../../../rtc_base:rtc_numerics", "//third_party/abseil-cpp/absl/strings", diff --git a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc index 0c025a129b..04bb7bfa9d 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc @@ -10,8 +10,6 @@ #include "test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h" -#include - #include "api/stats_types.h" #include "rtc_base/logging.h" #include "test/testsupport/perf_test.h" @@ -80,6 +78,8 @@ void DefaultAudioQualityAnalyzer::OnStatsReports( const std::string& stream_label = GetStreamLabelFromStatsReport(stats_report); + + rtc::CritScope crit(&lock_); AudioStreamStats& audio_stream_stats = streams_stats_[stream_label]; audio_stream_stats.expand_rate.AddSample(expand_rate->float_val()); audio_stream_stats.accelerate_rate.AddSample(accelerate_rate->float_val()); @@ -106,6 +106,7 @@ std::string DefaultAudioQualityAnalyzer::GetTestCaseName( } void DefaultAudioQualityAnalyzer::Stop() { + rtc::CritScope crit(&lock_); for (auto& item : streams_stats_) { ReportResult("expand_rate", item.first, item.second.expand_rate, "unitless"); @@ -120,6 +121,12 @@ void DefaultAudioQualityAnalyzer::Stop() { } } +std::map +DefaultAudioQualityAnalyzer::GetAudioStreamsStats() const { + rtc::CritScope crit(&lock_); + return streams_stats_; +} + void DefaultAudioQualityAnalyzer::ReportResult( const std::string& metric_name, const std::string& stream_label, diff --git a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h index 75f9f34cd5..019ab2e4da 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h @@ -18,13 +18,13 @@ #include "api/stats_types.h" #include "api/test/audio_quality_analyzer_interface.h" #include "api/test/track_id_stream_label_map.h" +#include "rtc_base/critical_section.h" #include "rtc_base/numerics/samples_stats_counter.h" namespace webrtc { namespace webrtc_pc_e2e { struct AudioStreamStats { - public: SamplesStatsCounter expand_rate; SamplesStatsCounter accelerate_rate; SamplesStatsCounter preemptive_rate; @@ -42,6 +42,9 @@ class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { const StatsReports& stats_reports) override; void Stop() override; + // Returns audio quality stats per stream label. + std::map GetAudioStreamsStats() const; + private: const std::string& GetStreamLabelFromStatsReport( const StatsReport* stats_report) const; @@ -53,7 +56,9 @@ class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { std::string test_case_name_; TrackIdStreamLabelMap* analyzer_helper_; - std::map streams_stats_; + + rtc::CriticalSection lock_; + std::map streams_stats_ RTC_GUARDED_BY(lock_); }; } // namespace webrtc_pc_e2e