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

Side by Side Diff: media/cast/test/end2end_unittest.cc

Issue 832293003: Cast: Speed up some long running tests in DEBUG mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: re-enable test Created 5 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This test generate synthetic data. For audio it's a sinusoid waveform with 5 // This test generate synthetic data. For audio it's a sinusoid waveform with
6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern 6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern
7 // that is shifting by one pixel per frame, each pixels neighbors right and down 7 // that is shifting by one pixel per frame, each pixels neighbors right and down
8 // is this pixels value +1, since the pixel value is 8 bit it will wrap 8 // is this pixels value +1, since the pixel value is 8 bit it will wrap
9 // frequently within the image. Visually this will create diagonally color bands 9 // frequently within the image. Visually this will create diagonally color bands
10 // that moves across the screen 10 // that moves across the screen
(...skipping 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 1350
1351 int frames_counter = 0; 1351 int frames_counter = 0;
1352 for (; frames_counter < 1000; ++frames_counter) { 1352 for (; frames_counter < 1000; ++frames_counter) {
1353 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1353 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1354 RunTasks(kFrameTimerMs); 1354 RunTasks(kFrameTimerMs);
1355 } 1355 }
1356 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1356 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1357 EXPECT_EQ(1000ul, video_ticks_.size()); 1357 EXPECT_EQ(1000ul, video_ticks_.size());
1358 } 1358 }
1359 1359
1360 // The following tests run many many iterations to make sure that
1361 // buffers don't fill, timers don't go askew etc. However, these
1362 // high-level tests are too expensive in debug mode, so we reduce
1363 // the iterations in debug mode.
1364 #if defined(NDEBUG)
1365 const size_t kLongTestIterations = 10000;
1366 #else
1367 const size_t kLongTestIterations = 1000;
1368 #endif
1369
1360 TEST_F(End2EndTest, ReceiverClockFast) { 1370 TEST_F(End2EndTest, ReceiverClockFast) {
1361 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1371 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
1362 1); 1372 1);
1363 Create(); 1373 Create();
1364 StartBasicPlayer(); 1374 StartBasicPlayer();
1365 SetReceiverSkew(2.0, base::TimeDelta::FromMicroseconds(1234567)); 1375 SetReceiverSkew(2.0, base::TimeDelta::FromMicroseconds(1234567));
1366 1376
1367 int frames_counter = 0; 1377 for (size_t frames_counter = 0;
1368 for (; frames_counter < 10000; ++frames_counter) { 1378 frames_counter < kLongTestIterations;
1379 ++frames_counter) {
1369 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1380 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1370 RunTasks(kFrameTimerMs); 1381 RunTasks(kFrameTimerMs);
1371 } 1382 }
1372 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1383 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1373 EXPECT_EQ(10000ul, video_ticks_.size()); 1384 EXPECT_EQ(kLongTestIterations, video_ticks_.size());
1374 } 1385 }
1375 1386
1376 TEST_F(End2EndTest, ReceiverClockSlow) { 1387 TEST_F(End2EndTest, ReceiverClockSlow) {
1377 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1388 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
1378 1); 1389 1);
1379 Create(); 1390 Create();
1380 StartBasicPlayer(); 1391 StartBasicPlayer();
1381 SetReceiverSkew(0.5, base::TimeDelta::FromMicroseconds(-765432)); 1392 SetReceiverSkew(0.5, base::TimeDelta::FromMicroseconds(-765432));
1382 1393
1383 int frames_counter = 0; 1394 for (size_t frames_counter = 0;
1384 for (; frames_counter < 10000; ++frames_counter) { 1395 frames_counter < kLongTestIterations;
1396 ++frames_counter) {
1385 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1397 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1386 RunTasks(kFrameTimerMs); 1398 RunTasks(kFrameTimerMs);
1387 } 1399 }
1388 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1400 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1389 EXPECT_EQ(10000ul, video_ticks_.size()); 1401 EXPECT_EQ(kLongTestIterations, video_ticks_.size());
1390 } 1402 }
1391 1403
1392 TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) { 1404 TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) {
1393 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1405 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
1394 1); 1406 1);
1395 Create(); 1407 Create();
1396 StartBasicPlayer(); 1408 StartBasicPlayer();
1397 SetReceiverSkew(1.05, base::TimeDelta::FromMilliseconds(-42)); 1409 SetReceiverSkew(1.05, base::TimeDelta::FromMilliseconds(-42));
1398 1410
1399 // Expect smooth playout when there is 5% skew. 1411 // Expect smooth playout when there is 5% skew.
1400 SetExpectedVideoPlayoutSmoothness( 1412 SetExpectedVideoPlayoutSmoothness(
1401 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100, 1413 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100,
1402 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100, 1414 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100,
1403 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10); 1415 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10);
1404 1416
1405 int frames_counter = 0; 1417 for (size_t frames_counter = 0;
1406 for (; frames_counter < 10000; ++frames_counter) { 1418 frames_counter < kLongTestIterations;
1419 ++frames_counter) {
1407 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1420 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1408 RunTasks(kFrameTimerMs); 1421 RunTasks(kFrameTimerMs);
1409 } 1422 }
1410 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1423 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1411 EXPECT_EQ(10000ul, video_ticks_.size()); 1424 EXPECT_EQ(kLongTestIterations, video_ticks_.size());
1412 } 1425 }
1413 1426
1414 TEST_F(End2EndTest, EvilNetwork) { 1427 TEST_F(End2EndTest, EvilNetwork) {
1415 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1428 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
1416 1); 1429 1);
1417 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass()); 1430 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass());
1418 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass()); 1431 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass());
1419 Create(); 1432 Create();
1420 StartBasicPlayer(); 1433 StartBasicPlayer();
1421 1434
1422 int frames_counter = 0; 1435 for (size_t frames_counter = 0;
1423 for (; frames_counter < 10000; ++frames_counter) { 1436 frames_counter < kLongTestIterations;
1437 ++frames_counter) {
1424 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1438 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1425 RunTasks(kFrameTimerMs); 1439 RunTasks(kFrameTimerMs);
1426 } 1440 }
1427 base::TimeTicks test_end = testing_clock_receiver_->NowTicks(); 1441 base::TimeTicks test_end = testing_clock_receiver_->NowTicks();
1428 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1442 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1429 EXPECT_GT(video_ticks_.size(), 100ul); 1443 EXPECT_GT(video_ticks_.size(), kLongTestIterations / 100);
1430 VLOG(1) << "Fully transmitted " << video_ticks_.size() 1444 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames.";
1431 << " out of 10000 frames.";
1432 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000); 1445 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000);
1433 } 1446 }
1434 1447
1435 // Tests that a system configured for 30 FPS drops frames when input is provided 1448 // Tests that a system configured for 30 FPS drops frames when input is provided
1436 // at a much higher frame rate. 1449 // at a much higher frame rate.
1437 TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) { 1450 TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) {
1438 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1451 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
1439 1); 1452 1);
1440 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass()); 1453 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass());
1441 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass()); 1454 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass());
1442 Create(); 1455 Create();
1443 StartBasicPlayer(); 1456 StartBasicPlayer();
1444 1457
1445 int frames_counter = 0; 1458 for (size_t frames_counter = 0;
1446 for (; frames_counter < 10000; ++frames_counter) { 1459 frames_counter < kLongTestIterations;
1460 ++frames_counter) {
1447 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1461 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1448 RunTasks(10 /* 10 ms, but 33.3 expected by system */); 1462 RunTasks(10 /* 10 ms, but 33.3 expected by system */);
1449 } 1463 }
1450 base::TimeTicks test_end = testing_clock_receiver_->NowTicks(); 1464 base::TimeTicks test_end = testing_clock_receiver_->NowTicks();
1451 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1465 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1452 EXPECT_LT(100ul, video_ticks_.size()); 1466 EXPECT_LT(kLongTestIterations / 100, video_ticks_.size());
1453 EXPECT_GE(3334ul, video_ticks_.size()); 1467 EXPECT_GE(kLongTestIterations / 3, video_ticks_.size());
1454 VLOG(1) << "Fully transmitted " << video_ticks_.size() 1468 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames.";
1455 << " out of 10000 frames.";
1456 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000); 1469 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000);
1457 } 1470 }
1458 1471
1459 // Disabled due to flake: http://crbug.com/448511 1472 TEST_F(End2EndTest, OldPacketNetwork) {
1460 TEST_F(End2EndTest, DISABLED_OldPacketNetwork) {
1461 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1); 1473 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1);
1462 sender_to_receiver_.SetPacketPipe(test::NewRandomDrop(0.01)); 1474 sender_to_receiver_.SetPacketPipe(test::NewRandomDrop(0.01));
1463 scoped_ptr<test::PacketPipe> echo_chamber( 1475 scoped_ptr<test::PacketPipe> echo_chamber(
1464 test::NewDuplicateAndDelay(1, 10 * kFrameTimerMs)); 1476 test::NewDuplicateAndDelay(1, 10 * kFrameTimerMs));
1465 echo_chamber->AppendToPipe( 1477 echo_chamber->AppendToPipe(
1466 test::NewDuplicateAndDelay(1, 20 * kFrameTimerMs)); 1478 test::NewDuplicateAndDelay(1, 20 * kFrameTimerMs));
1467 echo_chamber->AppendToPipe( 1479 echo_chamber->AppendToPipe(
1468 test::NewDuplicateAndDelay(1, 40 * kFrameTimerMs)); 1480 test::NewDuplicateAndDelay(1, 40 * kFrameTimerMs));
1469 echo_chamber->AppendToPipe( 1481 echo_chamber->AppendToPipe(
1470 test::NewDuplicateAndDelay(1, 80 * kFrameTimerMs)); 1482 test::NewDuplicateAndDelay(1, 80 * kFrameTimerMs));
1471 echo_chamber->AppendToPipe( 1483 echo_chamber->AppendToPipe(
1472 test::NewDuplicateAndDelay(1, 160 * kFrameTimerMs)); 1484 test::NewDuplicateAndDelay(1, 160 * kFrameTimerMs));
1473 1485
1474 receiver_to_sender_.SetPacketPipe(echo_chamber.Pass()); 1486 receiver_to_sender_.SetPacketPipe(echo_chamber.Pass());
1475 Create(); 1487 Create();
1476 StartBasicPlayer(); 1488 StartBasicPlayer();
1477 1489
1478 SetExpectedVideoPlayoutSmoothness( 1490 SetExpectedVideoPlayoutSmoothness(
1479 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100, 1491 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100,
1480 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100, 1492 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100,
1481 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10); 1493 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10);
1482 1494
1483 int frames_counter = 0; 1495 for (size_t frames_counter = 0;
1484 for (; frames_counter < 10000; ++frames_counter) { 1496 frames_counter < kLongTestIterations;
1497 ++frames_counter) {
1485 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1498 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1486 RunTasks(kFrameTimerMs); 1499 RunTasks(kFrameTimerMs);
1487 } 1500 }
1488 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1501 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1489 1502
1490 EXPECT_EQ(10000ul, video_ticks_.size()); 1503 EXPECT_EQ(kLongTestIterations, video_ticks_.size());
1491 } 1504 }
1492 1505
1493 TEST_F(End2EndTest, TestSetPlayoutDelay) { 1506 TEST_F(End2EndTest, TestSetPlayoutDelay) {
1494 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1); 1507 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1);
1495 video_sender_config_.min_playout_delay = 1508 video_sender_config_.min_playout_delay =
1496 video_sender_config_.max_playout_delay; 1509 video_sender_config_.max_playout_delay;
1497 audio_sender_config_.min_playout_delay = 1510 audio_sender_config_.min_playout_delay =
1498 audio_sender_config_.max_playout_delay; 1511 audio_sender_config_.max_playout_delay;
1499 video_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1); 1512 video_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1);
1500 audio_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1); 1513 audio_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1);
(...skipping 27 matching lines...) Expand all
1528 EXPECT_LT(jump, 220u); 1541 EXPECT_LT(jump, 220u);
1529 } 1542 }
1530 1543
1531 // TODO(pwestin): Add repeatable packet loss test. 1544 // TODO(pwestin): Add repeatable packet loss test.
1532 // TODO(pwestin): Add test for misaligned send get calls. 1545 // TODO(pwestin): Add test for misaligned send get calls.
1533 // TODO(pwestin): Add more tests that does not resample. 1546 // TODO(pwestin): Add more tests that does not resample.
1534 // TODO(pwestin): Add test when we have starvation for our RunTask. 1547 // TODO(pwestin): Add test when we have starvation for our RunTask.
1535 1548
1536 } // namespace cast 1549 } // namespace cast
1537 } // namespace media 1550 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698