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

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

Issue 2708873003: Propagate packet pacing information to SendTimeHistory. (Closed)
Patch Set: . 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
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 <limits> 11 #include <limits>
12 #include <memory> 12 #include <memory>
13 #include <vector> 13 #include <vector>
14 14
15 #include "webrtc/base/checks.h" 15 #include "webrtc/base/checks.h"
16 #include "webrtc/base/safe_conversions.h" 16 #include "webrtc/base/safe_conversions.h"
17 #include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller .h" 17 #include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller .h"
18 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h" 18 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h"
19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
21 #include "webrtc/system_wrappers/include/clock.h" 21 #include "webrtc/system_wrappers/include/clock.h"
22 #include "webrtc/test/gmock.h" 22 #include "webrtc/test/gmock.h"
23 #include "webrtc/test/gtest.h" 23 #include "webrtc/test/gtest.h"
24 24
25 using ::testing::_; 25 using ::testing::_;
26 using ::testing::Invoke; 26 using ::testing::Invoke;
27 27
28 namespace webrtc { 28 namespace webrtc {
29
30 namespace {
31 const PacedPacketInfo kPacingInfo0(0, 5, 2000);
32 const PacedPacketInfo kPacingInfo1(1, 8, 4000);
33 const PacedPacketInfo kPacingInfo2(2, 14, 7000);
34 const PacedPacketInfo kPacingInfo3(3, 20, 10000);
35 const PacedPacketInfo kPacingInfo4(4, 22, 10000);
36 }
37
29 namespace test { 38 namespace test {
30 39
31 class TransportFeedbackAdapterTest : public ::testing::Test { 40 class TransportFeedbackAdapterTest : public ::testing::Test {
32 public: 41 public:
33 TransportFeedbackAdapterTest() 42 TransportFeedbackAdapterTest()
34 : clock_(0), bitrate_controller_(this), target_bitrate_bps_(0) {} 43 : clock_(0), bitrate_controller_(this), target_bitrate_bps_(0) {}
35 44
36 virtual ~TransportFeedbackAdapterTest() {} 45 virtual ~TransportFeedbackAdapterTest() {}
37 46
38 virtual void SetUp() { 47 virtual void SetUp() {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // 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
80 // equal. However, the difference must be the same for all x. 89 // equal. However, the difference must be the same for all x.
81 int64_t arrival_time_delta = 90 int64_t arrival_time_delta =
82 truth[0].arrival_time_ms - input[0].arrival_time_ms; 91 truth[0].arrival_time_ms - input[0].arrival_time_ms;
83 for (size_t i = 0; i < len; ++i) { 92 for (size_t i = 0; i < len; ++i) {
84 EXPECT_EQ(truth[i].arrival_time_ms, 93 EXPECT_EQ(truth[i].arrival_time_ms,
85 input[i].arrival_time_ms + arrival_time_delta); 94 input[i].arrival_time_ms + arrival_time_delta);
86 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);
87 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number); 96 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
88 EXPECT_EQ(truth[i].payload_size, input[i].payload_size); 97 EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
89 EXPECT_EQ(truth[i].probe_cluster_id, input[i].probe_cluster_id); 98 EXPECT_EQ(truth[i].pacing_info, input[i].pacing_info);
90 } 99 }
91 } 100 }
92 101
93 // Utility method, to reset arrival_time_ms before adding send time. 102 // Utility method, to reset arrival_time_ms before adding send time.
94 void OnSentPacket(PacketInfo info) { 103 void OnSentPacket(PacketInfo info) {
95 info.arrival_time_ms = 0; 104 info.arrival_time_ms = 0;
105 // TODO(philipel): Change -1, -1 to some values.
96 adapter_->AddPacket(info.sequence_number, info.payload_size, 106 adapter_->AddPacket(info.sequence_number, info.payload_size,
97 info.probe_cluster_id); 107 info.pacing_info);
98 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms); 108 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms);
99 } 109 }
100 110
101 SimulatedClock clock_; 111 SimulatedClock clock_;
102 MockBitrateControllerAdapter bitrate_controller_; 112 MockBitrateControllerAdapter bitrate_controller_;
103 std::unique_ptr<TransportFeedbackAdapter> adapter_; 113 std::unique_ptr<TransportFeedbackAdapter> adapter_;
104 114
105 uint32_t target_bitrate_bps_; 115 uint32_t target_bitrate_bps_;
106 }; 116 };
107 117
108 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { 118 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
109 std::vector<PacketInfo> packets; 119 std::vector<PacketInfo> packets;
110 packets.push_back(PacketInfo(100, 200, 0, 1500, 0)); 120 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0));
111 packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); 121 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0));
112 packets.push_back(PacketInfo(120, 220, 2, 1500, 0)); 122 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo0));
113 packets.push_back(PacketInfo(130, 230, 3, 1500, 1)); 123 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo1));
114 packets.push_back(PacketInfo(140, 240, 4, 1500, 1)); 124 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo1));
115 125
116 for (const PacketInfo& packet : packets) 126 for (const PacketInfo& packet : packets)
117 OnSentPacket(packet); 127 OnSentPacket(packet);
118 128
119 rtcp::TransportFeedback feedback; 129 rtcp::TransportFeedback feedback;
120 feedback.SetBase(packets[0].sequence_number, 130 feedback.SetBase(packets[0].sequence_number,
121 packets[0].arrival_time_ms * 1000); 131 packets[0].arrival_time_ms * 1000);
122 132
123 for (const PacketInfo& packet : packets) { 133 for (const PacketInfo& packet : packets) {
124 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 134 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
125 packet.arrival_time_ms * 1000)); 135 packet.arrival_time_ms * 1000));
126 } 136 }
127 137
128 feedback.Build(); 138 feedback.Build();
129 139
130 adapter_->OnTransportFeedback(feedback); 140 adapter_->OnTransportFeedback(feedback);
131 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 141 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
132 } 142 }
133 143
134 TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) { 144 TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) {
135 const int64_t kFeedbackTimeoutMs = 60001; 145 const int64_t kFeedbackTimeoutMs = 60001;
136 const int kMaxConsecutiveFailedLookups = 5; 146 const int kMaxConsecutiveFailedLookups = 5;
137 for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) { 147 for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) {
138 std::vector<PacketInfo> packets; 148 std::vector<PacketInfo> packets;
139 packets.push_back(PacketInfo(i * 100, 2 * i * 100, 0, 1500, 0)); 149 packets.push_back(PacketInfo(i * 100, 2 * i * 100, 0, 1500, kPacingInfo0));
140 packets.push_back(PacketInfo(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, 0)); 150 packets.push_back(
141 packets.push_back(PacketInfo(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, 0)); 151 PacketInfo(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, kPacingInfo0));
142 packets.push_back(PacketInfo(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, 1)); 152 packets.push_back(
143 packets.push_back(PacketInfo(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, 1)); 153 PacketInfo(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, kPacingInfo0));
154 packets.push_back(
155 PacketInfo(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, kPacingInfo1));
156 packets.push_back(
157 PacketInfo(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, kPacingInfo1));
144 158
145 for (const PacketInfo& packet : packets) 159 for (const PacketInfo& packet : packets)
146 OnSentPacket(packet); 160 OnSentPacket(packet);
147 161
148 rtcp::TransportFeedback feedback; 162 rtcp::TransportFeedback feedback;
149 feedback.SetBase(packets[0].sequence_number, 163 feedback.SetBase(packets[0].sequence_number,
150 packets[0].arrival_time_ms * 1000); 164 packets[0].arrival_time_ms * 1000);
151 165
152 for (const PacketInfo& packet : packets) { 166 for (const PacketInfo& packet : packets) {
153 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 167 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
154 packet.arrival_time_ms * 1000)); 168 packet.arrival_time_ms * 1000));
155 } 169 }
156 170
157 feedback.Build(); 171 feedback.Build();
158 172
159 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs); 173 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs);
160 PacketInfo later_packet(kFeedbackTimeoutMs + i * 100 + 40, 174 PacketInfo later_packet(kFeedbackTimeoutMs + i * 100 + 40,
161 kFeedbackTimeoutMs + i * 200 + 40, 5, 1500, 1); 175 kFeedbackTimeoutMs + i * 200 + 40, 5, 1500,
176 kPacingInfo1);
162 OnSentPacket(later_packet); 177 OnSentPacket(later_packet);
163 178
164 adapter_->OnTransportFeedback(feedback); 179 adapter_->OnTransportFeedback(feedback);
165 180
166 // Check that packets have timed out. 181 // Check that packets have timed out.
167 for (PacketInfo& packet : packets) { 182 for (PacketInfo& packet : packets) {
168 packet.send_time_ms = -1; 183 packet.send_time_ms = -1;
169 packet.payload_size = 0; 184 packet.payload_size = 0;
170 packet.probe_cluster_id = -1;
171 } 185 }
172 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 186 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
173 } 187 }
174 188
175 // Target bitrate should have halved due to feedback delays. 189 // Target bitrate should have halved due to feedback delays.
176 EXPECT_EQ(150000u, target_bitrate_bps_); 190 EXPECT_EQ(150000u, target_bitrate_bps_);
177 191
178 // Test with feedback that isn't late enough to time out. 192 // Test with feedback that isn't late enough to time out.
179 { 193 {
180 std::vector<PacketInfo> packets; 194 std::vector<PacketInfo> packets;
181 packets.push_back(PacketInfo(100, 200, 0, 1500, 0)); 195 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0));
182 packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); 196 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0));
183 packets.push_back(PacketInfo(120, 220, 2, 1500, 0)); 197 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo0));
184 packets.push_back(PacketInfo(130, 230, 3, 1500, 1)); 198 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo1));
185 packets.push_back(PacketInfo(140, 240, 4, 1500, 1)); 199 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo1));
186 200
187 for (const PacketInfo& packet : packets) 201 for (const PacketInfo& packet : packets)
188 OnSentPacket(packet); 202 OnSentPacket(packet);
189 203
190 rtcp::TransportFeedback feedback; 204 rtcp::TransportFeedback feedback;
191 feedback.SetBase(packets[0].sequence_number, 205 feedback.SetBase(packets[0].sequence_number,
192 packets[0].arrival_time_ms * 1000); 206 packets[0].arrival_time_ms * 1000);
193 207
194 for (const PacketInfo& packet : packets) { 208 for (const PacketInfo& packet : packets) {
195 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 209 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
196 packet.arrival_time_ms * 1000)); 210 packet.arrival_time_ms * 1000));
197 } 211 }
198 212
199 feedback.Build(); 213 feedback.Build();
200 214
201 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1); 215 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1);
202 PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240, 216 PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240,
203 5, 1500, 1); 217 5, 1500, kPacingInfo1);
204 OnSentPacket(later_packet); 218 OnSentPacket(later_packet);
205 219
206 adapter_->OnTransportFeedback(feedback); 220 adapter_->OnTransportFeedback(feedback);
207 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 221 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
208 } 222 }
209 } 223 }
210 224
211 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { 225 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
212 std::vector<PacketInfo> packets; 226 std::vector<PacketInfo> packets;
213 packets.push_back(PacketInfo(100, 200, 0, 1500, 1)); 227 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0));
214 packets.push_back(PacketInfo(110, 210, 1, 1500, 2)); 228 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo1));
215 packets.push_back(PacketInfo(120, 220, 2, 1500, 3)); 229 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo2));
216 packets.push_back(PacketInfo(130, 230, 3, 1500, 4)); 230 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo3));
217 packets.push_back(PacketInfo(140, 240, 4, 1500, 5)); 231 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo4));
218 232
219 const uint16_t kSendSideDropBefore = 1; 233 const uint16_t kSendSideDropBefore = 1;
220 const uint16_t kReceiveSideDropAfter = 3; 234 const uint16_t kReceiveSideDropAfter = 3;
221 235
222 for (const PacketInfo& packet : packets) { 236 for (const PacketInfo& packet : packets) {
223 if (packet.sequence_number >= kSendSideDropBefore) 237 if (packet.sequence_number >= kSendSideDropBefore)
224 OnSentPacket(packet); 238 OnSentPacket(packet);
225 } 239 }
226 240
227 rtcp::TransportFeedback feedback; 241 rtcp::TransportFeedback feedback;
228 feedback.SetBase(packets[0].sequence_number, 242 feedback.SetBase(packets[0].sequence_number,
229 packets[0].arrival_time_ms * 1000); 243 packets[0].arrival_time_ms * 1000);
230 244
231 for (const PacketInfo& packet : packets) { 245 for (const PacketInfo& packet : packets) {
232 if (packet.sequence_number <= kReceiveSideDropAfter) { 246 if (packet.sequence_number <= kReceiveSideDropAfter) {
233 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 247 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
234 packet.arrival_time_ms * 1000)); 248 packet.arrival_time_ms * 1000));
235 } 249 }
236 } 250 }
237 251
238 feedback.Build(); 252 feedback.Build();
239 253
240 std::vector<PacketInfo> expected_packets( 254 std::vector<PacketInfo> expected_packets(
241 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1); 255 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1);
242 // Packets that have timed out on the send-side have lost the 256 // Packets that have timed out on the send-side have lost the
243 // information stored on the send-side. 257 // information stored on the send-side.
244 for (size_t i = 0; i < kSendSideDropBefore; ++i) { 258 for (size_t i = 0; i < kSendSideDropBefore; ++i) {
245 expected_packets[i].send_time_ms = -1; 259 expected_packets[i].send_time_ms = -1;
246 expected_packets[i].probe_cluster_id = -1;
247 expected_packets[i].payload_size = 0; 260 expected_packets[i].payload_size = 0;
248 } 261 }
249 262
250 adapter_->OnTransportFeedback(feedback); 263 adapter_->OnTransportFeedback(feedback);
251 ComparePacketVectors(expected_packets, 264 ComparePacketVectors(expected_packets,
252 adapter_->GetTransportFeedbackVector()); 265 adapter_->GetTransportFeedbackVector());
253 } 266 }
254 267
255 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { 268 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
256 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor * 269 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
257 static_cast<int64_t>(1 << 8) * 270 static_cast<int64_t>(1 << 8) *
258 static_cast<int64_t>((1 << 23) - 1) / 1000; 271 static_cast<int64_t>((1 << 23) - 1) / 1000;
259 std::vector<PacketInfo> packets; 272 std::vector<PacketInfo> packets;
260 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, 273 packets.push_back(
261 PacedPacketInfo::kNotAProbe)); 274 PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo()));
262 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, 275 packets.push_back(
263 PacedPacketInfo::kNotAProbe)); 276 PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, PacedPacketInfo()));
264 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, 277 packets.push_back(
265 PacedPacketInfo::kNotAProbe)); 278 PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, PacedPacketInfo()));
266 279
267 for (const PacketInfo& packet : packets) 280 for (const PacketInfo& packet : packets)
268 OnSentPacket(packet); 281 OnSentPacket(packet);
269 282
270 for (size_t i = 0; i < packets.size(); ++i) { 283 for (size_t i = 0; i < packets.size(); ++i) {
271 std::unique_ptr<rtcp::TransportFeedback> feedback( 284 std::unique_ptr<rtcp::TransportFeedback> feedback(
272 new rtcp::TransportFeedback()); 285 new rtcp::TransportFeedback());
273 feedback->SetBase(packets[i].sequence_number, 286 feedback->SetBase(packets[i].sequence_number,
274 packets[i].arrival_time_ms * 1000); 287 packets[i].arrival_time_ms * 1000);
275 288
276 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number, 289 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number,
277 packets[i].arrival_time_ms * 1000)); 290 packets[i].arrival_time_ms * 1000));
278 291
279 rtc::Buffer raw_packet = feedback->Build(); 292 rtc::Buffer raw_packet = feedback->Build();
280 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 293 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
281 raw_packet.size()); 294 raw_packet.size());
282 295
283 std::vector<PacketInfo> expected_packets; 296 std::vector<PacketInfo> expected_packets;
284 expected_packets.push_back(packets[i]); 297 expected_packets.push_back(packets[i]);
285 298
286 adapter_->OnTransportFeedback(*feedback.get()); 299 adapter_->OnTransportFeedback(*feedback.get());
287 ComparePacketVectors(expected_packets, 300 ComparePacketVectors(expected_packets,
288 adapter_->GetTransportFeedbackVector()); 301 adapter_->GetTransportFeedbackVector());
289 } 302 }
290 } 303 }
291 304
292 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { 305 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
293 std::vector<PacketInfo> packets; 306 std::vector<PacketInfo> packets;
294 packets.push_back(PacketInfo(120, 200, 0, 1500, 0)); 307 packets.push_back(PacketInfo(120, 200, 0, 1500, kPacingInfo0));
295 packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); 308 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0));
296 packets.push_back(PacketInfo(100, 220, 2, 1500, 0)); 309 packets.push_back(PacketInfo(100, 220, 2, 1500, kPacingInfo0));
297 std::vector<PacketInfo> expected_packets; 310 std::vector<PacketInfo> expected_packets;
298 expected_packets.push_back(packets[2]); 311 expected_packets.push_back(packets[2]);
299 expected_packets.push_back(packets[1]); 312 expected_packets.push_back(packets[1]);
300 expected_packets.push_back(packets[0]); 313 expected_packets.push_back(packets[0]);
301 314
302 for (const PacketInfo& packet : packets) 315 for (const PacketInfo& packet : packets)
303 OnSentPacket(packet); 316 OnSentPacket(packet);
304 317
305 rtcp::TransportFeedback feedback; 318 rtcp::TransportFeedback feedback;
306 feedback.SetBase(packets[0].sequence_number, 319 feedback.SetBase(packets[0].sequence_number,
(...skipping 15 matching lines...) Expand all
322 std::vector<PacketInfo> sent_packets; 335 std::vector<PacketInfo> sent_packets;
323 const int64_t kSmallDeltaUs = 336 const int64_t kSmallDeltaUs =
324 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1); 337 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
325 const int64_t kLargePositiveDeltaUs = 338 const int64_t kLargePositiveDeltaUs =
326 rtcp::TransportFeedback::kDeltaScaleFactor * 339 rtcp::TransportFeedback::kDeltaScaleFactor *
327 std::numeric_limits<int16_t>::max(); 340 std::numeric_limits<int16_t>::max();
328 const int64_t kLargeNegativeDeltaUs = 341 const int64_t kLargeNegativeDeltaUs =
329 rtcp::TransportFeedback::kDeltaScaleFactor * 342 rtcp::TransportFeedback::kDeltaScaleFactor *
330 std::numeric_limits<int16_t>::min(); 343 std::numeric_limits<int16_t>::min();
331 344
332 PacketInfo info(100, 200, 0, 1500, true, PacedPacketInfo::kNotAProbe); 345 PacketInfo info(100, 200, 0, 1500, true, PacedPacketInfo());
333 sent_packets.push_back(info); 346 sent_packets.push_back(info);
334 347
335 info.send_time_ms += kSmallDeltaUs / 1000; 348 info.send_time_ms += kSmallDeltaUs / 1000;
336 info.arrival_time_ms += kSmallDeltaUs / 1000; 349 info.arrival_time_ms += kSmallDeltaUs / 1000;
337 ++info.sequence_number; 350 ++info.sequence_number;
338 sent_packets.push_back(info); 351 sent_packets.push_back(info);
339 352
340 info.send_time_ms += kLargePositiveDeltaUs / 1000; 353 info.send_time_ms += kLargePositiveDeltaUs / 1000;
341 info.arrival_time_ms += kLargePositiveDeltaUs / 1000; 354 info.arrival_time_ms += kLargePositiveDeltaUs / 1000;
342 ++info.sequence_number; 355 ++info.sequence_number;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 424
412 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) { 425 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) {
413 uint16_t seq_num = 0; 426 uint16_t seq_num = 0;
414 size_t kPayloadSize = 1000; 427 size_t kPayloadSize = 1000;
415 // The test must run and insert packets/feedback long enough that the 428 // The test must run and insert packets/feedback long enough that the
416 // BWE computes a valid estimate. 429 // BWE computes a valid estimate.
417 const int64_t kRunTimeMs = 6000; 430 const int64_t kRunTimeMs = 6000;
418 int64_t start_time_ms = clock_.TimeInMilliseconds(); 431 int64_t start_time_ms = clock_.TimeInMilliseconds();
419 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) { 432 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) {
420 PacketInfo packet(clock_.TimeInMilliseconds(), clock_.TimeInMilliseconds(), 433 PacketInfo packet(clock_.TimeInMilliseconds(), clock_.TimeInMilliseconds(),
421 seq_num, kPayloadSize, PacedPacketInfo::kNotAProbe); 434 seq_num, kPayloadSize, PacedPacketInfo());
422 OnSentPacket(packet); 435 OnSentPacket(packet);
423 // Create expected feedback and send into adapter. 436 // Create expected feedback and send into adapter.
424 std::unique_ptr<rtcp::TransportFeedback> feedback( 437 std::unique_ptr<rtcp::TransportFeedback> feedback(
425 new rtcp::TransportFeedback()); 438 new rtcp::TransportFeedback());
426 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000); 439 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000);
427 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number, 440 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
428 packet.arrival_time_ms * 1000)); 441 packet.arrival_time_ms * 1000));
429 rtc::Buffer raw_packet = feedback->Build(); 442 rtc::Buffer raw_packet = feedback->Build();
430 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 443 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
431 raw_packet.size()); 444 raw_packet.size());
432 EXPECT_TRUE(feedback.get() != nullptr); 445 EXPECT_TRUE(feedback.get() != nullptr);
433 adapter_->OnTransportFeedback(*feedback.get()); 446 adapter_->OnTransportFeedback(*feedback.get());
434 clock_.AdvanceTimeMilliseconds(50); 447 clock_.AdvanceTimeMilliseconds(50);
435 ++seq_num; 448 ++seq_num;
436 } 449 }
437 EXPECT_GT(target_bitrate_bps_, 0u); 450 EXPECT_GT(target_bitrate_bps_, 0u);
438 } 451 }
439 452
440 } // namespace test 453 } // namespace test
441 } // namespace webrtc 454 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698