RTCStatsCollector: Remove closed channels from opened set.
This is a problem if a data channel is re-opened or a new data channel
occupies the same space in memory as a previously closed data channel.
Unittest updated to cover this (failed before fix, now passes).
BUG=webrtc:7181
Review-Url: https://codereview.webrtc.org/2746393003
Cr-Commit-Position: refs/heads/master@{#17304}
diff --git a/webrtc/pc/rtcstatscollector_unittest.cc b/webrtc/pc/rtcstatscollector_unittest.cc
index ea7b34a..8fd00c6 100644
--- a/webrtc/pc/rtcstatscollector_unittest.cc
+++ b/webrtc/pc/rtcstatscollector_unittest.cc
@@ -1463,6 +1463,39 @@
report->Get("RTCPeerConnection")->cast_to<
RTCPeerConnectionStats>());
}
+
+ // Re-opening a data channel (or opening a new data channel that is re-using
+ // the same address in memory) should increase the opened count.
+ dummy_channel_b->SignalOpened(dummy_channel_b.get());
+
+ {
+ collector_->ClearCachedStatsReport();
+ rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
+ RTCPeerConnectionStats expected("RTCPeerConnection",
+ report->timestamp_us());
+ expected.data_channels_opened = 3;
+ expected.data_channels_closed = 1;
+ ASSERT_TRUE(report->Get("RTCPeerConnection"));
+ EXPECT_EQ(expected,
+ report->Get("RTCPeerConnection")->cast_to<
+ RTCPeerConnectionStats>());
+ }
+
+ dummy_channel_a->SignalClosed(dummy_channel_a.get());
+ dummy_channel_b->SignalClosed(dummy_channel_b.get());
+
+ {
+ collector_->ClearCachedStatsReport();
+ rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
+ RTCPeerConnectionStats expected("RTCPeerConnection",
+ report->timestamp_us());
+ expected.data_channels_opened = 3;
+ expected.data_channels_closed = 3;
+ ASSERT_TRUE(report->Get("RTCPeerConnection"));
+ EXPECT_EQ(expected,
+ report->Get("RTCPeerConnection")->cast_to<
+ RTCPeerConnectionStats>());
+ }
}
TEST_F(RTCStatsCollectorTest,