[PCLF] Add ability to add peers on the fly into stats network reporter
Bug: b/198796179 Change-Id: I6dc92db7ebace008e56f376d895352da317c9e3e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231220 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#34924}
This commit is contained in:
parent
cff2de42ba
commit
200cfd6c7d
@ -67,6 +67,8 @@ std::map<rtc::IPAddress, std::string> PopulateIpToPeer(
|
||||
std::map<rtc::IPAddress, std::string> out;
|
||||
for (const auto& entry : peer_endpoints) {
|
||||
for (const EmulatedEndpoint* const endpoint : entry.second) {
|
||||
RTC_CHECK(out.find(endpoint->GetPeerLocalAddress()) == out.end())
|
||||
<< "Two peers can't share the same endpoint";
|
||||
out.emplace(endpoint->GetPeerLocalAddress(), entry.first);
|
||||
}
|
||||
}
|
||||
@ -85,6 +87,7 @@ StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
|
||||
void StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
Start() {
|
||||
MutexLock lock(&mutex_);
|
||||
// Check that network stats are clean before test execution.
|
||||
for (const auto& entry : peer_endpoints_) {
|
||||
std::unique_ptr<EmulatedNetworkStats> stats =
|
||||
@ -94,10 +97,26 @@ void StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
}
|
||||
}
|
||||
|
||||
void StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
AddPeer(absl::string_view peer_name,
|
||||
std::vector<EmulatedEndpoint*> endpoints) {
|
||||
MutexLock lock(&mutex_);
|
||||
// When new peer is added not in the constructor, don't check if it has empty
|
||||
// stats, because their endpoint could be used for traffic before.
|
||||
peer_endpoints_.emplace(peer_name, std::move(endpoints));
|
||||
for (const EmulatedEndpoint* const endpoint : endpoints) {
|
||||
RTC_CHECK(ip_to_peer_.find(endpoint->GetPeerLocalAddress()) ==
|
||||
ip_to_peer_.end())
|
||||
<< "Two peers can't share the same endpoint";
|
||||
ip_to_peer_.emplace(endpoint->GetPeerLocalAddress(), peer_name);
|
||||
}
|
||||
}
|
||||
|
||||
std::map<std::string,
|
||||
StatsBasedNetworkQualityMetricsReporter::NetworkLayerStats>
|
||||
StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
GetStats() {
|
||||
MutexLock lock(&mutex_);
|
||||
std::map<std::string, NetworkLayerStats> peer_to_stats;
|
||||
std::map<std::string, std::vector<std::string>> sender_to_receivers;
|
||||
for (const auto& entry : peer_endpoints_) {
|
||||
@ -125,6 +144,12 @@ StatsBasedNetworkQualityMetricsReporter::NetworkLayerStatsCollector::
|
||||
return peer_to_stats;
|
||||
}
|
||||
|
||||
void StatsBasedNetworkQualityMetricsReporter::AddPeer(
|
||||
absl::string_view peer_name,
|
||||
std::vector<EmulatedEndpoint*> endpoints) {
|
||||
collector_.AddPeer(peer_name, std::move(endpoints));
|
||||
}
|
||||
|
||||
void StatsBasedNetworkQualityMetricsReporter::Start(
|
||||
absl::string_view test_case_name,
|
||||
const TrackIdStreamInfoMap* reporter_helper) {
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
namespace webrtc {
|
||||
namespace webrtc_pc_e2e {
|
||||
|
||||
// TODO(titovartem): make this class testable and add tests.
|
||||
class StatsBasedNetworkQualityMetricsReporter
|
||||
: public PeerConnectionE2EQualityTestFixture::QualityMetricsReporter {
|
||||
public:
|
||||
@ -44,6 +45,9 @@ class StatsBasedNetworkQualityMetricsReporter
|
||||
clock_(network_emulation->time_controller()->GetClock()) {}
|
||||
~StatsBasedNetworkQualityMetricsReporter() override = default;
|
||||
|
||||
void AddPeer(absl::string_view peer_name,
|
||||
std::vector<EmulatedEndpoint*> endpoints);
|
||||
|
||||
// Network stats must be empty when this method will be invoked.
|
||||
void Start(absl::string_view test_case_name,
|
||||
const TrackIdStreamInfoMap* reporter_helper) override;
|
||||
@ -79,11 +83,16 @@ class StatsBasedNetworkQualityMetricsReporter
|
||||
|
||||
void Start();
|
||||
|
||||
void AddPeer(absl::string_view peer_name,
|
||||
std::vector<EmulatedEndpoint*> endpoints);
|
||||
|
||||
std::map<std::string, NetworkLayerStats> GetStats();
|
||||
|
||||
private:
|
||||
const std::map<std::string, std::vector<EmulatedEndpoint*>> peer_endpoints_;
|
||||
const std::map<rtc::IPAddress, std::string> ip_to_peer_;
|
||||
Mutex mutex_;
|
||||
std::map<std::string, std::vector<EmulatedEndpoint*>> peer_endpoints_
|
||||
RTC_GUARDED_BY(mutex_);
|
||||
std::map<rtc::IPAddress, std::string> ip_to_peer_ RTC_GUARDED_BY(mutex_);
|
||||
NetworkEmulationManager* const network_emulation_;
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user