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

Side by Side Diff: webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc

Issue 2710093004: Rename webrtc::PacketInfo to webrtc::PacketFeedback (Closed)
Patch Set: . Created 3 years, 9 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
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 69
70 TransportFeedbackAdapterTest* const owner_; 70 TransportFeedbackAdapterTest* const owner_;
71 }; 71 };
72 72
73 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} 73 void OnReceivedEstimatedBitrate(uint32_t bitrate) {}
74 74
75 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, 75 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks,
76 int64_t rtt, 76 int64_t rtt,
77 int64_t now_ms) {} 77 int64_t now_ms) {}
78 78
79 void ComparePacketVectors(const std::vector<PacketInfo>& truth, 79 void ComparePacketVectors(const std::vector<PacketFeedback>& truth,
80 const std::vector<PacketInfo>& input) { 80 const std::vector<PacketFeedback>& input) {
81 ASSERT_EQ(truth.size(), input.size()); 81 ASSERT_EQ(truth.size(), input.size());
82 size_t len = truth.size(); 82 size_t len = truth.size();
83 // truth contains the input data for the test, and input is what will be 83 // truth contains the input data for the test, and input is what will be
84 // sent to the bandwidth estimator. truth.arrival_tims_ms is used to 84 // sent to the bandwidth estimator. truth.arrival_tims_ms is used to
85 // populate the transport feedback messages. As these times may be changed 85 // populate the transport feedback messages. As these times may be changed
86 // (because of resolution limits in the packets, and because of the time 86 // (because of resolution limits in the packets, and because of the time
87 // base adjustment performed by the TransportFeedbackAdapter at the first 87 // base adjustment performed by the TransportFeedbackAdapter at the first
88 // packet, the truth[x].arrival_time and input[x].arrival_time may not be 88 // packet, the truth[x].arrival_time and input[x].arrival_time may not be
89 // equal. However, the difference must be the same for all x. 89 // equal. However, the difference must be the same for all x.
90 int64_t arrival_time_delta = 90 int64_t arrival_time_delta =
91 truth[0].arrival_time_ms - input[0].arrival_time_ms; 91 truth[0].arrival_time_ms - input[0].arrival_time_ms;
92 for (size_t i = 0; i < len; ++i) { 92 for (size_t i = 0; i < len; ++i) {
93 EXPECT_EQ(truth[i].arrival_time_ms, 93 EXPECT_EQ(truth[i].arrival_time_ms,
94 input[i].arrival_time_ms + arrival_time_delta); 94 input[i].arrival_time_ms + arrival_time_delta);
95 EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms); 95 EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms);
96 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number); 96 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
97 EXPECT_EQ(truth[i].payload_size, input[i].payload_size); 97 EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
98 EXPECT_EQ(truth[i].pacing_info, input[i].pacing_info); 98 EXPECT_EQ(truth[i].pacing_info, input[i].pacing_info);
99 } 99 }
100 } 100 }
101 101
102 // Utility method, to reset arrival_time_ms before adding send time. 102 // Utility method, to reset arrival_time_ms before adding send time.
103 void OnSentPacket(PacketInfo info) { 103 void OnSentPacket(PacketFeedback packet_feedback) {
104 info.arrival_time_ms = 0; 104 packet_feedback.arrival_time_ms = 0;
105 // TODO(philipel): Change -1, -1 to some values. 105 // TODO(philipel): Change -1, -1 to some values.
106 adapter_->AddPacket(info.sequence_number, info.payload_size, 106 adapter_->AddPacket(packet_feedback.sequence_number,
107 info.pacing_info); 107 packet_feedback.payload_size,
108 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms); 108 packet_feedback.pacing_info);
109 adapter_->OnSentPacket(packet_feedback.sequence_number,
110 packet_feedback.send_time_ms);
109 } 111 }
110 112
111 SimulatedClock clock_; 113 SimulatedClock clock_;
112 MockBitrateControllerAdapter bitrate_controller_; 114 MockBitrateControllerAdapter bitrate_controller_;
113 std::unique_ptr<TransportFeedbackAdapter> adapter_; 115 std::unique_ptr<TransportFeedbackAdapter> adapter_;
114 116
115 uint32_t target_bitrate_bps_; 117 uint32_t target_bitrate_bps_;
116 }; 118 };
117 119
118 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { 120 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
119 std::vector<PacketInfo> packets; 121 std::vector<PacketFeedback> packets;
120 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0)); 122 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
121 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0)); 123 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
122 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo0)); 124 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0));
123 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo1)); 125 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1));
124 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo1)); 126 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1));
125 127
126 for (const PacketInfo& packet : packets) 128 for (const PacketFeedback& packet : packets)
127 OnSentPacket(packet); 129 OnSentPacket(packet);
128 130
129 rtcp::TransportFeedback feedback; 131 rtcp::TransportFeedback feedback;
130 feedback.SetBase(packets[0].sequence_number, 132 feedback.SetBase(packets[0].sequence_number,
131 packets[0].arrival_time_ms * 1000); 133 packets[0].arrival_time_ms * 1000);
132 134
133 for (const PacketInfo& packet : packets) { 135 for (const PacketFeedback& packet : packets) {
134 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 136 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
135 packet.arrival_time_ms * 1000)); 137 packet.arrival_time_ms * 1000));
136 } 138 }
137 139
138 feedback.Build(); 140 feedback.Build();
139 141
140 adapter_->OnTransportFeedback(feedback); 142 adapter_->OnTransportFeedback(feedback);
141 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 143 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
142 } 144 }
143 145
144 TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) { 146 TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) {
145 const int64_t kFeedbackTimeoutMs = 60001; 147 const int64_t kFeedbackTimeoutMs = 60001;
146 const int kMaxConsecutiveFailedLookups = 5; 148 const int kMaxConsecutiveFailedLookups = 5;
147 for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) { 149 for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) {
148 std::vector<PacketInfo> packets; 150 std::vector<PacketFeedback> packets;
149 packets.push_back(PacketInfo(i * 100, 2 * i * 100, 0, 1500, kPacingInfo0));
150 packets.push_back( 151 packets.push_back(
151 PacketInfo(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, kPacingInfo0)); 152 PacketFeedback(i * 100, 2 * i * 100, 0, 1500, kPacingInfo0));
152 packets.push_back( 153 packets.push_back(
153 PacketInfo(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, kPacingInfo0)); 154 PacketFeedback(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, kPacingInfo0));
154 packets.push_back( 155 packets.push_back(
155 PacketInfo(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, kPacingInfo1)); 156 PacketFeedback(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, kPacingInfo0));
156 packets.push_back( 157 packets.push_back(
157 PacketInfo(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, kPacingInfo1)); 158 PacketFeedback(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, kPacingInfo1));
159 packets.push_back(
160 PacketFeedback(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, kPacingInfo1));
158 161
159 for (const PacketInfo& packet : packets) 162 for (const PacketFeedback& packet : packets)
160 OnSentPacket(packet); 163 OnSentPacket(packet);
161 164
162 rtcp::TransportFeedback feedback; 165 rtcp::TransportFeedback feedback;
163 feedback.SetBase(packets[0].sequence_number, 166 feedback.SetBase(packets[0].sequence_number,
164 packets[0].arrival_time_ms * 1000); 167 packets[0].arrival_time_ms * 1000);
165 168
166 for (const PacketInfo& packet : packets) { 169 for (const PacketFeedback& packet : packets) {
167 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 170 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
168 packet.arrival_time_ms * 1000)); 171 packet.arrival_time_ms * 1000));
169 } 172 }
170 173
171 feedback.Build(); 174 feedback.Build();
172 175
173 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs); 176 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs);
174 PacketInfo later_packet(kFeedbackTimeoutMs + i * 100 + 40, 177 PacketFeedback later_packet(kFeedbackTimeoutMs + i * 100 + 40,
175 kFeedbackTimeoutMs + i * 200 + 40, 5, 1500, 178 kFeedbackTimeoutMs + i * 200 + 40, 5, 1500,
176 kPacingInfo1); 179 kPacingInfo1);
177 OnSentPacket(later_packet); 180 OnSentPacket(later_packet);
178 181
179 adapter_->OnTransportFeedback(feedback); 182 adapter_->OnTransportFeedback(feedback);
180 183
181 // Check that packets have timed out. 184 // Check that packets have timed out.
182 for (PacketInfo& packet : packets) { 185 for (PacketFeedback& packet : packets) {
183 packet.send_time_ms = -1; 186 packet.send_time_ms = -1;
184 packet.payload_size = 0; 187 packet.payload_size = 0;
185 packet.pacing_info = PacedPacketInfo(); 188 packet.pacing_info = PacedPacketInfo();
186 } 189 }
187 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 190 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
188 } 191 }
189 192
190 // Target bitrate should have halved due to feedback delays. 193 // Target bitrate should have halved due to feedback delays.
191 EXPECT_EQ(150000u, target_bitrate_bps_); 194 EXPECT_EQ(150000u, target_bitrate_bps_);
192 195
193 // Test with feedback that isn't late enough to time out. 196 // Test with feedback that isn't late enough to time out.
194 { 197 {
195 std::vector<PacketInfo> packets; 198 std::vector<PacketFeedback> packets;
196 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0)); 199 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
197 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0)); 200 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
198 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo0)); 201 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0));
199 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo1)); 202 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1));
200 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo1)); 203 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1));
201 204
202 for (const PacketInfo& packet : packets) 205 for (const PacketFeedback& packet : packets)
203 OnSentPacket(packet); 206 OnSentPacket(packet);
204 207
205 rtcp::TransportFeedback feedback; 208 rtcp::TransportFeedback feedback;
206 feedback.SetBase(packets[0].sequence_number, 209 feedback.SetBase(packets[0].sequence_number,
207 packets[0].arrival_time_ms * 1000); 210 packets[0].arrival_time_ms * 1000);
208 211
209 for (const PacketInfo& packet : packets) { 212 for (const PacketFeedback& packet : packets) {
210 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 213 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
211 packet.arrival_time_ms * 1000)); 214 packet.arrival_time_ms * 1000));
212 } 215 }
213 216
214 feedback.Build(); 217 feedback.Build();
215 218
216 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1); 219 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1);
217 PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240, 220 PacketFeedback later_packet(kFeedbackTimeoutMs + 140,
218 5, 1500, kPacingInfo1); 221 kFeedbackTimeoutMs + 240, 5, 1500,
222 kPacingInfo1);
219 OnSentPacket(later_packet); 223 OnSentPacket(later_packet);
220 224
221 adapter_->OnTransportFeedback(feedback); 225 adapter_->OnTransportFeedback(feedback);
222 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 226 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
223 } 227 }
224 } 228 }
225 229
226 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { 230 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
227 std::vector<PacketInfo> packets; 231 std::vector<PacketFeedback> packets;
228 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0)); 232 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
229 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo1)); 233 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo1));
230 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo2)); 234 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo2));
231 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo3)); 235 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo3));
232 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo4)); 236 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo4));
233 237
234 const uint16_t kSendSideDropBefore = 1; 238 const uint16_t kSendSideDropBefore = 1;
235 const uint16_t kReceiveSideDropAfter = 3; 239 const uint16_t kReceiveSideDropAfter = 3;
236 240
237 for (const PacketInfo& packet : packets) { 241 for (const PacketFeedback& packet : packets) {
238 if (packet.sequence_number >= kSendSideDropBefore) 242 if (packet.sequence_number >= kSendSideDropBefore)
239 OnSentPacket(packet); 243 OnSentPacket(packet);
240 } 244 }
241 245
242 rtcp::TransportFeedback feedback; 246 rtcp::TransportFeedback feedback;
243 feedback.SetBase(packets[0].sequence_number, 247 feedback.SetBase(packets[0].sequence_number,
244 packets[0].arrival_time_ms * 1000); 248 packets[0].arrival_time_ms * 1000);
245 249
246 for (const PacketInfo& packet : packets) { 250 for (const PacketFeedback& packet : packets) {
247 if (packet.sequence_number <= kReceiveSideDropAfter) { 251 if (packet.sequence_number <= kReceiveSideDropAfter) {
248 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 252 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
249 packet.arrival_time_ms * 1000)); 253 packet.arrival_time_ms * 1000));
250 } 254 }
251 } 255 }
252 256
253 feedback.Build(); 257 feedback.Build();
254 258
255 std::vector<PacketInfo> expected_packets( 259 std::vector<PacketFeedback> expected_packets(
256 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1); 260 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1);
257 // Packets that have timed out on the send-side have lost the 261 // Packets that have timed out on the send-side have lost the
258 // information stored on the send-side. 262 // information stored on the send-side.
259 for (size_t i = 0; i < kSendSideDropBefore; ++i) { 263 for (size_t i = 0; i < kSendSideDropBefore; ++i) {
260 expected_packets[i].send_time_ms = -1; 264 expected_packets[i].send_time_ms = -1;
261 expected_packets[i].payload_size = 0; 265 expected_packets[i].payload_size = 0;
262 expected_packets[i].pacing_info = PacedPacketInfo(); 266 expected_packets[i].pacing_info = PacedPacketInfo();
263 } 267 }
264 268
265 adapter_->OnTransportFeedback(feedback); 269 adapter_->OnTransportFeedback(feedback);
266 ComparePacketVectors(expected_packets, 270 ComparePacketVectors(expected_packets,
267 adapter_->GetTransportFeedbackVector()); 271 adapter_->GetTransportFeedbackVector());
268 } 272 }
269 273
270 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { 274 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
271 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor * 275 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
272 static_cast<int64_t>(1 << 8) * 276 static_cast<int64_t>(1 << 8) *
273 static_cast<int64_t>((1 << 23) - 1) / 1000; 277 static_cast<int64_t>((1 << 23) - 1) / 1000;
274 std::vector<PacketInfo> packets; 278 std::vector<PacketFeedback> packets;
275 packets.push_back( 279 packets.push_back(
276 PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo())); 280 PacketFeedback(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo()));
277 packets.push_back( 281 packets.push_back(
278 PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, PacedPacketInfo())); 282 PacketFeedback(kHighArrivalTimeMs + 64, 210, 1, 1500, PacedPacketInfo()));
279 packets.push_back( 283 packets.push_back(
280 PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, PacedPacketInfo())); 284 PacketFeedback(kHighArrivalTimeMs, 220, 2, 1500, PacedPacketInfo()));
281 285
282 for (const PacketInfo& packet : packets) 286 for (const PacketFeedback& packet : packets)
283 OnSentPacket(packet); 287 OnSentPacket(packet);
284 288
285 for (size_t i = 0; i < packets.size(); ++i) { 289 for (size_t i = 0; i < packets.size(); ++i) {
286 std::unique_ptr<rtcp::TransportFeedback> feedback( 290 std::unique_ptr<rtcp::TransportFeedback> feedback(
287 new rtcp::TransportFeedback()); 291 new rtcp::TransportFeedback());
288 feedback->SetBase(packets[i].sequence_number, 292 feedback->SetBase(packets[i].sequence_number,
289 packets[i].arrival_time_ms * 1000); 293 packets[i].arrival_time_ms * 1000);
290 294
291 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number, 295 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number,
292 packets[i].arrival_time_ms * 1000)); 296 packets[i].arrival_time_ms * 1000));
293 297
294 rtc::Buffer raw_packet = feedback->Build(); 298 rtc::Buffer raw_packet = feedback->Build();
295 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 299 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
296 raw_packet.size()); 300 raw_packet.size());
297 301
298 std::vector<PacketInfo> expected_packets; 302 std::vector<PacketFeedback> expected_packets;
299 expected_packets.push_back(packets[i]); 303 expected_packets.push_back(packets[i]);
300 304
301 adapter_->OnTransportFeedback(*feedback.get()); 305 adapter_->OnTransportFeedback(*feedback.get());
302 ComparePacketVectors(expected_packets, 306 ComparePacketVectors(expected_packets,
303 adapter_->GetTransportFeedbackVector()); 307 adapter_->GetTransportFeedbackVector());
304 } 308 }
305 } 309 }
306 310
307 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { 311 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
308 std::vector<PacketInfo> packets; 312 std::vector<PacketFeedback> packets;
309 packets.push_back(PacketInfo(120, 200, 0, 1500, kPacingInfo0)); 313 packets.push_back(PacketFeedback(120, 200, 0, 1500, kPacingInfo0));
310 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0)); 314 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
311 packets.push_back(PacketInfo(100, 220, 2, 1500, kPacingInfo0)); 315 packets.push_back(PacketFeedback(100, 220, 2, 1500, kPacingInfo0));
312 std::vector<PacketInfo> expected_packets; 316 std::vector<PacketFeedback> expected_packets;
313 expected_packets.push_back(packets[2]); 317 expected_packets.push_back(packets[2]);
314 expected_packets.push_back(packets[1]); 318 expected_packets.push_back(packets[1]);
315 expected_packets.push_back(packets[0]); 319 expected_packets.push_back(packets[0]);
316 320
317 for (const PacketInfo& packet : packets) 321 for (const PacketFeedback& packet : packets)
318 OnSentPacket(packet); 322 OnSentPacket(packet);
319 323
320 rtcp::TransportFeedback feedback; 324 rtcp::TransportFeedback feedback;
321 feedback.SetBase(packets[0].sequence_number, 325 feedback.SetBase(packets[0].sequence_number,
322 packets[0].arrival_time_ms * 1000); 326 packets[0].arrival_time_ms * 1000);
323 327
324 for (const PacketInfo& packet : packets) { 328 for (const PacketFeedback& packet : packets) {
325 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 329 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
326 packet.arrival_time_ms * 1000)); 330 packet.arrival_time_ms * 1000));
327 } 331 }
328 332
329 feedback.Build(); 333 feedback.Build();
330 334
331 adapter_->OnTransportFeedback(feedback); 335 adapter_->OnTransportFeedback(feedback);
332 ComparePacketVectors(expected_packets, 336 ComparePacketVectors(expected_packets,
333 adapter_->GetTransportFeedbackVector()); 337 adapter_->GetTransportFeedbackVector());
334 } 338 }
335 339
336 TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) { 340 TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) {
337 std::vector<PacketInfo> sent_packets; 341 std::vector<PacketFeedback> sent_packets;
338 const int64_t kSmallDeltaUs = 342 const int64_t kSmallDeltaUs =
339 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1); 343 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
340 const int64_t kLargePositiveDeltaUs = 344 const int64_t kLargePositiveDeltaUs =
341 rtcp::TransportFeedback::kDeltaScaleFactor * 345 rtcp::TransportFeedback::kDeltaScaleFactor *
342 std::numeric_limits<int16_t>::max(); 346 std::numeric_limits<int16_t>::max();
343 const int64_t kLargeNegativeDeltaUs = 347 const int64_t kLargeNegativeDeltaUs =
344 rtcp::TransportFeedback::kDeltaScaleFactor * 348 rtcp::TransportFeedback::kDeltaScaleFactor *
345 std::numeric_limits<int16_t>::min(); 349 std::numeric_limits<int16_t>::min();
346 350
347 PacketInfo info(100, 200, 0, 1500, true, PacedPacketInfo()); 351 PacketFeedback packet_feedback(100, 200, 0, 1500, true, PacedPacketInfo());
348 sent_packets.push_back(info); 352 sent_packets.push_back(packet_feedback);
349 353
350 info.send_time_ms += kSmallDeltaUs / 1000; 354 packet_feedback.send_time_ms += kSmallDeltaUs / 1000;
351 info.arrival_time_ms += kSmallDeltaUs / 1000; 355 packet_feedback.arrival_time_ms += kSmallDeltaUs / 1000;
352 ++info.sequence_number; 356 ++packet_feedback.sequence_number;
353 sent_packets.push_back(info); 357 sent_packets.push_back(packet_feedback);
354 358
355 info.send_time_ms += kLargePositiveDeltaUs / 1000; 359 packet_feedback.send_time_ms += kLargePositiveDeltaUs / 1000;
356 info.arrival_time_ms += kLargePositiveDeltaUs / 1000; 360 packet_feedback.arrival_time_ms += kLargePositiveDeltaUs / 1000;
357 ++info.sequence_number; 361 ++packet_feedback.sequence_number;
358 sent_packets.push_back(info); 362 sent_packets.push_back(packet_feedback);
359 363
360 info.send_time_ms += kLargeNegativeDeltaUs / 1000; 364 packet_feedback.send_time_ms += kLargeNegativeDeltaUs / 1000;
361 info.arrival_time_ms += kLargeNegativeDeltaUs / 1000; 365 packet_feedback.arrival_time_ms += kLargeNegativeDeltaUs / 1000;
362 ++info.sequence_number; 366 ++packet_feedback.sequence_number;
363 sent_packets.push_back(info); 367 sent_packets.push_back(packet_feedback);
364 368
365 // Too large, delta - will need two feedback messages. 369 // Too large, delta - will need two feedback messages.
366 info.send_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; 370 packet_feedback.send_time_ms += (kLargePositiveDeltaUs + 1000) / 1000;
367 info.arrival_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; 371 packet_feedback.arrival_time_ms += (kLargePositiveDeltaUs + 1000) / 1000;
368 ++info.sequence_number; 372 ++packet_feedback.sequence_number;
369 373
370 // Packets will be added to send history. 374 // Packets will be added to send history.
371 for (const PacketInfo& packet : sent_packets) 375 for (const PacketFeedback& packet : sent_packets)
372 OnSentPacket(packet); 376 OnSentPacket(packet);
373 OnSentPacket(info); 377 OnSentPacket(packet_feedback);
374 378
375 // Create expected feedback and send into adapter. 379 // Create expected feedback and send into adapter.
376 std::unique_ptr<rtcp::TransportFeedback> feedback( 380 std::unique_ptr<rtcp::TransportFeedback> feedback(
377 new rtcp::TransportFeedback()); 381 new rtcp::TransportFeedback());
378 feedback->SetBase(sent_packets[0].sequence_number, 382 feedback->SetBase(sent_packets[0].sequence_number,
379 sent_packets[0].arrival_time_ms * 1000); 383 sent_packets[0].arrival_time_ms * 1000);
380 384
381 for (const PacketInfo& packet : sent_packets) { 385 for (const PacketFeedback& packet : sent_packets) {
382 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number, 386 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
383 packet.arrival_time_ms * 1000)); 387 packet.arrival_time_ms * 1000));
384 } 388 }
385 EXPECT_FALSE(feedback->AddReceivedPacket(info.sequence_number, 389 EXPECT_FALSE(feedback->AddReceivedPacket(
386 info.arrival_time_ms * 1000)); 390 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000));
387 391
388 rtc::Buffer raw_packet = feedback->Build(); 392 rtc::Buffer raw_packet = feedback->Build();
389 feedback = 393 feedback =
390 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); 394 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
391 395
392 std::vector<PacketInfo> received_feedback; 396 std::vector<PacketFeedback> received_feedback;
393 397
394 EXPECT_TRUE(feedback.get() != nullptr); 398 EXPECT_TRUE(feedback.get() != nullptr);
395 adapter_->OnTransportFeedback(*feedback.get()); 399 adapter_->OnTransportFeedback(*feedback.get());
396 { 400 {
397 // Expected to be ordered on arrival time when the feedback message has been 401 // Expected to be ordered on arrival time when the feedback message has been
398 // parsed. 402 // parsed.
399 std::vector<PacketInfo> expected_packets; 403 std::vector<PacketFeedback> expected_packets;
400 expected_packets.push_back(sent_packets[0]); 404 expected_packets.push_back(sent_packets[0]);
401 expected_packets.push_back(sent_packets[3]); 405 expected_packets.push_back(sent_packets[3]);
402 expected_packets.push_back(sent_packets[1]); 406 expected_packets.push_back(sent_packets[1]);
403 expected_packets.push_back(sent_packets[2]); 407 expected_packets.push_back(sent_packets[2]);
404 ComparePacketVectors(expected_packets, 408 ComparePacketVectors(expected_packets,
405 adapter_->GetTransportFeedbackVector()); 409 adapter_->GetTransportFeedbackVector());
406 } 410 }
407 411
408 // Create a new feedback message and add the trailing item. 412 // Create a new feedback message and add the trailing item.
409 feedback.reset(new rtcp::TransportFeedback()); 413 feedback.reset(new rtcp::TransportFeedback());
410 feedback->SetBase(info.sequence_number, info.arrival_time_ms * 1000); 414 feedback->SetBase(packet_feedback.sequence_number,
411 EXPECT_TRUE(feedback->AddReceivedPacket(info.sequence_number, 415 packet_feedback.arrival_time_ms * 1000);
412 info.arrival_time_ms * 1000)); 416 EXPECT_TRUE(feedback->AddReceivedPacket(
417 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000));
413 raw_packet = feedback->Build(); 418 raw_packet = feedback->Build();
414 feedback = 419 feedback =
415 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); 420 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
416 421
417 EXPECT_TRUE(feedback.get() != nullptr); 422 EXPECT_TRUE(feedback.get() != nullptr);
418 adapter_->OnTransportFeedback(*feedback.get()); 423 adapter_->OnTransportFeedback(*feedback.get());
419 { 424 {
420 std::vector<PacketInfo> expected_packets; 425 std::vector<PacketFeedback> expected_packets;
421 expected_packets.push_back(info); 426 expected_packets.push_back(packet_feedback);
422 ComparePacketVectors(expected_packets, 427 ComparePacketVectors(expected_packets,
423 adapter_->GetTransportFeedbackVector()); 428 adapter_->GetTransportFeedbackVector());
424 } 429 }
425 } 430 }
426 431
427 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) { 432 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) {
428 uint16_t seq_num = 0; 433 uint16_t seq_num = 0;
429 size_t kPayloadSize = 1000; 434 size_t kPayloadSize = 1000;
430 // The test must run and insert packets/feedback long enough that the 435 // The test must run and insert packets/feedback long enough that the
431 // BWE computes a valid estimate. 436 // BWE computes a valid estimate.
432 const int64_t kRunTimeMs = 6000; 437 const int64_t kRunTimeMs = 6000;
433 int64_t start_time_ms = clock_.TimeInMilliseconds(); 438 int64_t start_time_ms = clock_.TimeInMilliseconds();
434 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) { 439 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) {
435 PacketInfo packet(clock_.TimeInMilliseconds(), clock_.TimeInMilliseconds(), 440 PacketFeedback packet(clock_.TimeInMilliseconds(),
436 seq_num, kPayloadSize, PacedPacketInfo()); 441 clock_.TimeInMilliseconds(), seq_num, kPayloadSize,
442 PacedPacketInfo());
437 OnSentPacket(packet); 443 OnSentPacket(packet);
438 // Create expected feedback and send into adapter. 444 // Create expected feedback and send into adapter.
439 std::unique_ptr<rtcp::TransportFeedback> feedback( 445 std::unique_ptr<rtcp::TransportFeedback> feedback(
440 new rtcp::TransportFeedback()); 446 new rtcp::TransportFeedback());
441 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000); 447 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000);
442 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number, 448 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
443 packet.arrival_time_ms * 1000)); 449 packet.arrival_time_ms * 1000));
444 rtc::Buffer raw_packet = feedback->Build(); 450 rtc::Buffer raw_packet = feedback->Build();
445 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 451 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
446 raw_packet.size()); 452 raw_packet.size());
447 EXPECT_TRUE(feedback.get() != nullptr); 453 EXPECT_TRUE(feedback.get() != nullptr);
448 adapter_->OnTransportFeedback(*feedback.get()); 454 adapter_->OnTransportFeedback(*feedback.get());
449 clock_.AdvanceTimeMilliseconds(50); 455 clock_.AdvanceTimeMilliseconds(50);
450 ++seq_num; 456 ++seq_num;
451 } 457 }
452 EXPECT_GT(target_bitrate_bps_, 0u); 458 EXPECT_GT(target_bitrate_bps_, 0u);
453 } 459 }
454 460
455 } // namespace test 461 } // namespace test
456 } // namespace webrtc 462 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698