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

Unified Diff: content/browser/renderer_host/media/video_capture_controller_unittest.cc

Issue 24133002: Make VideoCaptureController single-threaded and not ref counted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More longwinded hobbledy-nobble 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/video_capture_controller_unittest.cc
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
index db1c1d964c22ec8aa5e5f5febb51a1fa97effd4f..fec0942dde0566ea3abb52bbf70c001c664cb946 100644
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -59,7 +59,7 @@ class MockVideoCaptureControllerEventHandler
DoBufferReady(id);
base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(&VideoCaptureController::ReturnBuffer,
- controller_, id, this, buffer_id));
+ base::Unretained(controller_), id, this, buffer_id));
}
virtual void OnFrameInfo(
const VideoCaptureControllerID& id,
@@ -71,10 +71,10 @@ class MockVideoCaptureControllerEventHandler
// OnEnded() must respond by (eventually) unregistering the client.
base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(base::IgnoreResult(&VideoCaptureController::RemoveClient),
- controller_, id, this));
+ base::Unretained(controller_), id, this));
}
- scoped_refptr<VideoCaptureController> controller_;
+ VideoCaptureController* controller_;
};
// Test class.
@@ -87,7 +87,8 @@ class VideoCaptureControllerTest : public testing::Test {
static const int kPoolSize = 3;
virtual void SetUp() OVERRIDE {
- controller_ = new VideoCaptureController();
+ controller_.reset(new VideoCaptureController());
+ device_ = controller_->NewDeviceClient().Pass();
client_a_.reset(new MockVideoCaptureControllerEventHandler(
controller_.get()));
client_b_.reset(new MockVideoCaptureControllerEventHandler(
@@ -101,7 +102,8 @@ class VideoCaptureControllerTest : public testing::Test {
TestBrowserThreadBundle bindle_;
scoped_ptr<MockVideoCaptureControllerEventHandler> client_a_;
scoped_ptr<MockVideoCaptureControllerEventHandler> client_b_;
- scoped_refptr<VideoCaptureController> controller_;
+ scoped_ptr<VideoCaptureController> controller_;
+ scoped_ptr<media::VideoCaptureDevice::EventHandler> device_;
private:
DISALLOW_COPY_AND_ASSIGN(VideoCaptureControllerTest);
@@ -240,6 +242,8 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
base::kNullProcessHandle, session_300);
ASSERT_EQ(2, controller_->GetClientCount());
+ // The OnFrameInfo() event from the device, when processed by the controller,
+ // should generate client OnFrameInfo() and OnBufferCreated() events.
{
InSequence s;
EXPECT_CALL(*client_a_, DoFrameInfo(client_a_route_1)).Times(1);
@@ -250,9 +254,7 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
EXPECT_CALL(*client_b_, DoFrameInfo(client_b_route_1)).Times(1);
EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1)).Times(kPoolSize);
}
- // The Controller OnFrameInfo(), when processed, should turn into client
- // OnFrameInfo() and OnBufferCreated() events.
- controller_->OnFrameInfo(device_format);
+ device_->OnFrameInfo(device_format);
base::RunLoop().RunUntilIdle();
Mock::VerifyAndClearExpectations(client_a_.get());
Mock::VerifyAndClearExpectations(client_b_.get());
@@ -271,10 +273,10 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
// Now, simulate an incoming captured frame from the capture device.
uint8 frame_no = 1;
scoped_refptr<media::VideoFrame> frame;
- frame = controller_->ReserveOutputBuffer();
+ frame = device_->ReserveOutputBuffer();
ASSERT_TRUE(frame);
media::FillYUV(frame, frame_no++, 0x22, 0x44);
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
frame = NULL;
// The buffer should be delivered to the clients in any order.
@@ -287,10 +289,10 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
// Second frame. In this case pretend that the VideoFrame pointer is held
// by the device for a long delay. This shouldn't affect anything.
- frame = controller_->ReserveOutputBuffer();
+ frame = device_->ReserveOutputBuffer();
ASSERT_TRUE(frame);
media::FillYUV(frame, frame_no++, 0x22, 0x44);
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
// The buffer should be delivered to the clients in any order.
EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1)).Times(1);
@@ -314,15 +316,15 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
// Third, fourth, and fifth frames. Pretend they all arrive at the same time.
for (int i = 0; i < kPoolSize; i++) {
- frame = controller_->ReserveOutputBuffer();
+ frame = device_->ReserveOutputBuffer();
ASSERT_TRUE(frame);
ASSERT_EQ(media::VideoFrame::I420, frame->format());
media::FillYUV(frame, frame_no++, 0x22, 0x44);
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
}
// ReserveOutputBuffer ought to fail now, because the pool is depleted.
- ASSERT_FALSE(controller_->ReserveOutputBuffer());
+ ASSERT_FALSE(device_->ReserveOutputBuffer());
EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1)).Times(kPoolSize);
EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2)).Times(kPoolSize);
EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1)).Times(kPoolSize);
@@ -338,11 +340,11 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
EXPECT_CALL(*client_b_, DoEnded(client_b_route_1)).Times(1);
controller_->StopSession(300);
// Queue up another frame.
- frame = controller_->ReserveOutputBuffer();
+ frame = device_->ReserveOutputBuffer();
ASSERT_TRUE(frame);
media::FillYUV(frame, frame_no++, 0x22, 0x44);
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
- frame = controller_->ReserveOutputBuffer();
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ frame = device_->ReserveOutputBuffer();
{
// Kill A2 via session close (posts a task to disconnect, but A2 must not
// be sent either of these two frames)..
@@ -351,7 +353,7 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
}
ASSERT_TRUE(frame);
media::FillYUV(frame, frame_no++, 0x22, 0x44);
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
// B2 is the only client left, and is the only one that should
// get the frame.
EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2)).Times(2);
@@ -377,7 +379,7 @@ TEST_F(VideoCaptureControllerTest, ErrorBeforeDeviceCreation) {
// Start with one client.
controller_->AddClient(route_id, client_a_.get(),
base::kNullProcessHandle, session_100);
- controller_->OnError();
+ device_->OnError();
EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
base::RunLoop().RunUntilIdle();
Mock::VerifyAndClearExpectations(client_a_.get());
@@ -395,7 +397,7 @@ TEST_F(VideoCaptureControllerTest, ErrorBeforeDeviceCreation) {
10, 10, 25, media::PIXEL_FORMAT_ARGB, 10, false,
media::ConstantResolutionVideoCaptureDevice);
- controller_->OnFrameInfo(device_format);
+ device_->OnFrameInfo(device_format);
base::RunLoop().RunUntilIdle();
}
@@ -424,17 +426,17 @@ TEST_F(VideoCaptureControllerTest, ErrorAfterDeviceCreation) {
// Start the device and get as far as exchanging buffers with the subprocess.
// Then, signal an error and deliver the frame. The error should be propagated
// to clients; the frame should not be.
- controller_->OnFrameInfo(device_format);
+ device_->OnFrameInfo(device_format);
EXPECT_CALL(*client_a_, DoFrameInfo(route_id)).Times(1);
EXPECT_CALL(*client_a_, DoBufferCreated(route_id)).Times(kPoolSize);
base::RunLoop().RunUntilIdle();
Mock::VerifyAndClearExpectations(client_a_.get());
- scoped_refptr<media::VideoFrame> frame = controller_->ReserveOutputBuffer();
+ scoped_refptr<media::VideoFrame> frame = device_->ReserveOutputBuffer();
ASSERT_TRUE(frame);
- controller_->OnError();
- controller_->OnIncomingCapturedVideoFrame(frame, base::Time());
+ device_->OnError();
+ device_->OnIncomingCapturedVideoFrame(frame, base::Time());
frame = NULL;
EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);

Powered by Google App Engine
This is Rietveld 408576698