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

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

Issue 2743553003: Revert of Move delay_based_bwe_ into CongestionController (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
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/congestion_controller_unittests_h elper.h"
19 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h" 18 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h"
20 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
21 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
22 #include "webrtc/system_wrappers/include/clock.h" 21 #include "webrtc/system_wrappers/include/clock.h"
23 #include "webrtc/test/gmock.h" 22 #include "webrtc/test/gmock.h"
24 #include "webrtc/test/gtest.h" 23 #include "webrtc/test/gtest.h"
25 24
26 using ::testing::_; 25 using ::testing::_;
27 using ::testing::Invoke; 26 using ::testing::Invoke;
28 27
29 namespace webrtc { 28 namespace webrtc {
30 29
31 namespace { 30 namespace {
32 const PacedPacketInfo kPacingInfo0(0, 5, 2000); 31 const PacedPacketInfo kPacingInfo0(0, 5, 2000);
33 const PacedPacketInfo kPacingInfo1(1, 8, 4000); 32 const PacedPacketInfo kPacingInfo1(1, 8, 4000);
34 const PacedPacketInfo kPacingInfo2(2, 14, 7000); 33 const PacedPacketInfo kPacingInfo2(2, 14, 7000);
35 const PacedPacketInfo kPacingInfo3(3, 20, 10000); 34 const PacedPacketInfo kPacingInfo3(3, 20, 10000);
36 const PacedPacketInfo kPacingInfo4(4, 22, 10000); 35 const PacedPacketInfo kPacingInfo4(4, 22, 10000);
37 } 36 }
38 37
39 namespace test { 38 namespace test {
40 39
41 class TransportFeedbackAdapterTest : public ::testing::Test { 40 class TransportFeedbackAdapterTest : public ::testing::Test {
42 public: 41 public:
43 TransportFeedbackAdapterTest() : clock_(0) {} 42 TransportFeedbackAdapterTest()
43 : clock_(0), bitrate_controller_(this), target_bitrate_bps_(0) {}
44 44
45 virtual ~TransportFeedbackAdapterTest() {} 45 virtual ~TransportFeedbackAdapterTest() {}
46 46
47 virtual void SetUp() { 47 virtual void SetUp() {
48 adapter_.reset(new TransportFeedbackAdapter(&clock_)); 48 adapter_.reset(
49 new TransportFeedbackAdapter(nullptr, &clock_, &bitrate_controller_));
50 adapter_->InitBwe();
51 adapter_->SetStartBitrate(300000);
49 } 52 }
50 53
51 virtual void TearDown() { adapter_.reset(); } 54 virtual void TearDown() { adapter_.reset(); }
52 55
53 protected: 56 protected:
57 // Proxy class used since TransportFeedbackAdapter will own the instance
58 // passed at construction.
59 class MockBitrateControllerAdapter : public MockBitrateController {
60 public:
61 explicit MockBitrateControllerAdapter(TransportFeedbackAdapterTest* owner)
62 : MockBitrateController(), owner_(owner) {}
63
64 ~MockBitrateControllerAdapter() override {}
65
66 void OnDelayBasedBweResult(const DelayBasedBwe::Result& result) override {
67 owner_->target_bitrate_bps_ = result.target_bitrate_bps;
68 }
69
70 TransportFeedbackAdapterTest* const owner_;
71 };
72
54 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} 73 void OnReceivedEstimatedBitrate(uint32_t bitrate) {}
55 74
56 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, 75 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks,
57 int64_t rtt, 76 int64_t rtt,
58 int64_t now_ms) {} 77 int64_t now_ms) {}
59 78
79 void ComparePacketVectors(const std::vector<PacketFeedback>& truth,
80 const std::vector<PacketFeedback>& input) {
81 ASSERT_EQ(truth.size(), input.size());
82 size_t len = truth.size();
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
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
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
89 // equal. However, the difference must be the same for all x.
90 int64_t arrival_time_delta =
91 truth[0].arrival_time_ms - input[0].arrival_time_ms;
92 for (size_t i = 0; i < len; ++i) {
93 RTC_CHECK(truth[i].arrival_time_ms != PacketFeedback::kNotReceived);
94 if (input[i].arrival_time_ms != PacketFeedback::kNotReceived) {
95 EXPECT_EQ(truth[i].arrival_time_ms,
96 input[i].arrival_time_ms + arrival_time_delta);
97 }
98 EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms);
99 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
100 EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
101 EXPECT_EQ(truth[i].pacing_info, input[i].pacing_info);
102 }
103 }
104
60 void OnSentPacket(const PacketFeedback& packet_feedback) { 105 void OnSentPacket(const PacketFeedback& packet_feedback) {
61 adapter_->AddPacket(packet_feedback.sequence_number, 106 adapter_->AddPacket(packet_feedback.sequence_number,
62 packet_feedback.payload_size, 107 packet_feedback.payload_size,
63 packet_feedback.pacing_info); 108 packet_feedback.pacing_info);
64 adapter_->OnSentPacket(packet_feedback.sequence_number, 109 adapter_->OnSentPacket(packet_feedback.sequence_number,
65 packet_feedback.send_time_ms); 110 packet_feedback.send_time_ms);
66 } 111 }
67 112
68 SimulatedClock clock_; 113 SimulatedClock clock_;
114 MockBitrateControllerAdapter bitrate_controller_;
69 std::unique_ptr<TransportFeedbackAdapter> adapter_; 115 std::unique_ptr<TransportFeedbackAdapter> adapter_;
116
117 uint32_t target_bitrate_bps_;
70 }; 118 };
71 119
72 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { 120 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
73 std::vector<PacketFeedback> packets; 121 std::vector<PacketFeedback> packets;
74 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); 122 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
75 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); 123 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
76 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); 124 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0));
77 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); 125 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1));
78 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); 126 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1));
79 127
80 for (const PacketFeedback& packet : packets) 128 for (const PacketFeedback& packet : packets)
81 OnSentPacket(packet); 129 OnSentPacket(packet);
82 130
83 rtcp::TransportFeedback feedback; 131 rtcp::TransportFeedback feedback;
84 feedback.SetBase(packets[0].sequence_number, 132 feedback.SetBase(packets[0].sequence_number,
85 packets[0].arrival_time_ms * 1000); 133 packets[0].arrival_time_ms * 1000);
86 134
87 for (const PacketFeedback& packet : packets) { 135 for (const PacketFeedback& packet : packets) {
88 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 136 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
89 packet.arrival_time_ms * 1000)); 137 packet.arrival_time_ms * 1000));
90 } 138 }
91 139
92 feedback.Build(); 140 feedback.Build();
93 141
94 adapter_->OnTransportFeedback(feedback); 142 adapter_->OnTransportFeedback(feedback);
95 ComparePacketFeedbackVectors(packets, adapter_->GetTransportFeedbackVector()); 143 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
96 } 144 }
97 145
98 TEST_F(TransportFeedbackAdapterTest, FeedbackVectorReportsUnreceived) { 146 TEST_F(TransportFeedbackAdapterTest, FeedbackVectorReportsUnreceived) {
99 std::vector<PacketFeedback> sent_packets = { 147 std::vector<PacketFeedback> sent_packets = {
100 PacketFeedback(100, 220, 0, 1500, kPacingInfo0), 148 PacketFeedback(100, 220, 0, 1500, kPacingInfo0),
101 PacketFeedback(110, 210, 1, 1500, kPacingInfo0), 149 PacketFeedback(110, 210, 1, 1500, kPacingInfo0),
102 PacketFeedback(120, 220, 2, 1500, kPacingInfo0), 150 PacketFeedback(120, 220, 2, 1500, kPacingInfo0),
103 PacketFeedback(130, 230, 3, 1500, kPacingInfo0), 151 PacketFeedback(130, 230, 3, 1500, kPacingInfo0),
104 PacketFeedback(140, 240, 4, 1500, kPacingInfo0), 152 PacketFeedback(140, 240, 4, 1500, kPacingInfo0),
105 PacketFeedback(150, 250, 5, 1500, kPacingInfo0), 153 PacketFeedback(150, 250, 5, 1500, kPacingInfo0),
(...skipping 14 matching lines...) Expand all
120 received_packets[0].arrival_time_ms * 1000); 168 received_packets[0].arrival_time_ms * 1000);
121 169
122 for (const PacketFeedback& packet : received_packets) { 170 for (const PacketFeedback& packet : received_packets) {
123 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 171 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
124 packet.arrival_time_ms * 1000)); 172 packet.arrival_time_ms * 1000));
125 } 173 }
126 174
127 feedback.Build(); 175 feedback.Build();
128 176
129 adapter_->OnTransportFeedback(feedback); 177 adapter_->OnTransportFeedback(feedback);
130 ComparePacketFeedbackVectors(sent_packets, 178 ComparePacketVectors(sent_packets, adapter_->GetTransportFeedbackVector());
131 adapter_->GetTransportFeedbackVector()); 179 }
180
181 TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) {
182 const int64_t kFeedbackTimeoutMs = 60001;
183 const int kMaxConsecutiveFailedLookups = 5;
184 for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) {
185 std::vector<PacketFeedback> packets;
186 packets.push_back(
187 PacketFeedback(i * 100, 2 * i * 100, 0, 1500, kPacingInfo0));
188 packets.push_back(
189 PacketFeedback(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, kPacingInfo0));
190 packets.push_back(
191 PacketFeedback(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, kPacingInfo0));
192 packets.push_back(
193 PacketFeedback(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, kPacingInfo1));
194 packets.push_back(
195 PacketFeedback(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, kPacingInfo1));
196
197 for (const PacketFeedback& packet : packets)
198 OnSentPacket(packet);
199
200 rtcp::TransportFeedback feedback;
201 feedback.SetBase(packets[0].sequence_number,
202 packets[0].arrival_time_ms * 1000);
203
204 for (const PacketFeedback& packet : packets) {
205 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
206 packet.arrival_time_ms * 1000));
207 }
208
209 feedback.Build();
210
211 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs);
212 PacketFeedback later_packet(kFeedbackTimeoutMs + i * 100 + 40,
213 kFeedbackTimeoutMs + i * 200 + 40, 5, 1500,
214 kPacingInfo1);
215 OnSentPacket(later_packet);
216
217 adapter_->OnTransportFeedback(feedback);
218
219 // Check that packets have timed out.
220 for (PacketFeedback& packet : packets) {
221 packet.send_time_ms = -1;
222 packet.payload_size = 0;
223 packet.pacing_info = PacedPacketInfo();
224 }
225 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
226 }
227
228 // Target bitrate should have halved due to feedback delays.
229 EXPECT_EQ(150000u, target_bitrate_bps_);
230
231 // Test with feedback that isn't late enough to time out.
232 {
233 std::vector<PacketFeedback> packets;
234 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
235 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
236 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0));
237 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1));
238 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1));
239
240 for (const PacketFeedback& packet : packets)
241 OnSentPacket(packet);
242
243 rtcp::TransportFeedback feedback;
244 feedback.SetBase(packets[0].sequence_number,
245 packets[0].arrival_time_ms * 1000);
246
247 for (const PacketFeedback& packet : packets) {
248 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
249 packet.arrival_time_ms * 1000));
250 }
251
252 feedback.Build();
253
254 clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1);
255 PacketFeedback later_packet(kFeedbackTimeoutMs + 140,
256 kFeedbackTimeoutMs + 240, 5, 1500,
257 kPacingInfo1);
258 OnSentPacket(later_packet);
259
260 adapter_->OnTransportFeedback(feedback);
261 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
262 }
132 } 263 }
133 264
134 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { 265 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
135 std::vector<PacketFeedback> packets; 266 std::vector<PacketFeedback> packets;
136 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); 267 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0));
137 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo1)); 268 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo1));
138 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo2)); 269 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo2));
139 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo3)); 270 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo3));
140 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo4)); 271 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo4));
141 272
(...skipping 22 matching lines...) Expand all
164 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1); 295 packets.begin(), packets.begin() + kReceiveSideDropAfter + 1);
165 // Packets that have timed out on the send-side have lost the 296 // Packets that have timed out on the send-side have lost the
166 // information stored on the send-side. 297 // information stored on the send-side.
167 for (size_t i = 0; i < kSendSideDropBefore; ++i) { 298 for (size_t i = 0; i < kSendSideDropBefore; ++i) {
168 expected_packets[i].send_time_ms = -1; 299 expected_packets[i].send_time_ms = -1;
169 expected_packets[i].payload_size = 0; 300 expected_packets[i].payload_size = 0;
170 expected_packets[i].pacing_info = PacedPacketInfo(); 301 expected_packets[i].pacing_info = PacedPacketInfo();
171 } 302 }
172 303
173 adapter_->OnTransportFeedback(feedback); 304 adapter_->OnTransportFeedback(feedback);
174 ComparePacketFeedbackVectors(expected_packets, 305 ComparePacketVectors(expected_packets,
175 adapter_->GetTransportFeedbackVector()); 306 adapter_->GetTransportFeedbackVector());
176 } 307 }
177 308
178 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { 309 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
179 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor * 310 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
180 static_cast<int64_t>(1 << 8) * 311 static_cast<int64_t>(1 << 8) *
181 static_cast<int64_t>((1 << 23) - 1) / 1000; 312 static_cast<int64_t>((1 << 23) - 1) / 1000;
182 std::vector<PacketFeedback> packets; 313 std::vector<PacketFeedback> packets;
183 packets.push_back( 314 packets.push_back(
184 PacketFeedback(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo())); 315 PacketFeedback(kHighArrivalTimeMs - 64, 200, 0, 1500, PacedPacketInfo()));
185 packets.push_back( 316 packets.push_back(
(...skipping 14 matching lines...) Expand all
200 packets[i].arrival_time_ms * 1000)); 331 packets[i].arrival_time_ms * 1000));
201 332
202 rtc::Buffer raw_packet = feedback->Build(); 333 rtc::Buffer raw_packet = feedback->Build();
203 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), 334 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
204 raw_packet.size()); 335 raw_packet.size());
205 336
206 std::vector<PacketFeedback> expected_packets; 337 std::vector<PacketFeedback> expected_packets;
207 expected_packets.push_back(packets[i]); 338 expected_packets.push_back(packets[i]);
208 339
209 adapter_->OnTransportFeedback(*feedback.get()); 340 adapter_->OnTransportFeedback(*feedback.get());
210 ComparePacketFeedbackVectors(expected_packets, 341 ComparePacketVectors(expected_packets,
211 adapter_->GetTransportFeedbackVector()); 342 adapter_->GetTransportFeedbackVector());
212 } 343 }
213 } 344 }
214 345
215 TEST_F(TransportFeedbackAdapterTest, HandlesArrivalReordering) { 346 TEST_F(TransportFeedbackAdapterTest, HandlesArrivalReordering) {
216 std::vector<PacketFeedback> packets; 347 std::vector<PacketFeedback> packets;
217 packets.push_back(PacketFeedback(120, 200, 0, 1500, kPacingInfo0)); 348 packets.push_back(PacketFeedback(120, 200, 0, 1500, kPacingInfo0));
218 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); 349 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0));
219 packets.push_back(PacketFeedback(100, 220, 2, 1500, kPacingInfo0)); 350 packets.push_back(PacketFeedback(100, 220, 2, 1500, kPacingInfo0));
220 351
221 for (const PacketFeedback& packet : packets) 352 for (const PacketFeedback& packet : packets)
222 OnSentPacket(packet); 353 OnSentPacket(packet);
223 354
224 rtcp::TransportFeedback feedback; 355 rtcp::TransportFeedback feedback;
225 feedback.SetBase(packets[0].sequence_number, 356 feedback.SetBase(packets[0].sequence_number,
226 packets[0].arrival_time_ms * 1000); 357 packets[0].arrival_time_ms * 1000);
227 358
228 for (const PacketFeedback& packet : packets) { 359 for (const PacketFeedback& packet : packets) {
229 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, 360 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
230 packet.arrival_time_ms * 1000)); 361 packet.arrival_time_ms * 1000));
231 } 362 }
232 363
233 feedback.Build(); 364 feedback.Build();
234 365
235 // Adapter keeps the packets ordered by sequence number (which is itself 366 // Adapter keeps the packets ordered by sequence number (which is itself
236 // assigned by the order of transmission). Reordering by some other criteria, 367 // assigned by the order of transmission). Reordering by some other criteria,
237 // eg. arrival time, is up to the observers. 368 // eg. arrival time, is up to the observers.
238 adapter_->OnTransportFeedback(feedback); 369 adapter_->OnTransportFeedback(feedback);
239 ComparePacketFeedbackVectors(packets, adapter_->GetTransportFeedbackVector()); 370 ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector());
240 } 371 }
241 372
242 TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) { 373 TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) {
243 std::vector<PacketFeedback> sent_packets; 374 std::vector<PacketFeedback> sent_packets;
244 const int64_t kSmallDeltaUs = 375 const int64_t kSmallDeltaUs =
245 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1); 376 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
246 const int64_t kLargePositiveDeltaUs = 377 const int64_t kLargePositiveDeltaUs =
247 rtcp::TransportFeedback::kDeltaScaleFactor * 378 rtcp::TransportFeedback::kDeltaScaleFactor *
248 std::numeric_limits<int16_t>::max(); 379 std::numeric_limits<int16_t>::max();
249 const int64_t kLargeNegativeDeltaUs = 380 const int64_t kLargeNegativeDeltaUs =
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000)); 423 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000));
293 424
294 rtc::Buffer raw_packet = feedback->Build(); 425 rtc::Buffer raw_packet = feedback->Build();
295 feedback = 426 feedback =
296 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); 427 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
297 428
298 std::vector<PacketFeedback> received_feedback; 429 std::vector<PacketFeedback> received_feedback;
299 430
300 EXPECT_TRUE(feedback.get() != nullptr); 431 EXPECT_TRUE(feedback.get() != nullptr);
301 adapter_->OnTransportFeedback(*feedback.get()); 432 adapter_->OnTransportFeedback(*feedback.get());
302 ComparePacketFeedbackVectors(sent_packets, 433 ComparePacketVectors(sent_packets, adapter_->GetTransportFeedbackVector());
303 adapter_->GetTransportFeedbackVector());
304 434
305 // Create a new feedback message and add the trailing item. 435 // Create a new feedback message and add the trailing item.
306 feedback.reset(new rtcp::TransportFeedback()); 436 feedback.reset(new rtcp::TransportFeedback());
307 feedback->SetBase(packet_feedback.sequence_number, 437 feedback->SetBase(packet_feedback.sequence_number,
308 packet_feedback.arrival_time_ms * 1000); 438 packet_feedback.arrival_time_ms * 1000);
309 EXPECT_TRUE(feedback->AddReceivedPacket( 439 EXPECT_TRUE(feedback->AddReceivedPacket(
310 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000)); 440 packet_feedback.sequence_number, packet_feedback.arrival_time_ms * 1000));
311 raw_packet = feedback->Build(); 441 raw_packet = feedback->Build();
312 feedback = 442 feedback =
313 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); 443 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
314 444
315 EXPECT_TRUE(feedback.get() != nullptr); 445 EXPECT_TRUE(feedback.get() != nullptr);
316 adapter_->OnTransportFeedback(*feedback.get()); 446 adapter_->OnTransportFeedback(*feedback.get());
317 { 447 {
318 std::vector<PacketFeedback> expected_packets; 448 std::vector<PacketFeedback> expected_packets;
319 expected_packets.push_back(packet_feedback); 449 expected_packets.push_back(packet_feedback);
320 ComparePacketFeedbackVectors(expected_packets, 450 ComparePacketVectors(expected_packets,
321 adapter_->GetTransportFeedbackVector()); 451 adapter_->GetTransportFeedbackVector());
322 } 452 }
323 } 453 }
454
455 TEST_F(TransportFeedbackAdapterTest, UpdatesDelayBasedEstimate) {
456 uint16_t seq_num = 0;
457 size_t kPayloadSize = 1000;
458 // The test must run and insert packets/feedback long enough that the
459 // BWE computes a valid estimate.
460 const int64_t kRunTimeMs = 6000;
461 int64_t start_time_ms = clock_.TimeInMilliseconds();
462 while (clock_.TimeInMilliseconds() - start_time_ms < kRunTimeMs) {
463 PacketFeedback packet(clock_.TimeInMilliseconds(),
464 clock_.TimeInMilliseconds(), seq_num, kPayloadSize,
465 PacedPacketInfo());
466 OnSentPacket(packet);
467 // Create expected feedback and send into adapter.
468 std::unique_ptr<rtcp::TransportFeedback> feedback(
469 new rtcp::TransportFeedback());
470 feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000);
471 EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
472 packet.arrival_time_ms * 1000));
473 rtc::Buffer raw_packet = feedback->Build();
474 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
475 raw_packet.size());
476 EXPECT_TRUE(feedback.get() != nullptr);
477 adapter_->OnTransportFeedback(*feedback.get());
478 clock_.AdvanceTimeMilliseconds(50);
479 ++seq_num;
480 }
481 EXPECT_GT(target_bitrate_bps_, 0u);
482 }
483
324 } // namespace test 484 } // namespace test
325 } // namespace webrtc 485 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/transport_feedback_adapter.cc ('k') | webrtc/tools/event_log_visualizer/analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698