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

Side by Side Diff: webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc

Issue 2827333005: Moving overhead counting to bitrate estimators.
Patch Set: Created 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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 <algorithm> 11 #include <algorithm>
12 #include <limits> 12 #include <limits>
13 #include <vector> 13 #include <vector>
14 14
15 #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h" 15 #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h"
16 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 16 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
17 #include "webrtc/system_wrappers/include/clock.h" 17 #include "webrtc/system_wrappers/include/clock.h"
18 #include "webrtc/test/gtest.h" 18 #include "webrtc/test/gtest.h"
19 19
20 namespace {
21
22 constexpr int kDefaultHistoryLengthMs = 1000;
23 constexpr size_t kRtpHeadersSize = 12;
24 constexpr size_t kTransportHeadersSize = 20;
25
26 } // namespace
27
20 namespace webrtc { 28 namespace webrtc {
21 namespace test { 29 namespace test {
22 30
23 static const int kDefaultHistoryLengthMs = 1000;
24
25 class SendTimeHistoryTest : public ::testing::Test { 31 class SendTimeHistoryTest : public ::testing::Test {
26 protected: 32 protected:
27 SendTimeHistoryTest() 33 SendTimeHistoryTest()
28 : clock_(0), history_(&clock_, kDefaultHistoryLengthMs) {} 34 : clock_(0), history_(&clock_, kDefaultHistoryLengthMs) {}
29 ~SendTimeHistoryTest() {} 35 ~SendTimeHistoryTest() {}
30 36
31 virtual void SetUp() {} 37 virtual void SetUp() {}
32 38
33 virtual void TearDown() {} 39 virtual void TearDown() {}
34 40
35 void AddPacketWithSendTime(uint16_t sequence_number, 41 void AddPacketWithSendTime(uint16_t sequence_number,
36 size_t length, 42 size_t payload_size,
37 int64_t send_time_ms, 43 int64_t send_time_ms,
38 const PacedPacketInfo& pacing_info) { 44 const PacedPacketInfo& pacing_info) {
39 PacketFeedback packet(clock_.TimeInMilliseconds(), sequence_number, length, 45 PacketFeedback packet(clock_.TimeInMilliseconds(), sequence_number,
46 payload_size, kRtpHeadersSize, kTransportHeadersSize,
40 0, 0, pacing_info); 47 0, 0, pacing_info);
41 history_.AddAndRemoveOld(packet); 48 history_.AddAndRemoveOld(packet);
42 history_.OnSentPacket(sequence_number, send_time_ms); 49 history_.OnSentPacket(sequence_number, send_time_ms);
43 } 50 }
44 51
45 webrtc::SimulatedClock clock_; 52 webrtc::SimulatedClock clock_;
46 SendTimeHistory history_; 53 SendTimeHistory history_;
47 }; 54 };
48 55
49 TEST_F(SendTimeHistoryTest, SaveAndRestoreNetworkId) { 56 TEST_F(SendTimeHistoryTest, SaveAndRestoreNetworkId) {
50 const PacedPacketInfo kPacingInfo(0, 5, 1200); 57 const PacedPacketInfo kPacingInfo(0, 5, 1200);
51 uint16_t sequence_number = 0; 58 uint16_t sequence_number = 0;
52 int64_t now_ms = clock_.TimeInMilliseconds(); 59 int64_t now_ms = clock_.TimeInMilliseconds();
53 for (int i = 1; i < 5; ++i) { 60 for (int i = 1; i < 5; ++i) {
54 PacketFeedback packet(now_ms, sequence_number, 1000, i, i - 1, 61 PacketFeedback packet(now_ms, sequence_number, 1000, kRtpHeadersSize,
55 kPacingInfo); 62 kTransportHeadersSize, i, i - 1, kPacingInfo);
56 history_.AddAndRemoveOld(packet); 63 history_.AddAndRemoveOld(packet);
57 history_.OnSentPacket(sequence_number, now_ms); 64 history_.OnSentPacket(sequence_number, now_ms);
58 PacketFeedback restored(now_ms, sequence_number); 65 PacketFeedback restored(now_ms, sequence_number);
59 EXPECT_TRUE(history_.GetFeedback(&restored, sequence_number++)); 66 EXPECT_TRUE(history_.GetFeedback(&restored, sequence_number++));
60 EXPECT_EQ(packet.local_net_id, restored.local_net_id); 67 EXPECT_EQ(packet.local_net_id, restored.local_net_id);
61 EXPECT_EQ(packet.remote_net_id, restored.remote_net_id); 68 EXPECT_EQ(packet.remote_net_id, restored.remote_net_id);
62 } 69 }
63 } 70 }
64 71
65 TEST_F(SendTimeHistoryTest, AddRemoveOne) { 72 TEST_F(SendTimeHistoryTest, AddRemoveOne) {
66 const uint16_t kSeqNo = 10; 73 const uint16_t kSeqNo = 10;
67 // TODO(philipel): Fix PacedPacketInfo constructor? 74 // TODO(philipel): Fix PacedPacketInfo constructor?
68 const PacedPacketInfo kPacingInfo(0, 5, 1200); 75 const PacedPacketInfo kPacingInfo(0, 5, 1200);
69 const PacketFeedback kSentPacket(0, 1, kSeqNo, 1, kPacingInfo); 76 const PacketFeedback kSentPacket(0, 1, kSeqNo, 1, kRtpHeadersSize,
77 kTransportHeadersSize, kPacingInfo);
70 AddPacketWithSendTime(kSeqNo, 1, 1, kPacingInfo); 78 AddPacketWithSendTime(kSeqNo, 1, 1, kPacingInfo);
71 79
72 PacketFeedback received_packet(0, 0, kSeqNo, 0, kPacingInfo); 80 PacketFeedback received_packet(0, 0, kSeqNo, 0, kRtpHeadersSize,
81 kTransportHeadersSize, kPacingInfo);
73 EXPECT_TRUE(history_.GetFeedback(&received_packet, false)); 82 EXPECT_TRUE(history_.GetFeedback(&received_packet, false));
74 EXPECT_EQ(kSentPacket, received_packet); 83 EXPECT_EQ(kSentPacket, received_packet);
75 84
76 PacketFeedback received_packet2(0, 0, kSeqNo, 0, kPacingInfo); 85 PacketFeedback received_packet2(0, 0, kSeqNo, 0, kRtpHeadersSize,
86 kTransportHeadersSize, kPacingInfo);
77 EXPECT_TRUE(history_.GetFeedback(&received_packet2, true)); 87 EXPECT_TRUE(history_.GetFeedback(&received_packet2, true));
78 EXPECT_EQ(kSentPacket, received_packet2); 88 EXPECT_EQ(kSentPacket, received_packet2);
79 89
80 PacketFeedback received_packet3(0, 0, kSeqNo, 0, kPacingInfo); 90 PacketFeedback received_packet3(0, 0, kSeqNo, 0, kRtpHeadersSize,
91 kTransportHeadersSize, kPacingInfo);
81 EXPECT_FALSE(history_.GetFeedback(&received_packet3, true)); 92 EXPECT_FALSE(history_.GetFeedback(&received_packet3, true));
82 } 93 }
83 94
84 TEST_F(SendTimeHistoryTest, PopulatesExpectedFields) { 95 TEST_F(SendTimeHistoryTest, PopulatesExpectedFields) {
85 const uint16_t kSeqNo = 10; 96 const uint16_t kSeqNo = 10;
86 const int64_t kSendTime = 1000; 97 const int64_t kSendTime = 1000;
87 const int64_t kReceiveTime = 2000; 98 const int64_t kReceiveTime = 2000;
88 const size_t kPayloadSize = 42; 99 const size_t kPayloadSize = 42;
89 const PacedPacketInfo kPacingInfo(3, 10, 1212); 100 const PacedPacketInfo kPacingInfo(3, 10, 1212);
90 101
91 AddPacketWithSendTime(kSeqNo, kPayloadSize, kSendTime, kPacingInfo); 102 AddPacketWithSendTime(kSeqNo, kPayloadSize, kSendTime, kPacingInfo);
92 103
93 PacketFeedback packet_feedback(kReceiveTime, kSeqNo); 104 PacketFeedback packet_feedback(kReceiveTime, kSeqNo);
94 EXPECT_TRUE(history_.GetFeedback(&packet_feedback, true)); 105 EXPECT_TRUE(history_.GetFeedback(&packet_feedback, true));
95 EXPECT_EQ(kReceiveTime, packet_feedback.arrival_time_ms); 106 EXPECT_EQ(kReceiveTime, packet_feedback.arrival_time_ms);
96 EXPECT_EQ(kSendTime, packet_feedback.send_time_ms); 107 EXPECT_EQ(kSendTime, packet_feedback.send_time_ms);
97 EXPECT_EQ(kSeqNo, packet_feedback.sequence_number); 108 EXPECT_EQ(kSeqNo, packet_feedback.sequence_number);
98 EXPECT_EQ(kPayloadSize, packet_feedback.payload_size); 109 EXPECT_EQ(kPayloadSize, packet_feedback.payload_size);
99 EXPECT_EQ(kPacingInfo, packet_feedback.pacing_info); 110 EXPECT_EQ(kPacingInfo, packet_feedback.pacing_info);
100 } 111 }
101 112
102 TEST_F(SendTimeHistoryTest, AddThenRemoveOutOfOrder) { 113 TEST_F(SendTimeHistoryTest, AddThenRemoveOutOfOrder) {
103 std::vector<PacketFeedback> sent_packets; 114 std::vector<PacketFeedback> sent_packets;
104 std::vector<PacketFeedback> received_packets; 115 std::vector<PacketFeedback> received_packets;
105 const size_t num_items = 100; 116 const size_t num_items = 100;
106 const size_t kPacketSize = 400; 117 const size_t kPayloadSize = 400;
107 const size_t kTransmissionTime = 1234; 118 const size_t kTransmissionTime = 1234;
108 const PacedPacketInfo kPacingInfo(1, 2, 200); 119 const PacedPacketInfo kPacingInfo(1, 2, 200);
109 for (size_t i = 0; i < num_items; ++i) { 120 for (size_t i = 0; i < num_items; ++i) {
110 sent_packets.push_back(PacketFeedback(0, static_cast<int64_t>(i), 121 sent_packets.push_back(PacketFeedback(
111 static_cast<uint16_t>(i), kPacketSize, 122 0, static_cast<int64_t>(i), static_cast<uint16_t>(i), kPayloadSize,
112 kPacingInfo)); 123 kRtpHeadersSize, kTransportHeadersSize, kPacingInfo));
113 received_packets.push_back(PacketFeedback( 124 received_packets.push_back(
114 static_cast<int64_t>(i) + kTransmissionTime, 0, 125 PacketFeedback(static_cast<int64_t>(i) + kTransmissionTime, 0,
115 static_cast<uint16_t>(i), kPacketSize, PacedPacketInfo())); 126 static_cast<uint16_t>(i), kPayloadSize, kRtpHeadersSize,
127 kTransportHeadersSize, PacedPacketInfo()));
116 } 128 }
117 for (size_t i = 0; i < num_items; ++i) { 129 for (size_t i = 0; i < num_items; ++i) {
118 PacketFeedback packet = sent_packets[i]; 130 PacketFeedback packet = sent_packets[i];
119 packet.arrival_time_ms = -1; 131 packet.arrival_time_ms = -1;
120 packet.send_time_ms = -1; 132 packet.send_time_ms = -1;
121 history_.AddAndRemoveOld(packet); 133 history_.AddAndRemoveOld(packet);
122 } 134 }
123 for (size_t i = 0; i < num_items; ++i) 135 for (size_t i = 0; i < num_items; ++i)
124 history_.OnSentPacket(sent_packets[i].sequence_number, 136 history_.OnSentPacket(sent_packets[i].sequence_number,
125 sent_packets[i].send_time_ms); 137 sent_packets[i].send_time_ms);
(...skipping 10 matching lines...) Expand all
136 EXPECT_FALSE(history_.GetFeedback(&packet, false)); 148 EXPECT_FALSE(history_.GetFeedback(&packet, false));
137 } 149 }
138 150
139 TEST_F(SendTimeHistoryTest, HistorySize) { 151 TEST_F(SendTimeHistoryTest, HistorySize) {
140 const int kItems = kDefaultHistoryLengthMs / 100; 152 const int kItems = kDefaultHistoryLengthMs / 100;
141 for (int i = 0; i < kItems; ++i) { 153 for (int i = 0; i < kItems; ++i) {
142 clock_.AdvanceTimeMilliseconds(100); 154 clock_.AdvanceTimeMilliseconds(100);
143 AddPacketWithSendTime(i, 0, i * 100, PacedPacketInfo()); 155 AddPacketWithSendTime(i, 0, i * 100, PacedPacketInfo());
144 } 156 }
145 for (int i = 0; i < kItems; ++i) { 157 for (int i = 0; i < kItems; ++i) {
146 PacketFeedback packet(0, 0, static_cast<uint16_t>(i), 0, PacedPacketInfo()); 158 PacketFeedback packet(0, 0, static_cast<uint16_t>(i), 0, kRtpHeadersSize,
159 kTransportHeadersSize, PacedPacketInfo());
147 EXPECT_TRUE(history_.GetFeedback(&packet, false)); 160 EXPECT_TRUE(history_.GetFeedback(&packet, false));
148 EXPECT_EQ(i * 100, packet.send_time_ms); 161 EXPECT_EQ(i * 100, packet.send_time_ms);
149 } 162 }
150 clock_.AdvanceTimeMilliseconds(101); 163 clock_.AdvanceTimeMilliseconds(101);
151 AddPacketWithSendTime(kItems, 0, kItems * 101, PacedPacketInfo()); 164 AddPacketWithSendTime(kItems, 0, kItems * 101, PacedPacketInfo());
152 PacketFeedback packet(0, 0, 0, 0, PacedPacketInfo()); 165 PacketFeedback packet(0, 0, 0, 0, kRtpHeadersSize, kTransportHeadersSize,
166 PacedPacketInfo());
153 EXPECT_FALSE(history_.GetFeedback(&packet, false)); 167 EXPECT_FALSE(history_.GetFeedback(&packet, false));
154 for (int i = 1; i < (kItems + 1); ++i) { 168 for (int i = 1; i < (kItems + 1); ++i) {
155 PacketFeedback packet2(0, 0, static_cast<uint16_t>(i), 0, 169 PacketFeedback packet2(0, 0, static_cast<uint16_t>(i), 0, kRtpHeadersSize,
156 PacedPacketInfo()); 170 kTransportHeadersSize, PacedPacketInfo());
157 EXPECT_TRUE(history_.GetFeedback(&packet2, false)); 171 EXPECT_TRUE(history_.GetFeedback(&packet2, false));
158 int64_t expected_time_ms = (i == kItems) ? i * 101 : i * 100; 172 int64_t expected_time_ms = (i == kItems) ? i * 101 : i * 100;
159 EXPECT_EQ(expected_time_ms, packet2.send_time_ms); 173 EXPECT_EQ(expected_time_ms, packet2.send_time_ms);
160 } 174 }
161 } 175 }
162 176
163 TEST_F(SendTimeHistoryTest, HistorySizeWithWraparound) { 177 TEST_F(SendTimeHistoryTest, HistorySizeWithWraparound) {
164 const uint16_t kMaxSeqNo = std::numeric_limits<uint16_t>::max(); 178 const uint16_t kMaxSeqNo = std::numeric_limits<uint16_t>::max();
165 AddPacketWithSendTime(kMaxSeqNo - 2, 0, 0, PacedPacketInfo()); 179 AddPacketWithSendTime(kMaxSeqNo - 2, 0, 0, PacedPacketInfo());
166 180
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 EXPECT_TRUE(history_.GetFeedback(&packet10, false)); 215 EXPECT_TRUE(history_.GetFeedback(&packet10, false));
202 } 216 }
203 217
204 TEST_F(SendTimeHistoryTest, InterlievedGetAndRemove) { 218 TEST_F(SendTimeHistoryTest, InterlievedGetAndRemove) {
205 const uint16_t kSeqNo = 1; 219 const uint16_t kSeqNo = 1;
206 const int64_t kTimestamp = 2; 220 const int64_t kTimestamp = 2;
207 const PacedPacketInfo kPacingInfo1(1, 1, 100); 221 const PacedPacketInfo kPacingInfo1(1, 1, 100);
208 const PacedPacketInfo kPacingInfo2(2, 2, 200); 222 const PacedPacketInfo kPacingInfo2(2, 2, 200);
209 const PacedPacketInfo kPacingInfo3(3, 3, 300); 223 const PacedPacketInfo kPacingInfo3(3, 3, 300);
210 PacketFeedback packets[3] = { 224 PacketFeedback packets[3] = {
211 {0, kTimestamp, kSeqNo, 0, kPacingInfo1}, 225 {0, kTimestamp, kSeqNo, 0, kRtpHeadersSize, kTransportHeadersSize,
212 {0, kTimestamp + 1, kSeqNo + 1, 0, kPacingInfo2}, 226 kPacingInfo1},
213 {0, kTimestamp + 2, kSeqNo + 2, 0, kPacingInfo3}}; 227 {0, kTimestamp + 1, kSeqNo + 1, 0, kRtpHeadersSize, kTransportHeadersSize,
228 kPacingInfo2},
229 {0, kTimestamp + 2, kSeqNo + 2, 0, kRtpHeadersSize, kTransportHeadersSize,
230 kPacingInfo3}};
214 231
215 AddPacketWithSendTime(packets[0].sequence_number, packets[0].payload_size, 232 AddPacketWithSendTime(packets[0].sequence_number, packets[0].payload_size,
216 packets[0].send_time_ms, packets[0].pacing_info); 233 packets[0].send_time_ms, packets[0].pacing_info);
217 AddPacketWithSendTime(packets[1].sequence_number, packets[1].payload_size, 234 AddPacketWithSendTime(packets[1].sequence_number, packets[1].payload_size,
218 packets[1].send_time_ms, packets[1].pacing_info); 235 packets[1].send_time_ms, packets[1].pacing_info);
219 PacketFeedback packet(0, 0, packets[0].sequence_number, 0, PacedPacketInfo()); 236 PacketFeedback packet(0, 0, packets[0].sequence_number, 0, kRtpHeadersSize,
237 kTransportHeadersSize, PacedPacketInfo());
220 EXPECT_TRUE(history_.GetFeedback(&packet, true)); 238 EXPECT_TRUE(history_.GetFeedback(&packet, true));
221 EXPECT_EQ(packets[0], packet); 239 EXPECT_EQ(packets[0], packet);
222 240
223 AddPacketWithSendTime(packets[2].sequence_number, packets[2].payload_size, 241 AddPacketWithSendTime(packets[2].sequence_number, packets[2].payload_size,
224 packets[2].send_time_ms, packets[2].pacing_info); 242 packets[2].send_time_ms, packets[2].pacing_info);
225 243
226 PacketFeedback packet2(0, 0, packets[1].sequence_number, 0, kPacingInfo1); 244 PacketFeedback packet2(0, 0, packets[1].sequence_number, 0, kRtpHeadersSize,
245 kTransportHeadersSize, kPacingInfo1);
227 EXPECT_TRUE(history_.GetFeedback(&packet2, true)); 246 EXPECT_TRUE(history_.GetFeedback(&packet2, true));
228 EXPECT_EQ(packets[1], packet2); 247 EXPECT_EQ(packets[1], packet2);
229 248
230 PacketFeedback packet3(0, 0, packets[2].sequence_number, 0, kPacingInfo2); 249 PacketFeedback packet3(0, 0, packets[2].sequence_number, 0, kRtpHeadersSize,
250 kTransportHeadersSize, kPacingInfo2);
231 EXPECT_TRUE(history_.GetFeedback(&packet3, true)); 251 EXPECT_TRUE(history_.GetFeedback(&packet3, true));
232 EXPECT_EQ(packets[2], packet3); 252 EXPECT_EQ(packets[2], packet3);
233 } 253 }
234 } // namespace test 254 } // namespace test
235 } // namespace webrtc 255 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698