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

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.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 4 years, 8 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
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/video/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
index f350effc2178f10ea78b6d4fe367436ecc02794e..d04ff4d200aa80c75fae2ca65509886e162f27b5 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
@@ -122,6 +122,11 @@ class MockTransportSequenceNumberAllocator
MOCK_METHOD0(AllocateSequenceNumber, uint16_t());
};
+class MockSendPacketObserver : public SendPacketObserver {
+ public:
+ MOCK_METHOD3(OnSendPacket, void(uint16_t, int64_t, uint32_t));
+};
+
class RtpSenderTest : public ::testing::Test {
protected:
RtpSenderTest()
@@ -137,10 +142,10 @@ class RtpSenderTest : public ::testing::Test {
void SetUp() override { SetUpRtpSender(true); }
void SetUpRtpSender(bool pacer) {
- rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_,
- pacer ? &mock_paced_sender_ : nullptr,
- &seq_num_allocator_, nullptr, nullptr,
- nullptr, nullptr, &mock_rtc_event_log_));
+ rtp_sender_.reset(new RTPSender(
+ false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr,
+ &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr,
+ &mock_rtc_event_log_, &send_packet_observer_));
rtp_sender_->SetSequenceNumber(kSeqNum);
}
@@ -148,6 +153,7 @@ class RtpSenderTest : public ::testing::Test {
MockRtcEventLog mock_rtc_event_log_;
MockRtpPacketSender mock_paced_sender_;
MockTransportSequenceNumberAllocator seq_num_allocator_;
+ MockSendPacketObserver send_packet_observer_;
std::unique_ptr<RTPSender> rtp_sender_;
int payload_;
LoopbackTransportTest transport_;
@@ -185,6 +191,20 @@ class RtpSenderTest : public ::testing::Test {
packet_, payload_length, rtp_length, capture_time_ms,
kAllowRetransmission, RtpPacketSender::kNormalPriority));
}
+
+ void SendGenericPayload() {
+ const uint8_t kPayload[] = {47, 11, 32, 93, 89};
+ const uint32_t kTimestamp = 1234;
+ const uint8_t kPayloadType = 127;
+ const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds();
+ char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
+ EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000,
+ 0, 1500));
+
+ EXPECT_EQ(0, rtp_sender_->SendOutgoingData(
+ kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs,
+ kPayload, sizeof(kPayload), nullptr));
+ }
};
// TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our
@@ -479,21 +499,13 @@ TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
kRtpExtensionTransportSequenceNumber,
kTransportSequenceNumberExtensionId));
- char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
- const uint8_t payload_type = 127;
- ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
- 0, 1500));
- // Create a dummy payload of 5 bytes.
- uint8_t payload[] = {47, 11, 32, 93, 89};
-
- const uint16_t kTransportSequenceNumber = 17;
EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
.WillOnce(testing::Return(kTransportSequenceNumber));
- const uint32_t kTimestamp = 1234;
- const int64_t kCaptureTimeMs = 4321;
- ASSERT_EQ(0, rtp_sender_->SendOutgoingData(
- kVideoFrameKey, payload_type, kTimestamp, kCaptureTimeMs,
- payload, sizeof(payload), nullptr));
+ EXPECT_CALL(send_packet_observer_,
+ OnSendPacket(kTransportSequenceNumber, _, _))
+ .Times(1);
+
+ SendGenericPayload();
RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
transport_.last_sent_packet_len_);
@@ -509,6 +521,19 @@ TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
rtp_header.extension.transportSequenceNumber);
}
+TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) {
+ EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls.
+ LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
+
+ EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
+ .WillOnce(testing::Return(kTransportSequenceNumber));
+ EXPECT_CALL(send_packet_observer_,
+ OnSendPacket(kTransportSequenceNumber, _, _))
+ .Times(1);
+
+ SendGenericPayload();
+}
+
// Test CVO header extension is only set when marker bit is true.
TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) {
rtp_sender_->SetVideoRotation(kRotation);
@@ -947,11 +972,66 @@ TEST_F(RtpSenderTest, SendPadding) {
EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
}
+TEST_F(RtpSenderTest, OnSendPacketUpdated) {
+ EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls.
+ LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
+ rtp_sender_->SetStorePacketsStatus(true, 10);
+
+ EXPECT_CALL(send_packet_observer_,
+ OnSendPacket(kTransportSequenceNumber, _, _))
+ .Times(1);
+ EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
+ .WillOnce(testing::Return(kTransportSequenceNumber));
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+
+ SendGenericPayload(); // Packet passed to pacer.
+ const bool kIsRetransmit = false;
+ rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ kIsRetransmit);
+ EXPECT_EQ(1, transport_.packets_sent_);
+}
+
+TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
+ EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls.
+ LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
+ rtp_sender_->SetStorePacketsStatus(true, 10);
+
+ EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
+ EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
+ .WillOnce(testing::Return(kTransportSequenceNumber));
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+
+ SendGenericPayload(); // Packet passed to pacer.
+ const bool kIsRetransmit = true;
+ rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ kIsRetransmit);
+ EXPECT_EQ(1, transport_.packets_sent_);
+}
+
+TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
+ rtp_sender_.reset(new RTPSender(
+ false, &fake_clock_, &transport_, &mock_paced_sender_,
+ nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
+ nullptr, nullptr, &send_packet_observer_));
+ rtp_sender_->SetSequenceNumber(kSeqNum);
+ rtp_sender_->SetStorePacketsStatus(true, 10);
+
+ EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+
+ SendGenericPayload(); // Packet passed to pacer.
+ const bool kIsRetransmit = false;
+ rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ kIsRetransmit);
+ EXPECT_EQ(1, transport_.packets_sent_);
+}
+
TEST_F(RtpSenderTest, SendRedundantPayloads) {
MockTransport transport;
rtp_sender_.reset(new RTPSender(
- false, &fake_clock_, &transport, &mock_paced_sender_, nullptr,
- nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_));
+ false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
+ nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr));
+
rtp_sender_->SetSequenceNumber(kSeqNum);
rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
@@ -1092,9 +1172,9 @@ TEST_F(RtpSenderTest, FrameCountCallbacks) {
FrameCounts frame_counts_;
} callback;
- rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_,
- &mock_paced_sender_, nullptr, nullptr,
- nullptr, &callback, nullptr, nullptr));
+ rtp_sender_.reset(new RTPSender(
+ false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, nullptr,
+ nullptr, &callback, nullptr, nullptr, nullptr));
char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
const uint8_t payload_type = 127;
@@ -1148,8 +1228,8 @@ TEST_F(RtpSenderTest, BitrateCallbacks) {
BitrateStatistics total_stats_;
BitrateStatistics retransmit_stats_;
} callback;
- rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_,
- nullptr, nullptr, nullptr, &callback, nullptr,
+ rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr,
+ nullptr, nullptr, &callback, nullptr, nullptr,
nullptr, nullptr));
// Simulate kNumPackets sent with kPacketInterval ms intervals.
@@ -1201,7 +1281,7 @@ class RtpSenderAudioTest : public RtpSenderTest {
void SetUp() override {
payload_ = kAudioPayload;
- rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_,
+ rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr));
rtp_sender_->SetSequenceNumber(kSeqNum);
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/video/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698