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

Side by Side Diff: content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc

Issue 22876027: Consolidate duplicated frame / capability structures in video_capture_types.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "content/browser/renderer_host/media/web_contents_video_capture_device. h" 5 #include "content/browser/renderer_host/media/web_contents_video_capture_device. h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/debug/debugger.h" 8 #include "base/debug/debugger.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/test/test_timeouts.h" 10 #include "base/test/test_timeouts.h"
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 base::AutoLock guard(lock_); 398 base::AutoLock guard(lock_);
399 error_encountered_ = true; 399 error_encountered_ = true;
400 } 400 }
401 PostColorOrError(kNothingYet); 401 PostColorOrError(kNothingYet);
402 } 402 }
403 403
404 virtual void OnFrameInfo(const media::VideoCaptureCapability& info) OVERRIDE { 404 virtual void OnFrameInfo(const media::VideoCaptureCapability& info) OVERRIDE {
405 EXPECT_EQ(kTestWidth, info.width); 405 EXPECT_EQ(kTestWidth, info.width);
406 EXPECT_EQ(kTestHeight, info.height); 406 EXPECT_EQ(kTestHeight, info.height);
407 EXPECT_EQ(kTestFramesPerSecond, info.frame_rate); 407 EXPECT_EQ(kTestFramesPerSecond, info.frame_rate);
408 EXPECT_EQ(media::VideoCaptureCapability::kI420, info.color); 408 EXPECT_EQ(media::kI420, info.color);
409 } 409 }
410 410
411 private: 411 private:
412 base::Lock lock_; 412 base::Lock lock_;
413 bool error_encountered_; 413 bool error_encountered_;
414 SkColor wait_color_yuv_; 414 SkColor wait_color_yuv_;
415 scoped_refptr<VideoCaptureBufferPool> buffer_pool_; 415 scoped_refptr<VideoCaptureBufferPool> buffer_pool_;
416 416
417 DISALLOW_COPY_AND_ASSIGN(StubConsumer); 417 DISALLOW_COPY_AND_ASSIGN(StubConsumer);
418 }; 418 };
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 TEST_F(WebContentsVideoCaptureDeviceTest, InvalidInitialWebContentsError) { 538 TEST_F(WebContentsVideoCaptureDeviceTest, InvalidInitialWebContentsError) {
539 // Before the installs itself on the UI thread up to start capturing, we'll 539 // Before the installs itself on the UI thread up to start capturing, we'll
540 // delete the web contents. This should trigger an error which can happen in 540 // delete the web contents. This should trigger an error which can happen in
541 // practice; we should be able to recover gracefully. 541 // practice; we should be able to recover gracefully.
542 ResetWebContents(); 542 ResetWebContents();
543 543
544 media::VideoCaptureCapability capture_format( 544 media::VideoCaptureCapability capture_format(
545 kTestWidth, 545 kTestWidth,
546 kTestHeight, 546 kTestHeight,
547 kTestFramesPerSecond, 547 kTestFramesPerSecond,
548 media::VideoCaptureCapability::kI420, 548 media::kI420,
549 0, 549 0,
550 false, 550 false,
551 media::ConstantResolutionVideoCaptureDevice); 551 media::ConstantResolutionVideoCaptureDevice);
552 device()->Allocate(capture_format, consumer()); 552 device()->Allocate(capture_format, consumer());
553 device()->Start(); 553 device()->Start();
554 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError()); 554 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError());
555 device()->DeAllocate(); 555 device()->DeAllocate();
556 } 556 }
557 557
558 TEST_F(WebContentsVideoCaptureDeviceTest, WebContentsDestroyed) { 558 TEST_F(WebContentsVideoCaptureDeviceTest, WebContentsDestroyed) {
559 // We'll simulate the tab being closed after the capture pipeline is up and 559 // We'll simulate the tab being closed after the capture pipeline is up and
560 // running. 560 // running.
561 media::VideoCaptureCapability capture_format( 561 media::VideoCaptureCapability capture_format(
562 kTestWidth, 562 kTestWidth,
563 kTestHeight, 563 kTestHeight,
564 kTestFramesPerSecond, 564 kTestFramesPerSecond,
565 media::VideoCaptureCapability::kI420, 565 media::kI420,
566 0, 566 0,
567 false, 567 false,
568 media::ConstantResolutionVideoCaptureDevice); 568 media::ConstantResolutionVideoCaptureDevice);
569 device()->Allocate(capture_format, consumer()); 569 device()->Allocate(capture_format, consumer());
570 device()->Start(); 570 device()->Start();
571 571
572 // Do one capture to prove 572 // Do one capture to prove
573 source()->SetSolidColor(SK_ColorRED); 573 source()->SetSolidColor(SK_ColorRED);
574 SimulateDrawEvent(); 574 SimulateDrawEvent();
575 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED)); 575 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED));
576 576
577 base::RunLoop().RunUntilIdle(); 577 base::RunLoop().RunUntilIdle();
578 578
579 // Post a task to close the tab. We should see an error reported to the 579 // Post a task to close the tab. We should see an error reported to the
580 // consumer. 580 // consumer.
581 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 581 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
582 base::Bind(&WebContentsVideoCaptureDeviceTest::ResetWebContents, 582 base::Bind(&WebContentsVideoCaptureDeviceTest::ResetWebContents,
583 base::Unretained(this))); 583 base::Unretained(this)));
584 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError()); 584 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError());
585 device()->DeAllocate(); 585 device()->DeAllocate();
586 } 586 }
587 587
588 TEST_F(WebContentsVideoCaptureDeviceTest, 588 TEST_F(WebContentsVideoCaptureDeviceTest,
589 StopDeviceBeforeCaptureMachineCreation) { 589 StopDeviceBeforeCaptureMachineCreation) {
590 media::VideoCaptureCapability capture_format( 590 media::VideoCaptureCapability capture_format(
591 kTestWidth, 591 kTestWidth,
592 kTestHeight, 592 kTestHeight,
593 kTestFramesPerSecond, 593 kTestFramesPerSecond,
594 media::VideoCaptureCapability::kI420, 594 media::kI420,
595 0, 595 0,
596 false, 596 false,
597 media::ConstantResolutionVideoCaptureDevice); 597 media::ConstantResolutionVideoCaptureDevice);
598 device()->Allocate(capture_format, consumer()); 598 device()->Allocate(capture_format, consumer());
599 device()->Start(); 599 device()->Start();
600 // Make a point of not running the UI messageloop here. 600 // Make a point of not running the UI messageloop here.
601 device()->Stop(); 601 device()->Stop();
602 device()->DeAllocate(); 602 device()->DeAllocate();
603 DestroyVideoCaptureDevice(); 603 DestroyVideoCaptureDevice();
604 604
605 // Currently, there should be CreateCaptureMachineOnUIThread() and 605 // Currently, there should be CreateCaptureMachineOnUIThread() and
606 // DestroyCaptureMachineOnUIThread() tasks pending on the current (UI) message 606 // DestroyCaptureMachineOnUIThread() tasks pending on the current (UI) message
607 // loop. These should both succeed without crashing, and the machine should 607 // loop. These should both succeed without crashing, and the machine should
608 // wind up in the idle state. 608 // wind up in the idle state.
609 base::RunLoop().RunUntilIdle(); 609 base::RunLoop().RunUntilIdle();
610 } 610 }
611 611
612 TEST_F(WebContentsVideoCaptureDeviceTest, StopWithRendererWorkToDo) { 612 TEST_F(WebContentsVideoCaptureDeviceTest, StopWithRendererWorkToDo) {
613 // Set up the test to use RGB copies and an normal 613 // Set up the test to use RGB copies and an normal
614 source()->SetCanCopyToVideoFrame(false); 614 source()->SetCanCopyToVideoFrame(false);
615 source()->SetUseFrameSubscriber(false); 615 source()->SetUseFrameSubscriber(false);
616 media::VideoCaptureCapability capture_format( 616 media::VideoCaptureCapability capture_format(
617 kTestWidth, 617 kTestWidth,
618 kTestHeight, 618 kTestHeight,
619 kTestFramesPerSecond, 619 kTestFramesPerSecond,
620 media::VideoCaptureCapability::kI420, 620 media::kI420,
621 0, 621 0,
622 false, 622 false,
623 media::ConstantResolutionVideoCaptureDevice); 623 media::ConstantResolutionVideoCaptureDevice);
624 device()->Allocate(capture_format, consumer()); 624 device()->Allocate(capture_format, consumer());
625 625
626 device()->Start(); 626 device()->Start();
627 // Make a point of not running the UI messageloop here. 627 // Make a point of not running the UI messageloop here.
628 // TODO(ajwong): Why do we care? 628 // TODO(ajwong): Why do we care?
629 base::RunLoop().RunUntilIdle(); 629 base::RunLoop().RunUntilIdle();
630 630
631 for (int i = 0; i < 10; ++i) 631 for (int i = 0; i < 10; ++i)
632 SimulateDrawEvent(); 632 SimulateDrawEvent();
633 633
634 device()->Stop(); 634 device()->Stop();
635 device()->DeAllocate(); 635 device()->DeAllocate();
636 // Currently, there should be CreateCaptureMachineOnUIThread() and 636 // Currently, there should be CreateCaptureMachineOnUIThread() and
637 // DestroyCaptureMachineOnUIThread() tasks pending on the current message 637 // DestroyCaptureMachineOnUIThread() tasks pending on the current message
638 // loop. These should both succeed without crashing, and the machine should 638 // loop. These should both succeed without crashing, and the machine should
639 // wind up in the idle state. 639 // wind up in the idle state.
640 ASSERT_FALSE(consumer()->HasError()); 640 ASSERT_FALSE(consumer()->HasError());
641 base::RunLoop().RunUntilIdle(); 641 base::RunLoop().RunUntilIdle();
642 ASSERT_FALSE(consumer()->HasError()); 642 ASSERT_FALSE(consumer()->HasError());
643 } 643 }
644 644
645 TEST_F(WebContentsVideoCaptureDeviceTest, DeviceRestart) { 645 TEST_F(WebContentsVideoCaptureDeviceTest, DeviceRestart) {
646 media::VideoCaptureCapability capture_format( 646 media::VideoCaptureCapability capture_format(
647 kTestWidth, 647 kTestWidth,
648 kTestHeight, 648 kTestHeight,
649 kTestFramesPerSecond, 649 kTestFramesPerSecond,
650 media::VideoCaptureCapability::kI420, 650 media::kI420,
651 0, 651 0,
652 false, 652 false,
653 media::ConstantResolutionVideoCaptureDevice); 653 media::ConstantResolutionVideoCaptureDevice);
654 device()->Allocate(capture_format, consumer()); 654 device()->Allocate(capture_format, consumer());
655 device()->Start(); 655 device()->Start();
656 base::RunLoop().RunUntilIdle(); 656 base::RunLoop().RunUntilIdle();
657 source()->SetSolidColor(SK_ColorRED); 657 source()->SetSolidColor(SK_ColorRED);
658 SimulateDrawEvent(); 658 SimulateDrawEvent();
659 SimulateDrawEvent(); 659 SimulateDrawEvent();
660 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED)); 660 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED));
(...skipping 21 matching lines...) Expand all
682 682
683 // The "happy case" test. No scaling is needed, so we should be able to change 683 // The "happy case" test. No scaling is needed, so we should be able to change
684 // the picture emitted from the source and expect to see each delivered to the 684 // the picture emitted from the source and expect to see each delivered to the
685 // consumer. The test will alternate between the three capture paths, simulating 685 // consumer. The test will alternate between the three capture paths, simulating
686 // falling in and out of accelerated compositing. 686 // falling in and out of accelerated compositing.
687 TEST_F(WebContentsVideoCaptureDeviceTest, GoesThroughAllTheMotions) { 687 TEST_F(WebContentsVideoCaptureDeviceTest, GoesThroughAllTheMotions) {
688 media::VideoCaptureCapability capture_format( 688 media::VideoCaptureCapability capture_format(
689 kTestWidth, 689 kTestWidth,
690 kTestHeight, 690 kTestHeight,
691 kTestFramesPerSecond, 691 kTestFramesPerSecond,
692 media::VideoCaptureCapability::kI420, 692 media::kI420,
693 0, 693 0,
694 false, 694 false,
695 media::ConstantResolutionVideoCaptureDevice); 695 media::ConstantResolutionVideoCaptureDevice);
696 device()->Allocate(capture_format, consumer()); 696 device()->Allocate(capture_format, consumer());
697 697
698 device()->Start(); 698 device()->Start();
699 699
700 for (int i = 0; i < 6; i++) { 700 for (int i = 0; i < 6; i++) {
701 const char* name = NULL; 701 const char* name = NULL;
702 switch (i % 3) { 702 switch (i % 3) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorBLACK)); 738 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorBLACK));
739 } 739 }
740 device()->DeAllocate(); 740 device()->DeAllocate();
741 } 741 }
742 742
743 TEST_F(WebContentsVideoCaptureDeviceTest, RejectsInvalidAllocateParams) { 743 TEST_F(WebContentsVideoCaptureDeviceTest, RejectsInvalidAllocateParams) {
744 media::VideoCaptureCapability capture_format( 744 media::VideoCaptureCapability capture_format(
745 1280, 745 1280,
746 720, 746 720,
747 -2, 747 -2,
748 media::VideoCaptureCapability::kI420, 748 media::kI420,
749 0, 749 0,
750 false, 750 false,
751 media::ConstantResolutionVideoCaptureDevice); 751 media::ConstantResolutionVideoCaptureDevice);
752 BrowserThread::PostTask(BrowserThread::UI, 752 BrowserThread::PostTask(BrowserThread::UI,
753 FROM_HERE, 753 FROM_HERE,
754 base::Bind(&media::VideoCaptureDevice::Allocate, 754 base::Bind(&media::VideoCaptureDevice::Allocate,
755 base::Unretained(device()), 755 base::Unretained(device()),
756 capture_format, 756 capture_format,
757 consumer())); 757 consumer()));
758 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError()); 758 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForError());
759 } 759 }
760 760
761 TEST_F(WebContentsVideoCaptureDeviceTest, BadFramesGoodFrames) { 761 TEST_F(WebContentsVideoCaptureDeviceTest, BadFramesGoodFrames) {
762 media::VideoCaptureCapability capture_format( 762 media::VideoCaptureCapability capture_format(
763 kTestWidth, 763 kTestWidth,
764 kTestHeight, 764 kTestHeight,
765 kTestFramesPerSecond, 765 kTestFramesPerSecond,
766 media::VideoCaptureCapability::kI420, 766 media::kI420,
767 0, 767 0,
768 false, 768 false,
769 media::ConstantResolutionVideoCaptureDevice); 769 media::ConstantResolutionVideoCaptureDevice);
770 device()->Allocate(capture_format, consumer()); 770 device()->Allocate(capture_format, consumer());
771 771
772 // 1x1 is too small to process; we intend for this to result in an error. 772 // 1x1 is too small to process; we intend for this to result in an error.
773 source()->SetCopyResultSize(1, 1); 773 source()->SetCopyResultSize(1, 1);
774 source()->SetSolidColor(SK_ColorRED); 774 source()->SetSolidColor(SK_ColorRED);
775 device()->Start(); 775 device()->Start();
776 776
(...skipping 11 matching lines...) Expand all
788 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorGREEN)); 788 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorGREEN));
789 source()->SetSolidColor(SK_ColorRED); 789 source()->SetSolidColor(SK_ColorRED);
790 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED)); 790 ASSERT_NO_FATAL_FAILURE(consumer()->WaitForNextColor(SK_ColorRED));
791 791
792 device()->Stop(); 792 device()->Stop();
793 device()->DeAllocate(); 793 device()->DeAllocate();
794 } 794 }
795 795
796 } // namespace 796 } // namespace
797 } // namespace content 797 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698