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

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_sender.cc

Issue 1478253002: Add histogram stats for send delay for a sent video stream. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years 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/modules/rtp_rtcp/source/rtp_sender.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
index d004cd8d4fbe6239d6515a2d328cb777807dc33b..abaa4b87151c3dbb69973358b552d890c7bfe744 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
@@ -119,7 +119,8 @@ RTPSender::RTPSender(
TransportFeedbackObserver* transport_feedback_observer,
BitrateStatisticsObserver* bitrate_callback,
FrameCountObserver* frame_count_observer,
- SendSideDelayObserver* send_side_delay_observer)
+ SendSideDelayObserver* send_side_delay_observer,
+ SendPacketObserver* send_packet_observer)
: clock_(clock),
// TODO(holmer): Remove this conversion when we remove the use of
// TickTime.
@@ -157,6 +158,7 @@ RTPSender::RTPSender(
rtp_stats_callback_(NULL),
frame_count_observer_(frame_count_observer),
send_side_delay_observer_(send_side_delay_observer),
+ send_packet_observer_(send_packet_observer),
// RTP variables
start_timestamp_forced_(false),
start_timestamp_(0),
@@ -885,9 +887,7 @@ bool RTPSender::TimeToSendPacket(uint16_t sequence_number,
// Packet cannot be found. Allow sending to continue.
return true;
}
- if (!retransmission && capture_time_ms > 0) {
- UpdateDelayStatistics(capture_time_ms, clock_->TimeInMilliseconds());
- }
+
int rtx;
{
CriticalSectionScoped lock(send_critsect_.get());
@@ -946,6 +946,11 @@ bool RTPSender::PrepareAndSendPacket(uint8_t* buffer,
transport_feedback_observer_->AddPacket(options.packet_id, length, true);
}
+ if (!is_retransmit && !send_over_rtx) {
+ UpdateDelayStatistics(capture_time_ms, now_ms);
+ UpdateOnSendPacket(capture_time_ms, &options.packet_id);
+ }
+
bool ret = SendPacketToNetwork(buffer_to_send_ptr, length, options);
if (ret) {
CriticalSectionScoped lock(send_critsect_.get());
@@ -1065,12 +1070,12 @@ int32_t RTPSender::SendToNetwork(uint8_t* buffer,
}
return 0;
}
- if (capture_time_ms > 0) {
- UpdateDelayStatistics(capture_time_ms, now_ms);
- }
+ PacketOptions options;
+ UpdateDelayStatistics(capture_time_ms, now_ms);
+ UpdateOnSendPacket(capture_time_ms, &options.packet_id);
stefan-webrtc 2015/12/10 08:37:49 I don't think we have to add it here since this pa
åsapersson 2015/12/15 14:28:26 OK, removed from this path.
size_t length = payload_length + rtp_header_length;
- bool sent = SendPacketToNetwork(buffer, length, PacketOptions());
+ bool sent = SendPacketToNetwork(buffer, length, options);
// Mark the packet as sent in the history even if send failed. Dropping a
// packet here should be treated as any other packet drop so we should be
@@ -1089,7 +1094,7 @@ int32_t RTPSender::SendToNetwork(uint8_t* buffer,
}
void RTPSender::UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms) {
- if (!send_side_delay_observer_)
+ if (!send_side_delay_observer_ || capture_time_ms <= 0)
return;
uint32_t ssrc;
@@ -1121,6 +1126,22 @@ void RTPSender::UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms) {
ssrc);
}
+void RTPSender::UpdateOnSendPacket(int64_t capture_time_ms, int* packet_id) {
+ if (!send_packet_observer_ || !transport_sequence_number_allocator_ ||
+ capture_time_ms <= 0)
+ return;
+
+ uint32_t ssrc;
+ {
+ CriticalSectionScoped lock(send_critsect_.get());
+ ssrc = ssrc_;
stefan-webrtc 2015/12/10 08:37:49 The ssrc is available without locking from the rtp
åsapersson 2015/12/15 14:28:26 Done.
+ }
+ if (*packet_id == -1)
+ *packet_id = transport_sequence_number_allocator_->AllocateSequenceNumber();
stefan-webrtc 2015/12/10 08:37:49 Can we move this out of this method and call it on
åsapersson 2015/12/15 14:28:26 Done.
+
+ send_packet_observer_->OnSendPacket(*packet_id, capture_time_ms, ssrc);
stefan-webrtc 2015/12/10 08:37:49 Is it possible to unify this callback with the cal
åsapersson 2015/12/15 14:28:26 I guess it can be done if we do not want to do it
stefan-webrtc 2016/01/18 19:48:25 Why doesn't it work per stream? I don't think I un
+}
+
void RTPSender::ProcessBitrate() {
CriticalSectionScoped cs(send_critsect_.get());
total_bitrate_sent_.Process();

Powered by Google App Engine
This is Rietveld 408576698