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

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

Issue 2708873003: Propagate packet pacing information to SendTimeHistory. (Closed)
Patch Set: TransportFeedbackAdapterTest fix. 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; 185 packet.pacing_info = PacedPacketInfo();
171 } 186 }
172 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 187 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
173 } 188 }
174 189
175 // Target bitrate should have halved due to feedback delays. 190 // Target bitrate should have halved due to feedback delays.
176 EXPECT_EQ(150000u, target_bitrate_bps_); 191 EXPECT_EQ(150000u, target_bitrate_bps_);
177 192
178 // Test with feedback that isn't late enough to time out. 193 // Test with feedback that isn't late enough to time out.
179 { 194 {
180 std::vector<PacketInfo> packets; 195 std::vector<PacketInfo> packets;
181 packets.push_back(PacketInfo(100, 200, 0, 1500, 0)); 196 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0));
182 packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); 197 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0));
183 packets.push_back(PacketInfo(120, 220, 2, 1500, 0)); 198 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo0));
184 packets.push_back(PacketInfo(130, 230, 3, 1500, 1)); 199 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo1));
185 packets.push_back(PacketInfo(140, 240, 4, 1500, 1)); 200 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo1));
186 201
187 for (const PacketInfo& packet : packets) 202 for (const PacketInfo& packet : packets)
188 OnSentPacket(packet); 203 OnSentPacket(packet);
189 204
190 rtcp::TransportFeedback feedback; 205 rtcp::TransportFeedback feedback;
191 feedback.SetBase(packets[0].sequence_number, 206 feedback.SetBase(packets[0].sequence_number,
192 packets[0].arrival_time_ms * 1000); 207 packets[0].arrival_time_ms * 1000);
193 208
194 for (const PacketInfo& packet : packets) { 209 for (const PacketInfo& packet : packets) {
195 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 210 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
196 packet.arrival_time_ms * 1000)); 211 packet.arrival_time_ms * 1000));
197 } 212 }
198 213
199 feedback.Build(); 214 feedback.Build();
200 215
201 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1); 216 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1);
202 PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240, 217 PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240,
203 5, 1500, 1); 218 5, 1500, kPacingInfo1);
204 OnSentPacket(later_packet); 219 OnSentPacket(later_packet);
205 220
206 adapter_->OnTransportFeedback(feedback); 221 adapter_->OnTransportFeedback(feedback);
207 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); 222 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
208 } 223 }
209 } 224 }
210 225
211 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { 226 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
212 std::vector<PacketInfo> packets; 227 std::vector<PacketInfo> packets;
213 packets.push_back(PacketInfo(100, 200, 0, 1500, 1)); 228 packets.push_back(PacketInfo(100, 200, 0, 1500, kPacingInfo0));
214 packets.push_back(PacketInfo(110, 210, 1, 1500, 2)); 229 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo1));
215 packets.push_back(PacketInfo(120, 220, 2, 1500, 3)); 230 packets.push_back(PacketInfo(120, 220, 2, 1500, kPacingInfo2));
216 packets.push_back(PacketInfo(130, 230, 3, 1500, 4)); 231 packets.push_back(PacketInfo(130, 230, 3, 1500, kPacingInfo3));
217 packets.push_back(PacketInfo(140, 240, 4, 1500, 5)); 232 packets.push_back(PacketInfo(140, 240, 4, 1500, kPacingInfo4));
218 233
219 const uint16_t kSendSideDropBefore = 1; 234 const uint16_t kSendSideDropBefore = 1;
220 const uint16_t kReceiveSideDropAfter = 3; 235 const uint16_t kReceiveSideDropAfter = 3;
221 236
222 for (const PacketInfo& packet : packets) { 237 for (const PacketInfo& packet : packets) {
223 if (packet.sequence_number >= kSendSideDropBefore) 238 if (packet.sequence_number >= kSendSideDropBefore)
224 OnSentPacket(packet); 239 OnSentPacket(packet);
225 } 240 }
226 241
227 rtcp::TransportFeedback feedback; 242 rtcp::TransportFeedback feedback;
228 feedback.SetBase(packets[0].sequence_number, 243 feedback.SetBase(packets[0].sequence_number,
229 packets[0].arrival_time_ms * 1000); 244 packets[0].arrival_time_ms * 1000);
230 245
231 for (const PacketInfo& packet : packets) { 246 for (const PacketInfo& packet : packets) {
232 if (packet.sequence_number <= kReceiveSideDropAfter) { 247 if (packet.sequence_number <= kReceiveSideDropAfter) {
233 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 248 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
234 packet.arrival_time_ms * 1000)); 249 packet.arrival_time_ms * 1000));
235 } 250 }
236 } 251 }
237 252
238 feedback.Build(); 253 feedback.Build();
239 254
240 std::vector<PacketInfo> expected_packets( 255 std::vector<PacketInfo> expected_packets(
241 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1); 256 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1);
242 // Packets that have timed out on the send-side have lost the 257 // Packets that have timed out on the send-side have lost the
243 // information stored on the send-side. 258 // information stored on the send-side.
244 for (size_t i = 0; i < kSendSideDropBefore; ++i) { 259 for (size_t i = 0; i < kSendSideDropBefore; ++i) {
245 expected_packets[i].send_time_ms = -1; 260 expected_packets[i].send_time_ms = -1;
246 expected_packets[i].probe_cluster_id = -1;
247 expected_packets[i].payload_size = 0; 261 expected_packets[i].payload_size = 0;
262 expected_packets[i].pacing_info = PacedPacketInfo();
248 } 263 }
249 264
250 adapter_->OnTransportFeedback(feedback); 265 adapter_->OnTransportFeedback(feedback);
251 ComparePacketVectors(expected_packets, 266 ComparePacketVectors(expected_packets,
252 adapter_->GetTransportFeedbackVector()); 267 adapter_->GetTransportFeedbackVector());
253 } 268 }
254 269
255 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { 270 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
256 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor * 271 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
257 static_cast<int64_t>(1 << 8) * 272 static_cast<int64_t>(1 << 8) *
258 static_cast<int64_t>((1 << 23) - 1) / 1000; 273 static_cast<int64_t>((1 << 23) - 1) / 1000;
259 std::vector<PacketInfo> packets; 274 std::vector<PacketInfo> packets;
260 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, 275 packets.push_back(
261 PacedPacketInfo::kNotAProbe)); 276 PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo()));
262 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, 277 packets.push_back(
263 PacedPacketInfo::kNotAProbe)); 278 PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, PacedPacketInfo()));
264 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, 279 packets.push_back(
265 PacedPacketInfo::kNotAProbe)); 280 PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, PacedPacketInfo()));
266 281
267 for (const PacketInfo& packet : packets) 282 for (const PacketInfo& packet : packets)
268 OnSentPacket(packet); 283 OnSentPacket(packet);
269 284
270 for (size_t i = 0; i < packets.size(); ++i) { 285 for (size_t i = 0; i < packets.size(); ++i) {
271 std::unique_ptr<rtcp::TransportFeedback> feedback( 286 std::unique_ptr<rtcp::TransportFeedback> feedback(
272 new rtcp::TransportFeedback()); 287 new rtcp::TransportFeedback());
273 feedback->SetBase(packets[i].sequence_number, 288 feedback->SetBase(packets[i].sequence_number,
274 packets[i].arrival_time_ms * 1000); 289 packets[i].arrival_time_ms * 1000);
275 290
276 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number, 291 EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number,
277 packets[i].arrival_time_ms * 1000)); 292 packets[i].arrival_time_ms * 1000));
278 293
279 rtc::Buffer raw_packet = feedback->Build(); 294 rtc::Buffer raw_packet = feedback->Build();
280 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 295 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
281 raw_packet.size()); 296 raw_packet.size());
282 297
283 std::vector<PacketInfo> expected_packets; 298 std::vector<PacketInfo> expected_packets;
284 expected_packets.push_back(packets[i]); 299 expected_packets.push_back(packets[i]);
285 300
286 adapter_->OnTransportFeedback(*feedback.get()); 301 adapter_->OnTransportFeedback(*feedback.get());
287 ComparePacketVectors(expected_packets, 302 ComparePacketVectors(expected_packets,
288 adapter_->GetTransportFeedbackVector()); 303 adapter_->GetTransportFeedbackVector());
289 } 304 }
290 } 305 }
291 306
292 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { 307 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
293 std::vector<PacketInfo> packets; 308 std::vector<PacketInfo> packets;
294 packets.push_back(PacketInfo(120, 200, 0, 1500, 0)); 309 packets.push_back(PacketInfo(120, 200, 0, 1500, kPacingInfo0));
295 packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); 310 packets.push_back(PacketInfo(110, 210, 1, 1500, kPacingInfo0));
296 packets.push_back(PacketInfo(100, 220, 2, 1500, 0)); 311 packets.push_back(PacketInfo(100, 220, 2, 1500, kPacingInfo0));
297 std::vector<PacketInfo> expected_packets; 312 std::vector<PacketInfo> expected_packets;
298 expected_packets.push_back(packets[2]); 313 expected_packets.push_back(packets[2]);
299 expected_packets.push_back(packets[1]); 314 expected_packets.push_back(packets[1]);
300 expected_packets.push_back(packets[0]); 315 expected_packets.push_back(packets[0]);
301 316
302 for (const PacketInfo& packet : packets) 317 for (const PacketInfo& packet : packets)
303 OnSentPacket(packet); 318 OnSentPacket(packet);
304 319
305 rtcp::TransportFeedback feedback; 320 rtcp::TransportFeedback feedback;
306 feedback.SetBase(packets[0].sequence_number, 321 feedback.SetBase(packets[0].sequence_number,
(...skipping 15 matching lines...) Expand all
322 std::vector<PacketInfo> sent_packets; 337 std::vector<PacketInfo> sent_packets;
323 const int64_t kSmallDeltaUs = 338 const int64_t kSmallDeltaUs =
324 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1); 339 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
325 const int64_t kLargePositiveDeltaUs = 340 const int64_t kLargePositiveDeltaUs =
326 rtcp::TransportFeedback::kDeltaScaleFactor * 341 rtcp::TransportFeedback::kDeltaScaleFactor *
327 std::numeric_limits<int16_t>::max(); 342 std::numeric_limits<int16_t>::max();
328 const int64_t kLargeNegativeDeltaUs = 343 const int64_t kLargeNegativeDeltaUs =
329 rtcp::TransportFeedback::kDeltaScaleFactor * 344 rtcp::TransportFeedback::kDeltaScaleFactor *
330 std::numeric_limits<int16_t>::min(); 345 std::numeric_limits<int16_t>::min();
331 346
332 PacketInfo info(100, 200, 0, 1500, true, PacedPacketInfo::kNotAProbe); 347 PacketInfo info(100, 200, 0, 1500, true, PacedPacketInfo());
333 sent_packets.push_back(info); 348 sent_packets.push_back(info);
334 349
335 info.send_time_ms += kSmallDeltaUs / 1000; 350 info.send_time_ms += kSmallDeltaUs / 1000;
336 info.arrival_time_ms += kSmallDeltaUs / 1000; 351 info.arrival_time_ms += kSmallDeltaUs / 1000;
337 ++info.sequence_number; 352 ++info.sequence_number;
338 sent_packets.push_back(info); 353 sent_packets.push_back(info);
339 354
340 info.send_time_ms += kLargePositiveDeltaUs / 1000; 355 info.send_time_ms += kLargePositiveDeltaUs / 1000;
341 info.arrival_time_ms += kLargePositiveDeltaUs / 1000; 356 info.arrival_time_ms += kLargePositiveDeltaUs / 1000;
342 ++info.sequence_number; 357 ++info.sequence_number;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 426
412 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) { 427 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) {
413 uint16_t seq_num = 0; 428 uint16_t seq_num = 0;
414 size_t kPayloadSize = 1000; 429 size_t kPayloadSize = 1000;
415 // The test must run and insert packets/feedback long enough that the 430 // The test must run and insert packets/feedback long enough that the
416 // BWE computes a valid estimate. 431 // BWE computes a valid estimate.
417 const int64_t kRunTimeMs = 6000; 432 const int64_t kRunTimeMs = 6000;
418 int64_t start_time_ms = clock_.TimeInMilliseconds(); 433 int64_t start_time_ms = clock_.TimeInMilliseconds();
419 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) { 434 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) {
420 PacketInfo packet(clock_.TimeInMilliseconds(), clock_.TimeInMilliseconds(), 435 PacketInfo packet(clock_.TimeInMilliseconds(), clock_.TimeInMilliseconds(),
421 seq_num, kPayloadSize, PacedPacketInfo::kNotAProbe); 436 seq_num, kPayloadSize, PacedPacketInfo());
422 OnSentPacket(packet); 437 OnSentPacket(packet);
423 // Create expected feedback and send into adapter. 438 // Create expected feedback and send into adapter.
424 std::unique_ptr<rtcp::TransportFeedback> feedback( 439 std::unique_ptr<rtcp::TransportFeedback> feedback(
425 new rtcp::TransportFeedback()); 440 new rtcp::TransportFeedback());
426 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000); 441 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000);
427 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number, 442 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
428 packet.arrival_time_ms * 1000)); 443 packet.arrival_time_ms * 1000));
429 rtc::Buffer raw_packet = feedback->Build(); 444 rtc::Buffer raw_packet = feedback->Build();
430 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 445 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
431 raw_packet.size()); 446 raw_packet.size());
432 EXPECT_TRUE(feedback.get() != nullptr); 447 EXPECT_TRUE(feedback.get() != nullptr);
433 adapter_->OnTransportFeedback(*feedback.get()); 448 adapter_->OnTransportFeedback(*feedback.get());
434 clock_.AdvanceTimeMilliseconds(50); 449 clock_.AdvanceTimeMilliseconds(50);
435 ++seq_num; 450 ++seq_num;
436 } 451 }
437 EXPECT_GT(target_bitrate_bps_, 0u); 452 EXPECT_GT(target_bitrate_bps_, 0u);
438 } 453 }
439 454
440 } // namespace test 455 } // namespace test
441 } // namespace webrtc 456 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/transport_feedback_adapter.cc ('k') | webrtc/modules/include/module_common_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698