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

Side by Side Diff: webrtc/modules/pacing/paced_sender_unittest.cc

Issue 2628563003: Propagate packet pacing information to SenTimeHistory (Closed)
Patch Set: Rebase 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 unified diff | Download patch
« no previous file with comments | « webrtc/modules/pacing/paced_sender.cc ('k') | webrtc/modules/pacing/packet_router.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <list> 11 #include <list>
12 #include <memory> 12 #include <memory>
13 13
14 #include "webrtc/modules/pacing/paced_sender.h" 14 #include "webrtc/modules/pacing/paced_sender.h"
15 #include "webrtc/system_wrappers/include/clock.h" 15 #include "webrtc/system_wrappers/include/clock.h"
16 #include "webrtc/test/gmock.h" 16 #include "webrtc/test/gmock.h"
17 #include "webrtc/test/gtest.h" 17 #include "webrtc/test/gtest.h"
18 18
19 using testing::_; 19 using testing::_;
20 using testing::Field;
20 using testing::Return; 21 using testing::Return;
21 22
22 namespace { 23 namespace {
23 constexpr unsigned kFirstClusterBps = 900000; 24 constexpr unsigned kFirstClusterBps = 900000;
24 constexpr unsigned kSecondClusterBps = 1800000; 25 constexpr unsigned kSecondClusterBps = 1800000;
25 26
26 // The error stems from truncating the time interval of probe packets to integer 27 // The error stems from truncating the time interval of probe packets to integer
27 // values. This results in probing slightly higher than the target bitrate. 28 // values. This results in probing slightly higher than the target bitrate.
28 // For 1.8 Mbps, this comes to be about 120 kbps with 1200 probe packets. 29 // For 1.8 Mbps, this comes to be about 120 kbps with 1200 probe packets.
29 constexpr int kBitrateProbingError = 150000; 30 constexpr int kBitrateProbingError = 150000;
30 } // namespace 31 } // namespace
31 32
32 namespace webrtc { 33 namespace webrtc {
33 namespace test { 34 namespace test {
34 35
35 static const int kTargetBitrateBps = 800000; 36 static const int kTargetBitrateBps = 800000;
36 37
37 class MockPacedSenderCallback : public PacedSender::PacketSender { 38 class MockPacedSenderCallback : public PacedSender::PacketSender {
38 public: 39 public:
39 MOCK_METHOD5(TimeToSendPacket, 40 MOCK_METHOD5(TimeToSendPacket,
40 bool(uint32_t ssrc, 41 bool(uint32_t ssrc,
41 uint16_t sequence_number, 42 uint16_t sequence_number,
42 int64_t capture_time_ms, 43 int64_t capture_time_ms,
43 bool retransmission, 44 bool retransmission,
44 int probe_cluster_id)); 45 const PacedPacketInfo& pacing_info));
45 MOCK_METHOD2(TimeToSendPadding, size_t(size_t bytes, int probe_cluster_id)); 46 MOCK_METHOD2(TimeToSendPadding,
47 size_t(size_t bytes, const PacedPacketInfo& pacing_info));
46 }; 48 };
47 49
48 class PacedSenderPadding : public PacedSender::PacketSender { 50 class PacedSenderPadding : public PacedSender::PacketSender {
49 public: 51 public:
50 PacedSenderPadding() : padding_sent_(0) {} 52 PacedSenderPadding() : padding_sent_(0) {}
51 53
52 bool TimeToSendPacket(uint32_t ssrc, 54 bool TimeToSendPacket(uint32_t ssrc,
53 uint16_t sequence_number, 55 uint16_t sequence_number,
54 int64_t capture_time_ms, 56 int64_t capture_time_ms,
55 bool retransmission, 57 bool retransmission,
56 int probe_cluster_id) override { 58 const PacedPacketInfo& pacing_info) override {
57 return true; 59 return true;
58 } 60 }
59 61
60 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) override { 62 size_t TimeToSendPadding(size_t bytes,
63 const PacedPacketInfo& pacing_info) override {
61 const size_t kPaddingPacketSize = 224; 64 const size_t kPaddingPacketSize = 224;
62 size_t num_packets = (bytes + kPaddingPacketSize - 1) / kPaddingPacketSize; 65 size_t num_packets = (bytes + kPaddingPacketSize - 1) / kPaddingPacketSize;
63 padding_sent_ += kPaddingPacketSize * num_packets; 66 padding_sent_ += kPaddingPacketSize * num_packets;
64 return kPaddingPacketSize * num_packets; 67 return kPaddingPacketSize * num_packets;
65 } 68 }
66 69
67 size_t padding_sent() { return padding_sent_; } 70 size_t padding_sent() { return padding_sent_; }
68 71
69 private: 72 private:
70 size_t padding_sent_; 73 size_t padding_sent_;
71 }; 74 };
72 75
73 class PacedSenderProbing : public PacedSender::PacketSender { 76 class PacedSenderProbing : public PacedSender::PacketSender {
74 public: 77 public:
75 PacedSenderProbing() : packets_sent_(0), padding_sent_(0) {} 78 PacedSenderProbing() : packets_sent_(0), padding_sent_(0) {}
76 79
77 bool TimeToSendPacket(uint32_t ssrc, 80 bool TimeToSendPacket(uint32_t ssrc,
78 uint16_t sequence_number, 81 uint16_t sequence_number,
79 int64_t capture_time_ms, 82 int64_t capture_time_ms,
80 bool retransmission, 83 bool retransmission,
81 int probe_cluster_id) override { 84 const PacedPacketInfo& pacing_info) override {
82 packets_sent_++; 85 packets_sent_++;
83 return true; 86 return true;
84 } 87 }
85 88
86 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) override { 89 size_t TimeToSendPadding(size_t bytes,
90 const PacedPacketInfo& pacing_info) override {
87 padding_sent_ += bytes; 91 padding_sent_ += bytes;
88 return padding_sent_; 92 return padding_sent_;
89 } 93 }
90 94
91 int packets_sent() const { return packets_sent_; } 95 int packets_sent() const { return packets_sent_; }
92 96
93 int padding_sent() const { return padding_sent_; } 97 int padding_sent() const { return padding_sent_; }
94 98
95 private: 99 private:
96 int packets_sent_; 100 int packets_sent_;
(...skipping 23 matching lines...) Expand all
120 int64_t capture_time_ms, 124 int64_t capture_time_ms,
121 size_t size, 125 size_t size,
122 bool retransmission) { 126 bool retransmission) {
123 send_bucket_->InsertPacket(priority, ssrc, sequence_number, capture_time_ms, 127 send_bucket_->InsertPacket(priority, ssrc, sequence_number, capture_time_ms,
124 size, retransmission); 128 size, retransmission);
125 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number, 129 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number,
126 capture_time_ms, retransmission, _)) 130 capture_time_ms, retransmission, _))
127 .Times(1) 131 .Times(1)
128 .WillRepeatedly(Return(true)); 132 .WillRepeatedly(Return(true));
129 } 133 }
130
131 SimulatedClock clock_; 134 SimulatedClock clock_;
132 MockPacedSenderCallback callback_; 135 MockPacedSenderCallback callback_;
133 std::unique_ptr<PacedSender> send_bucket_; 136 std::unique_ptr<PacedSender> send_bucket_;
134 }; 137 };
135 138
136 TEST_F(PacedSenderTest, QueuePacket) { 139 TEST_F(PacedSenderTest, QueuePacket) {
137 uint32_t ssrc = 12345; 140 uint32_t ssrc = 12345;
138 uint16_t sequence_number = 1234; 141 uint16_t sequence_number = 1234;
139 // Due to the multiplicative factor we can send 5 packets during a send 142 // Due to the multiplicative factor we can send 5 packets during a send
140 // interval. (network capacity * multiplier / (8 bits per byte * 143 // interval. (network capacity * multiplier / (8 bits per byte *
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 1007
1005 send_bucket_->SetSendBitrateLimits(kTargetBitrateBps, kTargetBitrateBps); 1008 send_bucket_->SetSendBitrateLimits(kTargetBitrateBps, kTargetBitrateBps);
1006 send_bucket_->SetProbingEnabled(true); 1009 send_bucket_->SetProbingEnabled(true);
1007 for (int i = 0; i < 10; ++i) { 1010 for (int i = 0; i < 10; ++i) {
1008 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, 1011 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
1009 sequence_number + i, clock_.TimeInMilliseconds(), 1012 sequence_number + i, clock_.TimeInMilliseconds(),
1010 kPacketSize, false); 1013 kPacketSize, false);
1011 } 1014 }
1012 1015
1013 // First probing cluster. 1016 // First probing cluster.
1014 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 0)) 1017 EXPECT_CALL(callback_,
1018 TimeToSendPacket(_, _, _, _,
1019 Field(&PacedPacketInfo::probe_cluster_id, 0)))
1015 .Times(5) 1020 .Times(5)
1016 .WillRepeatedly(Return(true)); 1021 .WillRepeatedly(Return(true));
1017 for (int i = 0; i < 5; ++i) { 1022 for (int i = 0; i < 5; ++i) {
1018 clock_.AdvanceTimeMilliseconds(20); 1023 clock_.AdvanceTimeMilliseconds(20);
1019 send_bucket_->Process(); 1024 send_bucket_->Process();
1020 } 1025 }
1021 1026
1022 // Second probing cluster. 1027 // Second probing cluster.
1023 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 1)) 1028 EXPECT_CALL(callback_,
1029 TimeToSendPacket(_, _, _, _,
1030 Field(&PacedPacketInfo::probe_cluster_id, 1)))
1024 .Times(5) 1031 .Times(5)
1025 .WillRepeatedly(Return(true)); 1032 .WillRepeatedly(Return(true));
1026 for (int i = 0; i < 5; ++i) { 1033 for (int i = 0; i < 5; ++i) {
1027 clock_.AdvanceTimeMilliseconds(20); 1034 clock_.AdvanceTimeMilliseconds(20);
1028 send_bucket_->Process(); 1035 send_bucket_->Process();
1029 } 1036 }
1030 1037
1038 // Needed for the Field comparer below.
1039 const int kNotAProbe = PacedPacketInfo::kNotAProbe;
1031 // No more probing packets. 1040 // No more probing packets.
1032 EXPECT_CALL(callback_, TimeToSendPadding(_, PacketInfo::kNotAProbe)) 1041 EXPECT_CALL(callback_,
1033 .Times(1) 1042 TimeToSendPadding(
1034 .WillRepeatedly(Return(500)); 1043 _, Field(&PacedPacketInfo::probe_cluster_id, kNotAProbe)))
1044 .Times(1)
1045 .WillRepeatedly(Return(500));
1035 send_bucket_->Process(); 1046 send_bucket_->Process();
1036 } 1047 }
1037 1048
1038 } // namespace test 1049 } // namespace test
1039 } // namespace webrtc 1050 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/paced_sender.cc ('k') | webrtc/modules/pacing/packet_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698