diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 08df2f8817..1befff95bf 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -498,6 +498,8 @@ if (!build_with_chromium) { "../../../api:rtc_stats_api", "../../../api:stats_observer_interface", "../../../rtc_base:logging", + "../../../rtc_base:rtc_base_approved", + "../../../rtc_base/synchronization:mutex", ] } diff --git a/test/pc/e2e/stats_poller.cc b/test/pc/e2e/stats_poller.cc index 5f1424cd29..ecf640be29 100644 --- a/test/pc/e2e/stats_poller.cc +++ b/test/pc/e2e/stats_poller.cc @@ -13,6 +13,7 @@ #include #include "rtc_base/logging.h" +#include "rtc_base/synchronization/mutex.h" namespace webrtc { namespace webrtc_pc_e2e { @@ -29,18 +30,28 @@ void InternalStatsObserver::OnStatsDelivered( } StatsPoller::StatsPoller(std::vector observers, - std::map peers) { + std::map peers) + : observers_(observers) { + webrtc::MutexLock lock(&mutex_); for (auto& peer : peers) { pollers_.push_back(rtc::make_ref_counted( - peer.first, peer.second, observers)); + peer.first, peer.second, observers_)); } } void StatsPoller::PollStatsAndNotifyObservers() { + webrtc::MutexLock lock(&mutex_); for (auto& poller : pollers_) { poller->PollStats(); } } +void StatsPoller::RegisterParticipantInCall(absl::string_view peer_name, + TestPeer* peer) { + webrtc::MutexLock lock(&mutex_); + pollers_.push_back(rtc::make_ref_counted( + peer_name, peer, observers_)); +} + } // namespace webrtc_pc_e2e } // namespace webrtc diff --git a/test/pc/e2e/stats_poller.h b/test/pc/e2e/stats_poller.h index 157a147834..2b3f52ca22 100644 --- a/test/pc/e2e/stats_poller.h +++ b/test/pc/e2e/stats_poller.h @@ -19,6 +19,8 @@ #include "api/peer_connection_interface.h" #include "api/stats/rtc_stats_collector_callback.h" #include "api/test/stats_observer_interface.h" +#include "rtc_base/synchronization/mutex.h" +#include "rtc_base/thread_annotations.h" #include "test/pc/e2e/test_peer.h" namespace webrtc { @@ -28,12 +30,10 @@ namespace webrtc_pc_e2e { // objects subscribed. class InternalStatsObserver : public RTCStatsCollectorCallback { public: - InternalStatsObserver(std::string pc_label, + InternalStatsObserver(absl::string_view pc_label, TestPeer* peer, std::vector observers) - : pc_label_(std::move(pc_label)), - peer_(peer), - observers_(std::move(observers)) {} + : pc_label_(pc_label), peer_(peer), observers_(std::move(observers)) {} void PollStats(); @@ -56,8 +56,13 @@ class StatsPoller { void PollStatsAndNotifyObservers(); + void RegisterParticipantInCall(absl::string_view peer_name, TestPeer* peer); + private: - std::vector> pollers_; + const std::vector observers_; + webrtc::Mutex mutex_; + std::vector> pollers_ + RTC_GUARDED_BY(mutex_); }; } // namespace webrtc_pc_e2e