Switch video_{send,recv}_stream to StringBuilder
It's been shown that it's hard to estimate the size of the debug
messages that these functions build; fixed size buffers are not
worth the effort to maintain.
Example CL that triggered an overflow:
https://webrtc-review.googlesource.com/c/src/+/396640
- possibly because a debug message logged an extra parameter.
Bug: None
Change-Id: I47d924bb5d490d2165cbc441c307cb2396c7ce37
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396721
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44950}
diff --git a/call/video_receive_stream.cc b/call/video_receive_stream.cc
index 3bfb352..c16cd59 100644
--- a/call/video_receive_stream.cc
+++ b/call/video_receive_stream.cc
@@ -36,8 +36,7 @@
}
std::string VideoReceiveStreamInterface::Decoder::ToString() const {
- char buf[1024];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "{payload_type: " << payload_type;
ss << ", payload_name: " << video_format.name;
ss << ", codec_params: {";
@@ -48,8 +47,8 @@
}
ss << it->first << ": " << it->second;
}
- ss << '}';
- ss << '}';
+ ss << "}";
+ ss << "}";
return ss.str();
}
@@ -59,8 +58,7 @@
std::string VideoReceiveStreamInterface::Stats::ToString(
int64_t time_ms) const {
- char buf[2048];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "VideoReceiveStreamInterface stats: " << time_ms << ", {ssrc: " << ssrc
<< ", ";
ss << "total_bps: " << total_bitrate_bps << ", ";
@@ -102,7 +100,7 @@
ss << "nackCount: " << rtcp_packet_type_counts.nack_packets << ", ";
ss << "firCount: " << rtcp_packet_type_counts.fir_packets << ", ";
ss << "pliCount: " << rtcp_packet_type_counts.pli_packets;
- ss << '}';
+ ss << "}";
return ss.str();
}
@@ -119,21 +117,20 @@
VideoReceiveStreamInterface::Config::Config::~Config() = default;
std::string VideoReceiveStreamInterface::Config::ToString() const {
- char buf[4 * 1024];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "{decoders: [";
for (size_t i = 0; i < decoders.size(); ++i) {
ss << decoders[i].ToString();
if (i != decoders.size() - 1)
ss << ", ";
}
- ss << ']';
+ ss << "]";
ss << ", rtp: " << rtp.ToString();
ss << ", renderer: " << (renderer ? "(renderer)" : "nullptr");
ss << ", render_delay_ms: " << render_delay_ms;
if (!sync_group.empty())
ss << ", sync_group: " << sync_group;
- ss << '}';
+ ss << "}";
return ss.str();
}
@@ -143,8 +140,7 @@
VideoReceiveStreamInterface::Config::Rtp::~Rtp() = default;
std::string VideoReceiveStreamInterface::Config::Rtp::ToString() const {
- char buf[2 * 1024];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "{remote_ssrc: " << remote_ssrc;
ss << ", local_ssrc: " << local_ssrc;
ss << ", rtcp_mode: "
@@ -153,9 +149,9 @@
ss << ", rtcp_xr: ";
ss << "{receiver_reference_time_report: "
<< (rtcp_xr.receiver_reference_time_report ? "on" : "off");
- ss << '}';
- ss << ", lntf: {enabled: " << (lntf.enabled ? "true" : "false") << '}';
- ss << ", nack: {rtp_history_ms: " << nack.rtp_history_ms << '}';
+ ss << "}";
+ ss << ", lntf: {enabled: " << (lntf.enabled ? "true" : "false") << "}";
+ ss << ", nack: {rtp_history_ms: " << nack.rtp_history_ms << "}";
ss << ", ulpfec_payload_type: " << ulpfec_payload_type;
ss << ", red_type: " << red_payload_type;
ss << ", rtx_ssrc: " << rtx_ssrc;
@@ -163,13 +159,13 @@
for (auto& kv : rtx_associated_payload_types) {
ss << kv.first << " (pt) -> " << kv.second << " (apt), ";
}
- ss << '}';
+ ss << "}";
ss << ", raw_payload_types: {";
for (const auto& pt : raw_payload_types) {
ss << pt << ", ";
}
- ss << '}';
- ss << '}';
+ ss << "}";
+ ss << "}";
return ss.str();
}
diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc
index 79a911c..e68f73b 100644
--- a/call/video_send_stream.cc
+++ b/call/video_send_stream.cc
@@ -42,8 +42,7 @@
VideoSendStream::StreamStats::~StreamStats() = default;
std::string VideoSendStream::StreamStats::ToString() const {
- char buf[1024];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "type: " << StreamTypeToString(type);
if (referenced_media_ssrc.has_value())
ss << " (for: " << referenced_media_ssrc.value() << ")";
@@ -71,8 +70,7 @@
VideoSendStream::Stats::~Stats() = default;
std::string VideoSendStream::Stats::ToString(int64_t time_ms) const {
- char buf[2048];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "VideoSendStream stats: " << time_ms << ", {";
ss << "input_fps: " << StringFormat("%.1f", input_frame_rate) << ", ";
ss << "encode_fps: " << encode_frame_rate << ", ";
@@ -90,13 +88,13 @@
<< ", ";
ss << "#cpu_adaptations: " << number_of_cpu_adapt_changes << ", ";
ss << "#quality_adaptations: " << number_of_quality_adapt_changes;
- ss << '}';
+ ss << "}";
for (const auto& substream : substreams) {
if (substream.second.type ==
VideoSendStream::StreamStats::StreamType::kMedia) {
ss << " {ssrc: " << substream.first << ", ";
ss << substream.second.ToString();
- ss << '}';
+ ss << "}";
}
}
return ss.str();
@@ -113,8 +111,7 @@
VideoSendStream::Config::Config::~Config() = default;
std::string VideoSendStream::Config::ToString() const {
- char buf[2 * 1024];
- SimpleStringBuilder ss(buf);
+ StringBuilder ss;
ss << "{encoder_settings: { experiment_cpu_load_estimator: "
<< (encoder_settings.experiment_cpu_load_estimator ? "on" : "off") << "}}";
ss << ", rtp: " << rtp.ToString();
@@ -124,7 +121,7 @@
ss << ", target_delay_ms: " << target_delay_ms;
ss << ", suspend_below_min_bitrate: "
<< (suspend_below_min_bitrate ? "on" : "off");
- ss << '}';
+ ss << "}";
return ss.str();
}