Remove redundant VideoSendStream::rtcp_stats field
its content is duplicated in the report_block_data member
Bug: webrtc:10678
Change-Id: I89421ae4ab5f727a233161924372105e222ed404
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219080
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34039}
diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc
index 244d780..25513e4 100644
--- a/call/video_send_stream.cc
+++ b/call/video_send_stream.cc
@@ -51,8 +51,13 @@
ss << "retransmit_bps: " << retransmit_bitrate_bps << ", ";
ss << "avg_delay_ms: " << avg_delay_ms << ", ";
ss << "max_delay_ms: " << max_delay_ms << ", ";
- ss << "cum_loss: " << rtcp_stats.packets_lost << ", ";
- ss << "max_ext_seq: " << rtcp_stats.extended_highest_sequence_number << ", ";
+ if (report_block_data) {
+ ss << "cum_loss: " << report_block_data->report_block().packets_lost
+ << ", ";
+ ss << "max_ext_seq: "
+ << report_block_data->report_block().extended_highest_sequence_number
+ << ", ";
+ }
ss << "nack: " << rtcp_packet_type_counts.nack_packets << ", ";
ss << "fir: " << rtcp_packet_type_counts.fir_packets << ", ";
ss << "pli: " << rtcp_packet_type_counts.pli_packets;
diff --git a/call/video_send_stream.h b/call/video_send_stream.h
index 5c8906f..fd7a101 100644
--- a/call/video_send_stream.h
+++ b/call/video_send_stream.h
@@ -82,7 +82,6 @@
uint64_t total_packet_send_delay_ms = 0;
StreamDataCounters rtp_stats;
RtcpPacketTypeCounter rtcp_packet_type_counts;
- RtcpStatistics rtcp_stats;
// A snapshot of the most recent Report Block with additional data of
// interest to statistics. Used to implement RTCRemoteInboundRtpStreamStats.
absl::optional<ReportBlockData> report_block_data;
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 9fd5751..0bf4f20 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2661,15 +2661,18 @@
stream_stats.rtp_stats.retransmitted.payload_bytes;
info.retransmitted_packets_sent =
stream_stats.rtp_stats.retransmitted.packets;
- info.packets_lost = stream_stats.rtcp_stats.packets_lost;
info.firs_rcvd = stream_stats.rtcp_packet_type_counts.fir_packets;
info.nacks_rcvd = stream_stats.rtcp_packet_type_counts.nack_packets;
info.plis_rcvd = stream_stats.rtcp_packet_type_counts.pli_packets;
if (stream_stats.report_block_data.has_value()) {
- info.report_block_datas.push_back(stream_stats.report_block_data.value());
+ info.packets_lost =
+ stream_stats.report_block_data->report_block().packets_lost;
+ info.fraction_lost =
+ static_cast<float>(
+ stream_stats.report_block_data->report_block().fraction_lost) /
+ (1 << 8);
+ info.report_block_datas.push_back(*stream_stats.report_block_data);
}
- info.fraction_lost =
- static_cast<float>(stream_stats.rtcp_stats.fraction_lost) / (1 << 8);
info.qp_sum = stream_stats.qp_sum;
info.total_encode_time_ms = stream_stats.total_encode_time_ms;
info.total_encoded_bytes_target = stream_stats.total_encoded_bytes_target;
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 6d29e3d..0c32f8a 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -5585,9 +5585,11 @@
substream.rtcp_packet_type_counts.fir_packets = 14;
substream.rtcp_packet_type_counts.nack_packets = 15;
substream.rtcp_packet_type_counts.pli_packets = 16;
- substream.rtcp_stats.packets_lost = 17;
- substream.rtcp_stats.fraction_lost = 18;
+ webrtc::RTCPReportBlock report_block;
+ report_block.packets_lost = 17;
+ report_block.fraction_lost = 18;
webrtc::ReportBlockData report_block_data;
+ report_block_data.SetReportBlock(report_block, 0);
report_block_data.AddRoundTripTimeSample(19);
substream.report_block_data = report_block_data;
substream.encode_frame_rate = 20.0;
@@ -5621,9 +5623,12 @@
static_cast<int>(2 * substream.rtp_stats.transmitted.packets));
EXPECT_EQ(sender.retransmitted_packets_sent,
2u * substream.rtp_stats.retransmitted.packets);
- EXPECT_EQ(sender.packets_lost, 2 * substream.rtcp_stats.packets_lost);
+ EXPECT_EQ(sender.packets_lost,
+ 2 * substream.report_block_data->report_block().packets_lost);
EXPECT_EQ(sender.fraction_lost,
- static_cast<float>(substream.rtcp_stats.fraction_lost) / (1 << 8));
+ static_cast<float>(
+ substream.report_block_data->report_block().fraction_lost) /
+ (1 << 8));
EXPECT_EQ(sender.rtt_ms, 0);
EXPECT_EQ(sender.codec_name, DefaultCodec().name);
EXPECT_EQ(sender.codec_payload_type, DefaultCodec().id);
@@ -5703,9 +5708,11 @@
substream.rtcp_packet_type_counts.fir_packets = 14;
substream.rtcp_packet_type_counts.nack_packets = 15;
substream.rtcp_packet_type_counts.pli_packets = 16;
- substream.rtcp_stats.packets_lost = 17;
- substream.rtcp_stats.fraction_lost = 18;
+ webrtc::RTCPReportBlock report_block;
+ report_block.packets_lost = 17;
+ report_block.fraction_lost = 18;
webrtc::ReportBlockData report_block_data;
+ report_block_data.SetReportBlock(report_block, 0);
report_block_data.AddRoundTripTimeSample(19);
substream.report_block_data = report_block_data;
substream.encode_frame_rate = 20.0;
@@ -5739,9 +5746,12 @@
static_cast<int>(substream.rtp_stats.transmitted.packets));
EXPECT_EQ(sender.retransmitted_packets_sent,
substream.rtp_stats.retransmitted.packets);
- EXPECT_EQ(sender.packets_lost, substream.rtcp_stats.packets_lost);
+ EXPECT_EQ(sender.packets_lost,
+ substream.report_block_data->report_block().packets_lost);
EXPECT_EQ(sender.fraction_lost,
- static_cast<float>(substream.rtcp_stats.fraction_lost) / (1 << 8));
+ static_cast<float>(
+ substream.report_block_data->report_block().fraction_lost) /
+ (1 << 8));
EXPECT_EQ(sender.rtt_ms, 0);
EXPECT_EQ(sender.codec_name, DefaultCodec().name);
EXPECT_EQ(sender.codec_payload_type, DefaultCodec().id);
diff --git a/video/end_to_end_tests/stats_tests.cc b/video/end_to_end_tests/stats_tests.cc
index 349f551..bb613a5 100644
--- a/video/end_to_end_tests/stats_tests.cc
+++ b/video/end_to_end_tests/stats_tests.cc
@@ -182,9 +182,7 @@
const VideoSendStream::StreamStats& stream_stats = kv.second;
send_stats_filled_[CompoundKey("StatisticsUpdated", kv.first)] |=
- stream_stats.rtcp_stats.packets_lost != 0 ||
- stream_stats.rtcp_stats.extended_highest_sequence_number != 0 ||
- stream_stats.rtcp_stats.fraction_lost != 0;
+ stream_stats.report_block_data.has_value();
send_stats_filled_[CompoundKey("DataCountersUpdated", kv.first)] |=
stream_stats.rtp_stats.fec.packets != 0 ||
diff --git a/video/report_block_stats.cc b/video/report_block_stats.cc
index e3e95f9..bf60364 100644
--- a/video/report_block_stats.cc
+++ b/video/report_block_stats.cc
@@ -31,16 +31,13 @@
ReportBlockStats::~ReportBlockStats() {}
-void ReportBlockStats::Store(uint32_t ssrc, const RtcpStatistics& rtcp_stats) {
+void ReportBlockStats::Store(uint32_t ssrc,
+ int packets_lost,
+ uint32_t extended_highest_sequence_number) {
Report report;
- report.packets_lost = rtcp_stats.packets_lost;
- report.extended_highest_sequence_number =
- rtcp_stats.extended_highest_sequence_number;
- StoreAndAddPacketIncrement(ssrc, report);
-}
+ report.packets_lost = packets_lost;
+ report.extended_highest_sequence_number = extended_highest_sequence_number;
-void ReportBlockStats::StoreAndAddPacketIncrement(uint32_t ssrc,
- const Report& report) {
// Get diff with previous report block.
const auto prev_report = prev_reports_.find(ssrc);
if (prev_report != prev_reports_.end()) {
diff --git a/video/report_block_stats.h b/video/report_block_stats.h
index de4a079..1d11402 100644
--- a/video/report_block_stats.h
+++ b/video/report_block_stats.h
@@ -15,8 +15,6 @@
#include <map>
-#include "modules/rtp_rtcp/include/rtcp_statistics.h"
-
namespace webrtc {
// TODO(nisse): Usefulness of this class is somewhat unclear. The inputs are
@@ -32,7 +30,9 @@
~ReportBlockStats();
// Updates stats and stores report block.
- void Store(uint32_t ssrc, const RtcpStatistics& rtcp_stats);
+ void Store(uint32_t ssrc,
+ int packets_lost,
+ uint32_t extended_highest_sequence_number);
// Returns the total fraction of lost packets (or -1 if less than two report
// blocks have been stored).
@@ -45,10 +45,6 @@
int32_t packets_lost;
};
- // Updates the total number of packets/lost packets.
- // Stores the report.
- void StoreAndAddPacketIncrement(uint32_t ssrc, const Report& report);
-
// The total number of packets/lost packets.
uint32_t num_sequence_numbers_;
uint32_t num_lost_sequence_numbers_;
diff --git a/video/report_block_stats_unittest.cc b/video/report_block_stats_unittest.cc
index 0b02309..bd66e57 100644
--- a/video/report_block_stats_unittest.cc
+++ b/video/report_block_stats_unittest.cc
@@ -13,65 +13,51 @@
#include "test/gtest.h"
namespace webrtc {
+namespace {
-class ReportBlockStatsTest : public ::testing::Test {
- protected:
- ReportBlockStatsTest() {
- // kSsrc1: report 1-3.
- stats1_1_.packets_lost = 10;
- stats1_1_.extended_highest_sequence_number = 24000;
- stats1_2_.packets_lost = 15;
- stats1_2_.extended_highest_sequence_number = 24100;
- stats1_3_.packets_lost = 50;
- stats1_3_.extended_highest_sequence_number = 24200;
- // kSsrc2: report 1,2.
- stats2_1_.packets_lost = 111;
- stats2_1_.extended_highest_sequence_number = 8500;
- stats2_2_.packets_lost = 136;
- stats2_2_.extended_highest_sequence_number = 8800;
- }
+constexpr uint32_t kSsrc1 = 123;
+constexpr uint32_t kSsrc2 = 234;
- const uint32_t kSsrc1 = 123;
- const uint32_t kSsrc2 = 234;
- RtcpStatistics stats1_1_;
- RtcpStatistics stats1_2_;
- RtcpStatistics stats1_3_;
- RtcpStatistics stats2_1_;
- RtcpStatistics stats2_2_;
-};
-
-TEST_F(ReportBlockStatsTest, StoreAndGetFractionLost) {
+TEST(ReportBlockStatsTest, StoreAndGetFractionLost) {
ReportBlockStats stats;
EXPECT_EQ(-1, stats.FractionLostInPercent());
// First report.
- stats.Store(kSsrc1, stats1_1_);
+ stats.Store(kSsrc1, /*packets_lost=*/10,
+ /*extended_highest_sequence_number=*/24'000);
EXPECT_EQ(-1, stats.FractionLostInPercent());
// fl: 100 * (15-10) / (24100-24000) = 5%
- stats.Store(kSsrc1, stats1_2_);
+ stats.Store(kSsrc1, /*packets_lost=*/15,
+ /*extended_highest_sequence_number=*/24'100);
EXPECT_EQ(5, stats.FractionLostInPercent());
// fl: 100 * (50-10) / (24200-24000) = 20%
- stats.Store(kSsrc1, stats1_3_);
+ stats.Store(kSsrc1, /*packets_lost=*/50,
+ /*extended_highest_sequence_number=*/24'200);
EXPECT_EQ(20, stats.FractionLostInPercent());
}
-TEST_F(ReportBlockStatsTest, StoreAndGetFractionLost_TwoSsrcs) {
+TEST(ReportBlockStatsTest, StoreAndGetFractionLost_TwoSsrcs) {
ReportBlockStats stats;
EXPECT_EQ(-1, stats.FractionLostInPercent());
// First report.
- stats.Store(kSsrc1, stats1_1_);
+ stats.Store(kSsrc1, /*packets_lost=*/10,
+ /*extended_highest_sequence_number=*/24'000);
EXPECT_EQ(-1, stats.FractionLostInPercent());
// fl: 100 * (15-10) / (24100-24000) = 5%
- stats.Store(kSsrc1, stats1_2_);
+ stats.Store(kSsrc1, /*packets_lost=*/15,
+ /*extended_highest_sequence_number=*/24'100);
EXPECT_EQ(5, stats.FractionLostInPercent());
// First report, kSsrc2.
- stats.Store(kSsrc2, stats2_1_);
+ stats.Store(kSsrc2, /*packets_lost=*/111,
+ /*extended_highest_sequence_number=*/8'500);
EXPECT_EQ(5, stats.FractionLostInPercent());
// fl: 100 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 7%
- stats.Store(kSsrc2, stats2_2_);
+ stats.Store(kSsrc2, /*packets_lost=*/136,
+ /*extended_highest_sequence_number=*/8'800);
EXPECT_EQ(7, stats.FractionLostInPercent());
}
+} // namespace
} // namespace webrtc
diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc
index 971e42f..1b968ef 100644
--- a/video/send_statistics_proxy.cc
+++ b/video/send_statistics_proxy.cc
@@ -1293,13 +1293,11 @@
if (!stats)
return;
const RTCPReportBlock& report_block = report_block_data.report_block();
- stats->rtcp_stats.fraction_lost = report_block.fraction_lost;
- stats->rtcp_stats.packets_lost = report_block.packets_lost;
- stats->rtcp_stats.extended_highest_sequence_number =
- report_block.extended_highest_sequence_number;
- stats->rtcp_stats.jitter = report_block.jitter;
- uma_container_->report_block_stats_.Store(report_block.source_ssrc,
- stats->rtcp_stats);
+ uma_container_->report_block_stats_.Store(
+ /*ssrc=*/report_block.source_ssrc,
+ /*packets_lost=*/report_block.packets_lost,
+ /*extended_highest_sequence_number=*/
+ report_block.extended_highest_sequence_number);
stats->report_block_data = std::move(report_block_data);
}
diff --git a/video/send_statistics_proxy_unittest.cc b/video/send_statistics_proxy_unittest.cc
index aa13302..d4a7a49 100644
--- a/video/send_statistics_proxy_unittest.cc
+++ b/video/send_statistics_proxy_unittest.cc
@@ -159,11 +159,19 @@
b.rtp_stats.retransmitted.packets);
EXPECT_EQ(a.rtp_stats.fec.packets, b.rtp_stats.fec.packets);
- EXPECT_EQ(a.rtcp_stats.fraction_lost, b.rtcp_stats.fraction_lost);
- EXPECT_EQ(a.rtcp_stats.packets_lost, b.rtcp_stats.packets_lost);
- EXPECT_EQ(a.rtcp_stats.extended_highest_sequence_number,
- b.rtcp_stats.extended_highest_sequence_number);
- EXPECT_EQ(a.rtcp_stats.jitter, b.rtcp_stats.jitter);
+ EXPECT_EQ(a.report_block_data.has_value(),
+ b.report_block_data.has_value());
+ if (a.report_block_data.has_value()) {
+ const RTCPReportBlock& a_rtcp_stats =
+ a.report_block_data->report_block();
+ const RTCPReportBlock& b_rtcp_stats =
+ b.report_block_data->report_block();
+ EXPECT_EQ(a_rtcp_stats.fraction_lost, b_rtcp_stats.fraction_lost);
+ EXPECT_EQ(a_rtcp_stats.packets_lost, b_rtcp_stats.packets_lost);
+ EXPECT_EQ(a_rtcp_stats.extended_highest_sequence_number,
+ b_rtcp_stats.extended_highest_sequence_number);
+ EXPECT_EQ(a_rtcp_stats.jitter, b_rtcp_stats.jitter);
+ }
}
}
@@ -177,46 +185,32 @@
TEST_F(SendStatisticsProxyTest, ReportBlockDataObserver) {
ReportBlockDataObserver* callback = statistics_proxy_.get();
for (uint32_t ssrc : config_.rtp.ssrcs) {
- VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc];
-
// Add statistics with some arbitrary, but unique, numbers.
- uint32_t offset = ssrc * sizeof(RtcpStatistics);
+ uint32_t offset = ssrc * 4;
RTCPReportBlock report_block;
report_block.source_ssrc = ssrc;
report_block.packets_lost = offset;
report_block.extended_highest_sequence_number = offset + 1;
report_block.fraction_lost = offset + 2;
report_block.jitter = offset + 3;
-
- ssrc_stats.rtcp_stats.packets_lost = report_block.packets_lost;
- ssrc_stats.rtcp_stats.extended_highest_sequence_number =
- report_block.extended_highest_sequence_number;
- ssrc_stats.rtcp_stats.fraction_lost = report_block.fraction_lost;
- ssrc_stats.rtcp_stats.jitter = report_block.jitter;
ReportBlockData data;
data.SetReportBlock(report_block, 0);
+ expected_.substreams[ssrc].report_block_data = data;
callback->OnReportBlockDataUpdated(data);
}
for (uint32_t ssrc : config_.rtp.rtx.ssrcs) {
- VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc];
-
// Add statistics with some arbitrary, but unique, numbers.
- uint32_t offset = ssrc * sizeof(RtcpStatistics);
+ uint32_t offset = ssrc * 4;
RTCPReportBlock report_block;
report_block.source_ssrc = ssrc;
report_block.packets_lost = offset;
report_block.extended_highest_sequence_number = offset + 1;
report_block.fraction_lost = offset + 2;
report_block.jitter = offset + 3;
-
- ssrc_stats.rtcp_stats.packets_lost = report_block.packets_lost;
- ssrc_stats.rtcp_stats.extended_highest_sequence_number =
- report_block.extended_highest_sequence_number;
- ssrc_stats.rtcp_stats.fraction_lost = report_block.fraction_lost;
- ssrc_stats.rtcp_stats.jitter = report_block.jitter;
ReportBlockData data;
data.SetReportBlock(report_block, 0);
+ expected_.substreams[ssrc].report_block_data = data;
callback->OnReportBlockDataUpdated(data);
}