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}
This commit is contained in:
parent
1973ba6ef4
commit
5bf9def61b
@ -1235,9 +1235,8 @@ void RTCStatsCollector::OnDataChannelClosed(DataChannel* channel) {
|
||||
RTC_DCHECK(signaling_thread_->IsCurrent());
|
||||
// Only channels that have been fully opened (and have increased the
|
||||
// |data_channels_opened_| counter) increase the closed counter.
|
||||
if (internal_record_.opened_data_channels.find(
|
||||
reinterpret_cast<uintptr_t>(channel)) !=
|
||||
internal_record_.opened_data_channels.end()) {
|
||||
if (internal_record_.opened_data_channels.erase(
|
||||
reinterpret_cast<uintptr_t>(channel))) {
|
||||
++internal_record_.data_channels_closed;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1463,6 +1463,39 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
|
||||
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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user