Add corruption probability to video receive stream stats log. Bug: webrtc:358039777 Change-Id: Id88b8542dd6934b30a4b2c42bae0ed399ccec5b6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/468420 Auto-Submit: Erik Språng <sprang@webrtc.org> Reviewed-by: Per Kjellander <perkj@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47589}
diff --git a/call/video_receive_stream.cc b/call/video_receive_stream.cc index 959c5b4..06e33f6 100644 --- a/call/video_receive_stream.cc +++ b/call/video_receive_stream.cc
@@ -12,6 +12,7 @@ #include <cstddef> #include <cstdint> +#include <optional> #include <string> #include <utility> @@ -57,7 +58,8 @@ VideoReceiveStreamInterface::Stats::~Stats() = default; std::string VideoReceiveStreamInterface::Stats::ToString( - int64_t time_ms) const { + int64_t time_ms, + std::optional<Stats> previous_stats) const { StringBuilder ss; ss << "VideoReceiveStreamInterface stats: " << time_ms << ", {ssrc: " << ssrc << ", "; @@ -100,6 +102,17 @@ ss << "nackCount: " << rtcp_packet_type_counts.nack_packets << ", "; ss << "firCount: " << rtcp_packet_type_counts.fir_packets << ", "; ss << "pliCount: " << rtcp_packet_type_counts.pli_packets; + if (previous_stats.has_value() && + previous_stats->corruption_score_sum.has_value() && + corruption_score_sum.has_value() && + previous_stats->corruption_score_count < corruption_score_count) { + ss << "averageCorruptionProbability: " + << 100.0 * + (*previous_stats->corruption_score_sum - *corruption_score_sum) / + static_cast<double>(previous_stats->corruption_score_count - + corruption_score_count) + << "%"; + } ss << "}"; return ss.Release(); }
diff --git a/call/video_receive_stream.h b/call/video_receive_stream.h index ce19d85..a227891 100644 --- a/call/video_receive_stream.h +++ b/call/video_receive_stream.h
@@ -85,7 +85,8 @@ struct Stats { Stats(); ~Stats(); - std::string ToString(int64_t time_ms) const; + std::string ToString(int64_t time_ms, + std::optional<Stats> previous_stats) const; int network_frame_rate = 0; int decode_frame_rate = 0;
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index 9ae3524..063c95b 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc
@@ -3529,6 +3529,7 @@ WebRtcVideoReceiveChannel::WebRtcVideoReceiveStream:: ~WebRtcVideoReceiveStream() { call_->DestroyVideoReceiveStream(stream_); + previous_stats_ = std::nullopt; if (flexfec_stream_) call_->DestroyFlexfecReceiveStream(flexfec_stream_); } @@ -3721,6 +3722,7 @@ /*generate_key_frame=*/false); call_->DestroyVideoReceiveStream(stream_); stream_ = nullptr; + previous_stats_ = std::nullopt; } if (flexfec_stream_) { @@ -3972,7 +3974,10 @@ // present if DLRR is enabled. if (log_stats) - RTC_LOG(LS_INFO) << stats.ToString(env_.clock().TimeInMilliseconds()); + RTC_LOG(LS_INFO) << stats.ToString(env_.clock().TimeInMilliseconds(), + previous_stats_); + + previous_stats_ = stats; return info; }
diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index a08c919..8b3efd5 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h
@@ -685,6 +685,7 @@ VideoReceiveStreamInterface::Config config_; FlexfecReceiveStream::Config flexfec_config_; FlexfecReceiveStream* flexfec_stream_; + std::optional<VideoReceiveStreamInterface::Stats> previous_stats_; Mutex sink_lock_; VideoSinkInterface<VideoFrame>* sink_ RTC_GUARDED_BY(sink_lock_);