Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: webrtc/logging/rtc_event_log/rtc_event_log.cc

Issue 2666533002: Add probe logging to RtcEventLog. (Closed)
Patch Set: Fix comments. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/logging/rtc_event_log/rtc_event_log.cc
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log.cc b/webrtc/logging/rtc_event_log/rtc_event_log.cc
index b545d6453d7197f34341a61b1c5ca3a6a1dd8600..7833d816c63f4556bf186b7244c937d75604cd45 100644
--- a/webrtc/logging/rtc_event_log/rtc_event_log.cc
+++ b/webrtc/logging/rtc_event_log/rtc_event_log.cc
@@ -69,6 +69,11 @@ class RtcEventLogImpl final : public RtcEventLog {
MediaType media_type,
const uint8_t* header,
size_t packet_length) override;
+ void LogRtpHeader(PacketDirection direction,
+ MediaType media_type,
+ const uint8_t* header,
+ size_t packet_length,
+ int probe_cluster_id) override;
void LogRtcpPacket(PacketDirection direction,
MediaType media_type,
const uint8_t* packet,
@@ -79,9 +84,19 @@ class RtcEventLogImpl final : public RtcEventLog {
int32_t total_packets) override;
void LogAudioNetworkAdaptation(
const AudioNetworkAdaptor::EncoderRuntimeConfig& config) override;
+ void LogProbeClusterCreated(int id,
+ int bitrate_bps,
+ int min_probes,
+ int min_bytes) override;
+ void LogProbeResultSuccess(int id, int bitrate_bps) override;
+ void LogProbeResultFailure(int id,
+ ProbeFailureReason failure_reason) override;
private:
void StoreEvent(std::unique_ptr<rtclog::Event>* event);
+ void LogProbeResult(int id,
+ rtclog::BweProbeResult::ResultType result,
+ int bitrate_bps);
// Message queue for passing control messages to the logging thread.
SwapQueue<RtcEventLogHelperThread::ControlMessage> message_queue_;
@@ -129,6 +144,20 @@ rtclog::MediaType ConvertMediaType(MediaType media_type) {
return rtclog::ANY;
}
+rtclog::BweProbeResult::ResultType ConvertProbeResultType(
+ ProbeFailureReason failure_reason) {
+ switch (failure_reason) {
+ case kInvalidSendReceiveInterval:
+ return rtclog::BweProbeResult::INVALID_SEND_RECEIVE_INTERVAL;
+ case kInvalidSendReceiveRatio:
+ return rtclog::BweProbeResult::INVALID_SEND_RECEIVE_RATIO;
+ case kTimeout:
+ return rtclog::BweProbeResult::TIMEOUT;
+ }
+ RTC_NOTREACHED();
+ return rtclog::BweProbeResult::SUCCESS;
+}
+
// The RTP and RTCP buffers reserve space for twice the expected number of
// sent packets because they also contain received packets.
static const int kEventsPerSecond = 1000;
@@ -338,6 +367,15 @@ void RtcEventLogImpl::LogRtpHeader(PacketDirection direction,
MediaType media_type,
const uint8_t* header,
size_t packet_length) {
+ LogRtpHeader(direction, media_type, header, packet_length,
+ PacketInfo::kNotAProbe);
+}
+
+void RtcEventLogImpl::LogRtpHeader(PacketDirection direction,
+ MediaType media_type,
+ const uint8_t* header,
+ size_t packet_length,
+ int probe_cluster_id) {
// Read header length (in bytes) from packet data.
if (packet_length < 12u) {
return; // Don't read outside the packet.
@@ -361,6 +399,8 @@ void RtcEventLogImpl::LogRtpHeader(PacketDirection direction,
rtp_event->mutable_rtp_packet()->set_type(ConvertMediaType(media_type));
rtp_event->mutable_rtp_packet()->set_packet_length(packet_length);
rtp_event->mutable_rtp_packet()->set_header(header, header_length);
+ if (probe_cluster_id != PacketInfo::kNotAProbe)
+ rtp_event->mutable_rtp_packet()->set_probe_cluster_id(probe_cluster_id);
StoreEvent(&rtp_event);
}
@@ -459,6 +499,48 @@ void RtcEventLogImpl::LogAudioNetworkAdaptation(
StoreEvent(&event);
}
+void RtcEventLogImpl::LogProbeClusterCreated(int id,
+ int bitrate_bps,
+ int min_probes,
+ int min_bytes) {
+ std::unique_ptr<rtclog::Event> event(new rtclog::Event());
+ event->set_timestamp_us(rtc::TimeMicros());
+ event->set_type(rtclog::Event::BWE_PROBE_CLUSTER_CREATED_EVENT);
+
+ auto probe_cluster = event->mutable_probe_cluster();
+ probe_cluster->set_id(id);
+ probe_cluster->set_bitrate_bps(bitrate_bps);
+ probe_cluster->set_min_probes(min_probes);
+ probe_cluster->set_min_bytes(min_bytes);
+ StoreEvent(&event);
+}
+
+void RtcEventLogImpl::LogProbeResultSuccess(int id, int bitrate_bps) {
+ LogProbeResult(id, rtclog::BweProbeResult::SUCCESS, bitrate_bps);
+}
+
+void RtcEventLogImpl::LogProbeResultFailure(int id,
+ ProbeFailureReason failure_reason) {
+ rtclog::BweProbeResult::ResultType result =
+ ConvertProbeResultType(failure_reason);
+ LogProbeResult(id, result, -1);
+}
+
+void RtcEventLogImpl::LogProbeResult(int id,
+ rtclog::BweProbeResult::ResultType result,
+ int bitrate_bps) {
+ std::unique_ptr<rtclog::Event> event(new rtclog::Event());
+ event->set_timestamp_us(rtc::TimeMicros());
+ event->set_type(rtclog::Event::BWE_PROBE_RESULT_EVENT);
+
+ auto probe_result = event->mutable_probe_result();
+ probe_result->set_id(id);
+ probe_result->set_result(result);
+ if (result == rtclog::BweProbeResult::SUCCESS)
+ probe_result->set_bitrate_bps(bitrate_bps);
+ StoreEvent(&event);
+}
+
void RtcEventLogImpl::StoreEvent(std::unique_ptr<rtclog::Event>* event) {
if (!event_queue_.Insert(event)) {
LOG(LS_ERROR) << "WebRTC event log queue full. Dropping event.";

Powered by Google App Engine
This is Rietveld 408576698