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

Side by Side Diff: webrtc/modules/remote_bitrate_estimator/test/estimators/nada_unittest.cc

Issue 1202253003: More Simulation Framework features (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removed std::next to advance iterator Created 5 years, 5 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 306
307 for (int i = 0; i < 100; ++i) { 307 for (int i = 0; i < 100; ++i) {
308 int previous_bitrate = nada_sender_.bitrate_kbps(); 308 int previous_bitrate = nada_sender_.bitrate_kbps();
309 nada_sender_.GiveFeedback(not_congested_fb); 309 nada_sender_.GiveFeedback(not_congested_fb);
310 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); 310 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate);
311 } 311 }
312 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMax); 312 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMax);
313 } 313 }
314 314
315 TEST_F(NadaReceiverSideTest, ReceivingRateNoPackets) { 315 TEST_F(NadaReceiverSideTest, ReceivingRateNoPackets) {
316 EXPECT_EQ(nada_receiver_.RecentReceivingRate(), static_cast<size_t>(0)); 316 EXPECT_EQ(nada_receiver_.RecentKbps(), static_cast<size_t>(0));
317 } 317 }
318 318
319 TEST_F(NadaReceiverSideTest, ReceivingRateSinglePacket) { 319 TEST_F(NadaReceiverSideTest, ReceivingRateSinglePacket) {
320 const size_t kPayloadSizeBytes = 500 * 1000; 320 const size_t kPayloadSizeBytes = 500 * 1000;
321 const int64_t kSendTimeUs = 300 * 1000; 321 const int64_t kSendTimeUs = 300 * 1000;
322 const int64_t kArrivalTimeMs = kSendTimeUs / 1000 + 100; 322 const int64_t kArrivalTimeMs = kSendTimeUs / 1000 + 100;
323 const uint16_t kSequenceNumber = 1; 323 const uint16_t kSequenceNumber = 1;
324 const int64_t kTimeWindowMs = NadaBweReceiver::kReceivingRateTimeWindowMs; 324 const int64_t kTimeWindowMs = NadaBweReceiver::kReceivingRateTimeWindowMs;
325 325
326 const MediaPacket media_packet(kFlowId, kSendTimeUs, kPayloadSizeBytes, 326 const MediaPacket media_packet(kFlowId, kSendTimeUs, kPayloadSizeBytes,
327 kSequenceNumber); 327 kSequenceNumber);
328 nada_receiver_.ReceivePacket(kArrivalTimeMs, media_packet); 328 nada_receiver_.ReceivePacket(kArrivalTimeMs, media_packet);
329 329
330 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeWindowMs; 330 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeWindowMs;
331 331
332 EXPECT_EQ(nada_receiver_.RecentReceivingRate(), kReceivingRateKbps); 332 EXPECT_EQ(nada_receiver_.RecentKbps(), kReceivingRateKbps);
333 }
334
335 TEST_F(NadaReceiverSideTest, ReceivingRateLargePackets) {
336 const size_t kPayloadSizeBytes = 3000 * 1000;
337 const int64_t kTimeGapMs = 3000; // Between each packet.
338 const int64_t kOneWayDelayMs = 1000;
339
340 for (int i = 1; i < 5; ++i) {
341 int64_t send_time_us = i * kTimeGapMs * 1000;
342 int64_t arrival_time_ms = send_time_us / 1000 + kOneWayDelayMs;
343 uint16_t sequence_number = i;
344 const MediaPacket media_packet(kFlowId, send_time_us, kPayloadSizeBytes,
345 sequence_number);
346 nada_receiver_.ReceivePacket(arrival_time_ms, media_packet);
347 }
348
349 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeGapMs;
350 EXPECT_EQ(nada_receiver_.RecentReceivingRate(), kReceivingRateKbps);
351 } 333 }
352 334
353 TEST_F(NadaReceiverSideTest, ReceivingRateSmallPackets) { 335 TEST_F(NadaReceiverSideTest, ReceivingRateSmallPackets) {
354 const size_t kPayloadSizeBytes = 100 * 1000; 336 const size_t kPayloadSizeBytes = 100 * 1000;
355 const int64_t kTimeGapMs = 50; // Between each packet. 337 const int64_t kTimeGapMs = 50; // Between each packet.
356 const int64_t kOneWayDelayMs = 50; 338 const int64_t kOneWayDelayMs = 50;
357 339
358 for (int i = 1; i < 50; ++i) { 340 for (int i = 1; i < 50; ++i) {
359 int64_t send_time_us = i * kTimeGapMs * 1000; 341 int64_t send_time_us = i * kTimeGapMs * 1000;
360 int64_t arrival_time_ms = send_time_us / 1000 + kOneWayDelayMs; 342 int64_t arrival_time_ms = send_time_us / 1000 + kOneWayDelayMs;
361 uint16_t sequence_number = i; 343 uint16_t sequence_number = i;
362 const MediaPacket media_packet(kFlowId, send_time_us, kPayloadSizeBytes, 344 const MediaPacket media_packet(kFlowId, send_time_us, kPayloadSizeBytes,
363 sequence_number); 345 sequence_number);
364 nada_receiver_.ReceivePacket(arrival_time_ms, media_packet); 346 nada_receiver_.ReceivePacket(arrival_time_ms, media_packet);
365 } 347 }
366 348
367 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeGapMs; 349 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeGapMs;
368 EXPECT_EQ(nada_receiver_.RecentReceivingRate(), kReceivingRateKbps); 350 EXPECT_EQ(nada_receiver_.RecentKbps(), kReceivingRateKbps);
369 } 351 }
370 352
371 TEST_F(NadaReceiverSideTest, ReceivingRateIntermittentPackets) { 353 // RecentKbps and RecentReceivingRate are calculated differently.
372 const size_t kPayloadSizeBytes = 100 * 1000;
373 const int64_t kTimeGapMs = 50; // Between each packet.
374 const int64_t kFirstSendTimeMs = 0;
375 const int64_t kOneWayDelayMs = 50;
376 354
377 // Gap between first and other packets 355 // In this scenario, RecentKbps will be zero during most of the time
378 const MediaPacket media_packet(kFlowId, kFirstSendTimeMs, kPayloadSizeBytes, 356 // and reach high peaks once a packet arrives.
379 1); 357 // TEST_F(NadaReceiverSideTest, ReceivingRateLargePackets) {}
380 nada_receiver_.ReceivePacket(kFirstSendTimeMs + kOneWayDelayMs, media_packet);
381 358
382 const int64_t kDelayAfterFirstPacketMs = 1000; 359 // The first isolated packet would not be considered here by RateCounter.
383 const int kNumPackets = 5; // Small enough so that all packets are covered. 360 // TEST_F(NadaReceiverSideTest, ReceivingRateIntermittentPackets) {}
384 EXPECT_LT((kNumPackets - 2) * kTimeGapMs,
385 NadaBweReceiver::kReceivingRateTimeWindowMs);
386 const int64_t kTimeWindowMs =
387 kDelayAfterFirstPacketMs + (kNumPackets - 2) * kTimeGapMs;
388 361
389 for (int i = 2; i <= kNumPackets; ++i) { 362 // DuplicatedPackets will be counted twice by RateCounter.
390 int64_t send_time_us = 363 // TEST_F(NadaReceiverSideTest, ReceivingRateDuplicatedPackets) {}
stefan-webrtc 2015/07/06 08:24:51 Please remove these as discussed.
magalhaesc 2015/07/06 09:28:06 Done.
391 ((i - 2) * kTimeGapMs + kFirstSendTimeMs + kDelayAfterFirstPacketMs) *
392 1000;
393 int64_t arrival_time_ms = send_time_us / 1000 + kOneWayDelayMs;
394 uint16_t sequence_number = i;
395 const MediaPacket media_packet(kFlowId, send_time_us, kPayloadSizeBytes,
396 sequence_number);
397 nada_receiver_.ReceivePacket(arrival_time_ms, media_packet);
398 }
399
400 const size_t kTotalReceivedKb = 8 * kNumPackets * kPayloadSizeBytes;
401 const int64_t kCorrectedTimeWindowMs =
402 (kTimeWindowMs * kNumPackets) / (kNumPackets - 1);
403 EXPECT_EQ(nada_receiver_.RecentReceivingRate(),
404 kTotalReceivedKb / kCorrectedTimeWindowMs);
405 }
406
407 TEST_F(NadaReceiverSideTest, ReceivingRateDuplicatedPackets) {
408 const size_t kPayloadSizeBytes = 500 * 1000;
409 const int64_t kSendTimeUs = 300 * 1000;
410 const int64_t kArrivalTimeMs = kSendTimeUs / 1000 + 100;
411 const uint16_t kSequenceNumber = 1;
412 const int64_t kTimeWindowMs = NadaBweReceiver::kReceivingRateTimeWindowMs;
413
414 // Insert the same packet twice.
415 for (int i = 0; i < 2; ++i) {
416 const MediaPacket media_packet(kFlowId, kSendTimeUs + 50 * i,
417 kPayloadSizeBytes, kSequenceNumber);
418 nada_receiver_.ReceivePacket(kArrivalTimeMs + 50 * i, media_packet);
419 }
420 // Should be counted only once.
421 const size_t kReceivingRateKbps = 8 * kPayloadSizeBytes / kTimeWindowMs;
422
423 EXPECT_EQ(nada_receiver_.RecentReceivingRate(), kReceivingRateKbps);
424 }
425 364
426 TEST_F(NadaReceiverSideTest, PacketLossNoPackets) { 365 TEST_F(NadaReceiverSideTest, PacketLossNoPackets) {
427 EXPECT_EQ(nada_receiver_.RecentPacketLossRatio(), 0.0f); 366 EXPECT_EQ(nada_receiver_.RecentPacketLossRatio(), 0.0f);
428 } 367 }
429 368
430 TEST_F(NadaReceiverSideTest, PacketLossSinglePacket) { 369 TEST_F(NadaReceiverSideTest, PacketLossSinglePacket) {
431 const MediaPacket media_packet(kFlowId, 0, 0, 0); 370 const MediaPacket media_packet(kFlowId, 0, 0, 0);
432 nada_receiver_.ReceivePacket(0, media_packet); 371 nada_receiver_.ReceivePacket(0, media_packet);
433 EXPECT_EQ(nada_receiver_.RecentPacketLossRatio(), 0.0f); 372 EXPECT_EQ(nada_receiver_.RecentPacketLossRatio(), 0.0f);
434 } 373 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 for (int i = 1; i < kNumElements; ++i) { 541 for (int i = 1; i < kNumElements; ++i) {
603 EXPECT_EQ( 542 EXPECT_EQ(
604 exp_smoothed[i], 543 exp_smoothed[i],
605 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f)); 544 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f));
606 } 545 }
607 } 546 }
608 547
609 } // namespace bwe 548 } // namespace bwe
610 } // namespace testing 549 } // namespace testing
611 } // namespace webrtc 550 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698