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

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

Issue 2005313003: Propagate probing cluster id to SendTimeHistory. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Only save probe cluster id in send time history. Created 4 years, 6 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 // equal. However, the difference must be the same for all x. 86 // equal. However, the difference must be the same for all x.
87 int64_t arrival_time_delta = 87 int64_t arrival_time_delta =
88 truth[0].arrival_time_ms - input[0].arrival_time_ms; 88 truth[0].arrival_time_ms - input[0].arrival_time_ms;
89 for (size_t i = 0; i < len; ++i) { 89 for (size_t i = 0; i < len; ++i) {
90 EXPECT_EQ(truth[i].arrival_time_ms, 90 EXPECT_EQ(truth[i].arrival_time_ms,
91 input[i].arrival_time_ms + arrival_time_delta); 91 input[i].arrival_time_ms + arrival_time_delta);
92 EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms); 92 EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms);
93 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number); 93 EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
94 EXPECT_EQ(truth[i].payload_size, input[i].payload_size); 94 EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
95 EXPECT_EQ(truth[i].was_paced, input[i].was_paced); 95 EXPECT_EQ(truth[i].was_paced, input[i].was_paced);
96 } 96 }
danilchap 2016/05/31 13:06:50 check probe_cluster_id too.
philipel 2016/05/31 14:34:58 Done.
97 } 97 }
98 98
99 // Utility method, to reset arrival_time_ms before adding send time. 99 // Utility method, to reset arrival_time_ms before adding send time.
100 void OnSentPacket(PacketInfo info) { 100 void OnSentPacket(PacketInfo info) {
101 info.arrival_time_ms = 0; 101 info.arrival_time_ms = 0;
102 adapter_->AddPacket(info.sequence_number, info.payload_size, 102 adapter_->AddPacket(info.sequence_number, info.payload_size, info.was_paced,
103 info.was_paced); 103 PacketInfo::kNotAProbe);
danilchap 2016/05/31 13:06:50 probably info.probe_cluster_id here.
philipel 2016/05/31 14:34:58 Done.
104 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms); 104 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms);
105 } 105 }
106 106
107 SimulatedClock clock_; 107 SimulatedClock clock_;
108 MockRemoteBitrateEstimator* bitrate_estimator_; 108 MockRemoteBitrateEstimator* bitrate_estimator_;
109 MockBitrateControllerAdapter bitrate_controller_; 109 MockBitrateControllerAdapter bitrate_controller_;
110 std::unique_ptr<TransportFeedbackAdapter> adapter_; 110 std::unique_ptr<TransportFeedbackAdapter> adapter_;
111 111
112 uint32_t receiver_estimated_bitrate_; 112 uint32_t receiver_estimated_bitrate_;
113 }; 113 };
114 114
115 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { 115 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
116 std::vector<PacketInfo> packets; 116 std::vector<PacketInfo> packets;
117 packets.push_back(PacketInfo(100, 200, 0, 1500, true)); 117 packets.push_back(
118 packets.push_back(PacketInfo(110, 210, 1, 1500, true)); 118 PacketInfo(100, 200, 0, 1500, true, PacketInfo::kNotAProbe));
danilchap 2016/05/31 13:06:50 May be helpful to check probe_cluster_id here too,
philipel 2016/05/31 14:34:58 Done.
119 packets.push_back(PacketInfo(120, 220, 2, 1500, true)); 119 packets.push_back(
120 packets.push_back(PacketInfo(130, 230, 3, 1500, true)); 120 PacketInfo(110, 210, 1, 1500, true, PacketInfo::kNotAProbe));
121 packets.push_back(PacketInfo(140, 240, 4, 1500, true)); 121 packets.push_back(
122 PacketInfo(120, 220, 2, 1500, true, PacketInfo::kNotAProbe));
123 packets.push_back(
124 PacketInfo(130, 230, 3, 1500, true, PacketInfo::kNotAProbe));
125 packets.push_back(
126 PacketInfo(140, 240, 4, 1500, true, PacketInfo::kNotAProbe));
122 127
123 for (const PacketInfo& packet : packets) 128 for (const PacketInfo& packet : packets)
124 OnSentPacket(packet); 129 OnSentPacket(packet);
125 130
126 rtcp::TransportFeedback feedback; 131 rtcp::TransportFeedback feedback;
127 feedback.WithBase(packets[0].sequence_number, 132 feedback.WithBase(packets[0].sequence_number,
128 packets[0].arrival_time_ms * 1000); 133 packets[0].arrival_time_ms * 1000);
129 134
130 for (const PacketInfo& packet : packets) { 135 for (const PacketInfo& packet : packets) {
131 EXPECT_TRUE(feedback.WithReceivedPacket(packet.sequence_number, 136 EXPECT_TRUE(feedback.WithReceivedPacket(packet.sequence_number,
132 packet.arrival_time_ms * 1000)); 137 packet.arrival_time_ms * 1000));
133 } 138 }
134 139
135 feedback.Build(); 140 feedback.Build();
136 141
137 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) 142 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
138 .Times(1) 143 .Times(1)
139 .WillOnce(Invoke( 144 .WillOnce(Invoke(
140 [packets, this](const std::vector<PacketInfo>& feedback_vector) { 145 [packets, this](const std::vector<PacketInfo>& feedback_vector) {
141 ComparePacketVectors(packets, feedback_vector); 146 ComparePacketVectors(packets, feedback_vector);
142 })); 147 }));
143 adapter_->OnTransportFeedback(feedback); 148 adapter_->OnTransportFeedback(feedback);
144 } 149 }
145 150
146 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { 151 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
147 std::vector<PacketInfo> packets; 152 std::vector<PacketInfo> packets;
148 packets.push_back(PacketInfo(100, 200, 0, 1500, true)); 153 packets.push_back(
149 packets.push_back(PacketInfo(110, 210, 1, 1500, true)); 154 PacketInfo(100, 200, 0, 1500, true, PacketInfo::kNotAProbe));
danilchap 2016/05/31 13:06:50 ditto
philipel 2016/05/31 14:34:58 Done.
150 packets.push_back(PacketInfo(120, 220, 2, 1500, true)); 155 packets.push_back(
151 packets.push_back(PacketInfo(130, 230, 3, 1500, true)); 156 PacketInfo(110, 210, 1, 1500, true, PacketInfo::kNotAProbe));
152 packets.push_back(PacketInfo(140, 240, 4, 1500, true)); 157 packets.push_back(
158 PacketInfo(120, 220, 2, 1500, true, PacketInfo::kNotAProbe));
159 packets.push_back(
160 PacketInfo(130, 230, 3, 1500, true, PacketInfo::kNotAProbe));
161 packets.push_back(
162 PacketInfo(140, 240, 4, 1500, true, PacketInfo::kNotAProbe));
153 163
154 const uint16_t kSendSideDropBefore = 1; 164 const uint16_t kSendSideDropBefore = 1;
155 const uint16_t kReceiveSideDropAfter = 3; 165 const uint16_t kReceiveSideDropAfter = 3;
156 166
157 for (const PacketInfo& packet : packets) { 167 for (const PacketInfo& packet : packets) {
158 if (packet.sequence_number >= kSendSideDropBefore) 168 if (packet.sequence_number >= kSendSideDropBefore)
159 OnSentPacket(packet); 169 OnSentPacket(packet);
160 } 170 }
161 171
162 rtcp::TransportFeedback feedback; 172 rtcp::TransportFeedback feedback;
(...skipping 20 matching lines...) Expand all
183 ComparePacketVectors(expected_packets, feedback_vector); 193 ComparePacketVectors(expected_packets, feedback_vector);
184 })); 194 }));
185 adapter_->OnTransportFeedback(feedback); 195 adapter_->OnTransportFeedback(feedback);
186 } 196 }
187 197
188 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { 198 TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
189 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor * 199 int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
190 static_cast<int64_t>(1 << 8) * 200 static_cast<int64_t>(1 << 8) *
191 static_cast<int64_t>((1 << 23) - 1) / 1000; 201 static_cast<int64_t>((1 << 23) - 1) / 1000;
192 std::vector<PacketInfo> packets; 202 std::vector<PacketInfo> packets;
193 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, true)); 203 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, true,
194 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, true)); 204 PacketInfo::kNotAProbe));
danilchap 2016/05/31 13:06:50 ditto
philipel 2016/05/31 14:34:58 Test with kNotAProbe here.
195 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, true)); 205 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, true,
206 PacketInfo::kNotAProbe));
207 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, true,
208 PacketInfo::kNotAProbe));
196 209
197 for (const PacketInfo& packet : packets) 210 for (const PacketInfo& packet : packets)
198 OnSentPacket(packet); 211 OnSentPacket(packet);
199 212
200 for (size_t i = 0; i < packets.size(); ++i) { 213 for (size_t i = 0; i < packets.size(); ++i) {
201 std::unique_ptr<rtcp::TransportFeedback> feedback( 214 std::unique_ptr<rtcp::TransportFeedback> feedback(
202 new rtcp::TransportFeedback()); 215 new rtcp::TransportFeedback());
203 feedback->WithBase(packets[i].sequence_number, 216 feedback->WithBase(packets[i].sequence_number,
204 packets[i].arrival_time_ms * 1000); 217 packets[i].arrival_time_ms * 1000);
205 218
(...skipping 12 matching lines...) Expand all
218 .WillOnce(Invoke([expected_packets, this]( 231 .WillOnce(Invoke([expected_packets, this](
219 const std::vector<PacketInfo>& feedback_vector) { 232 const std::vector<PacketInfo>& feedback_vector) {
220 ComparePacketVectors(expected_packets, feedback_vector); 233 ComparePacketVectors(expected_packets, feedback_vector);
221 })); 234 }));
222 adapter_->OnTransportFeedback(*feedback.get()); 235 adapter_->OnTransportFeedback(*feedback.get());
223 } 236 }
224 } 237 }
225 238
226 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { 239 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
227 std::vector<PacketInfo> packets; 240 std::vector<PacketInfo> packets;
228 packets.push_back(PacketInfo(120, 200, 0, 1500, true)); 241 packets.push_back(
229 packets.push_back(PacketInfo(110, 210, 1, 1500, true)); 242 PacketInfo(120, 200, 0, 1500, true, PacketInfo::kNotAProbe));
danilchap 2016/05/31 13:06:50 ditto
philipel 2016/05/31 14:34:59 Done.
230 packets.push_back(PacketInfo(100, 220, 2, 1500, true)); 243 packets.push_back(
244 PacketInfo(110, 210, 1, 1500, true, PacketInfo::kNotAProbe));
245 packets.push_back(
246 PacketInfo(100, 220, 2, 1500, true, PacketInfo::kNotAProbe));
231 std::vector<PacketInfo> expected_packets; 247 std::vector<PacketInfo> expected_packets;
232 expected_packets.push_back(packets[2]); 248 expected_packets.push_back(packets[2]);
233 expected_packets.push_back(packets[1]); 249 expected_packets.push_back(packets[1]);
234 expected_packets.push_back(packets[0]); 250 expected_packets.push_back(packets[0]);
235 251
236 for (const PacketInfo& packet : packets) 252 for (const PacketInfo& packet : packets)
237 OnSentPacket(packet); 253 OnSentPacket(packet);
238 254
239 rtcp::TransportFeedback feedback; 255 rtcp::TransportFeedback feedback;
240 feedback.WithBase(packets[0].sequence_number, 256 feedback.WithBase(packets[0].sequence_number,
(...skipping 19 matching lines...) Expand all
260 std::vector<PacketInfo> sent_packets; 276 std::vector<PacketInfo> sent_packets;
261 const int64_t kSmallDeltaUs = 277 const int64_t kSmallDeltaUs =
262 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1); 278 rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
263 const int64_t kLargePositiveDeltaUs = 279 const int64_t kLargePositiveDeltaUs =
264 rtcp::TransportFeedback::kDeltaScaleFactor * 280 rtcp::TransportFeedback::kDeltaScaleFactor *
265 std::numeric_limits<int16_t>::max(); 281 std::numeric_limits<int16_t>::max();
266 const int64_t kLargeNegativeDeltaUs = 282 const int64_t kLargeNegativeDeltaUs =
267 rtcp::TransportFeedback::kDeltaScaleFactor * 283 rtcp::TransportFeedback::kDeltaScaleFactor *
268 std::numeric_limits<int16_t>::min(); 284 std::numeric_limits<int16_t>::min();
269 285
270 PacketInfo info(100, 200, 0, 1500, true); 286 PacketInfo info(100, 200, 0, 1500, true, PacketInfo::kNotAProbe);
271 sent_packets.push_back(info); 287 sent_packets.push_back(info);
272 288
273 info.send_time_ms += kSmallDeltaUs / 1000; 289 info.send_time_ms += kSmallDeltaUs / 1000;
274 info.arrival_time_ms += kSmallDeltaUs / 1000; 290 info.arrival_time_ms += kSmallDeltaUs / 1000;
275 ++info.sequence_number; 291 ++info.sequence_number;
276 sent_packets.push_back(info); 292 sent_packets.push_back(info);
277 293
278 info.send_time_ms += kLargePositiveDeltaUs / 1000; 294 info.send_time_ms += kLargePositiveDeltaUs / 1000;
279 info.arrival_time_ms += kLargePositiveDeltaUs / 1000; 295 info.arrival_time_ms += kLargePositiveDeltaUs / 1000;
280 ++info.sequence_number; 296 ++info.sequence_number;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 })); 367 }));
352 adapter_->OnTransportFeedback(*feedback.get()); 368 adapter_->OnTransportFeedback(*feedback.get());
353 369
354 expected_packets.push_back(info); 370 expected_packets.push_back(info);
355 371
356 ComparePacketVectors(expected_packets, received_feedback); 372 ComparePacketVectors(expected_packets, received_feedback);
357 } 373 }
358 374
359 } // namespace test 375 } // namespace test
360 } // namespace webrtc 376 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698