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

Unified Diff: trunk/src/content/renderer/media/video_capture_impl_unittest.cc

Issue 135683002: Revert 244074 "Eliminate video capture thread in renderer" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/content/renderer/media/video_capture_impl_unittest.cc
===================================================================
--- trunk/src/content/renderer/media/video_capture_impl_unittest.cc (revision 244357)
+++ trunk/src/content/renderer/media/video_capture_impl_unittest.cc (working copy)
@@ -3,18 +3,15 @@
// found in the LICENSE file.
#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
#include "content/child/child_process.h"
#include "content/common/media/video_capture_messages.h"
#include "content/renderer/media/video_capture_impl.h"
-#include "media/video/capture/mock_video_capture_event_handler.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
using ::testing::AtLeast;
-using ::testing::InvokeWithoutArgs;
-using media::MockVideoCaptureEventHandler;
+using ::testing::Return;
namespace content {
@@ -32,13 +29,36 @@
DISALLOW_COPY_AND_ASSIGN(MockVideoCaptureMessageFilter);
};
+class MockVideoCaptureClient : public media::VideoCapture::EventHandler {
+ public:
+ MockVideoCaptureClient() {}
+ virtual ~MockVideoCaptureClient() {}
+
+ // EventHandler implementation.
+ MOCK_METHOD1(OnStarted, void(media::VideoCapture* capture));
+ MOCK_METHOD1(OnStopped, void(media::VideoCapture* capture));
+ MOCK_METHOD1(OnPaused, void(media::VideoCapture* capture));
+ MOCK_METHOD2(OnError, void(media::VideoCapture* capture, int error_code));
+ MOCK_METHOD1(OnRemoved, void(media::VideoCapture* capture));
+ MOCK_METHOD2(OnFrameReady,
+ void(media::VideoCapture* capture,
+ const scoped_refptr<media::VideoFrame>& frame));
+ MOCK_METHOD2(OnDeviceInfoReceived,
+ void(media::VideoCapture* capture,
+ const media::VideoCaptureFormat& device_info));
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockVideoCaptureClient);
+};
+
class VideoCaptureImplTest : public ::testing::Test {
public:
class MockVideoCaptureImpl : public VideoCaptureImpl {
public:
MockVideoCaptureImpl(const media::VideoCaptureSessionId id,
+ scoped_refptr<base::MessageLoopProxy> ml_proxy,
VideoCaptureMessageFilter* filter)
- : VideoCaptureImpl(id, filter) {}
+ : VideoCaptureImpl(id, ml_proxy.get(), filter) {}
virtual ~MockVideoCaptureImpl() {}
// Override Send() to mimic device to send events.
@@ -82,13 +102,15 @@
params_large_.requested_format = media::VideoCaptureFormat(
gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420);
+ message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_IO));
+ message_loop_proxy_ = base::MessageLoopProxy::current().get();
child_process_.reset(new ChildProcess());
message_filter_ = new MockVideoCaptureMessageFilter;
session_id_ = 1;
video_capture_impl_ = new MockVideoCaptureImpl(
- session_id_, message_filter_.get());
+ session_id_, message_loop_proxy_, message_filter_.get());
video_capture_impl_->device_id_ = 2;
}
@@ -97,13 +119,9 @@
delete video_capture_impl_;
}
- void Quit() {
- message_loop_.PostTask(FROM_HERE, run_loop_.QuitClosure());
- }
-
protected:
- base::MessageLoop message_loop_;
- base::RunLoop run_loop_;
+ scoped_ptr<base::MessageLoop> message_loop_;
+ scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
scoped_ptr<ChildProcess> child_process_;
scoped_refptr<MockVideoCaptureMessageFilter> message_filter_;
media::VideoCaptureSessionId session_id_;
@@ -117,85 +135,141 @@
TEST_F(VideoCaptureImplTest, Simple) {
// Execute SetCapture() and StopCapture() for one client.
- scoped_ptr<MockVideoCaptureEventHandler> client(
- new MockVideoCaptureEventHandler);
+ scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient);
- EXPECT_CALL(*client, OnStarted(_));
- EXPECT_CALL(*client, OnStopped(_));
+ EXPECT_CALL(*client, OnStarted(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StartCapture(client.get(), params_small_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client, OnStopped(_))
+ .WillOnce(Return());
EXPECT_CALL(*client, OnRemoved(_))
- .WillOnce(InvokeWithoutArgs(this, &VideoCaptureImplTest::Quit));
+ .WillOnce(Return());
- video_capture_impl_->StartCapture(client.get(), params_small_);
video_capture_impl_->StopCapture(client.get());
- run_loop_.Run();
+ message_loop_->RunUntilIdle();
}
TEST_F(VideoCaptureImplTest, TwoClientsInSequence) {
// Execute SetCapture() and StopCapture() for 2 clients in sequence.
- scoped_ptr<MockVideoCaptureEventHandler> client1(
- new MockVideoCaptureEventHandler);
- scoped_ptr<MockVideoCaptureEventHandler> client2(
- new MockVideoCaptureEventHandler);
+ scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient);
- EXPECT_CALL(*client1, OnStarted(_));
- EXPECT_CALL(*client1, OnStopped(_));
- EXPECT_CALL(*client1, OnRemoved(_));
- EXPECT_CALL(*client2, OnStarted(_));
- EXPECT_CALL(*client2, OnStopped(_));
- EXPECT_CALL(*client2, OnRemoved(_))
- .WillOnce(InvokeWithoutArgs(this, &VideoCaptureImplTest::Quit));
+ EXPECT_CALL(*client, OnStarted(_))
+ .WillOnce(Return());
- video_capture_impl_->StartCapture(client1.get(), params_small_);
- video_capture_impl_->StopCapture(client1.get());
- video_capture_impl_->StartCapture(client2.get(), params_small_);
- video_capture_impl_->StopCapture(client2.get());
- run_loop_.Run();
+ video_capture_impl_->StartCapture(client.get(), params_small_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client, OnRemoved(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StopCapture(client.get());
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client, OnStarted(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StartCapture(client.get(), params_small_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client, OnRemoved(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StopCapture(client.get());
+ message_loop_->RunUntilIdle();
}
TEST_F(VideoCaptureImplTest, LargeAndSmall) {
// Execute SetCapture() and StopCapture() for 2 clients simultaneously.
// The large client starts first and stops first.
- scoped_ptr<MockVideoCaptureEventHandler> client_small(
- new MockVideoCaptureEventHandler);
- scoped_ptr<MockVideoCaptureEventHandler> client_large(
- new MockVideoCaptureEventHandler);
+ scoped_ptr<MockVideoCaptureClient> client_small(new MockVideoCaptureClient);
+ scoped_ptr<MockVideoCaptureClient> client_large(new MockVideoCaptureClient);
- EXPECT_CALL(*client_large, OnStarted(_));
- EXPECT_CALL(*client_small, OnStarted(_));
- EXPECT_CALL(*client_large, OnStopped(_));
- EXPECT_CALL(*client_large, OnRemoved(_));
- EXPECT_CALL(*client_small, OnStopped(_));
- EXPECT_CALL(*client_small, OnRemoved(_))
- .WillOnce(InvokeWithoutArgs(this, &VideoCaptureImplTest::Quit));
+ EXPECT_CALL(*client_large, OnStarted(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnStarted(_))
+ .WillOnce(Return());
video_capture_impl_->StartCapture(client_large.get(), params_large_);
video_capture_impl_->StartCapture(client_small.get(), params_small_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client_large, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_large, OnRemoved(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnRemoved(_))
+ .WillOnce(Return());
+
video_capture_impl_->StopCapture(client_large.get());
video_capture_impl_->StopCapture(client_small.get());
- run_loop_.Run();
+ message_loop_->RunUntilIdle();
}
TEST_F(VideoCaptureImplTest, SmallAndLarge) {
// Execute SetCapture() and StopCapture() for 2 clients simultaneously.
// The small client starts first and stops first.
- scoped_ptr<MockVideoCaptureEventHandler> client_small(
- new MockVideoCaptureEventHandler);
- scoped_ptr<MockVideoCaptureEventHandler> client_large(
- new MockVideoCaptureEventHandler);
+ scoped_ptr<MockVideoCaptureClient> client_small(new MockVideoCaptureClient);
+ scoped_ptr<MockVideoCaptureClient> client_large(new MockVideoCaptureClient);
- EXPECT_CALL(*client_small, OnStarted(_));
- EXPECT_CALL(*client_large, OnStarted(_));
- EXPECT_CALL(*client_small, OnStopped(_));
- EXPECT_CALL(*client_small, OnRemoved(_));
- EXPECT_CALL(*client_large, OnStopped(_));
- EXPECT_CALL(*client_large, OnRemoved(_))
- .WillOnce(InvokeWithoutArgs(this, &VideoCaptureImplTest::Quit));
+ EXPECT_CALL(*client_large, OnStarted(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnStarted(_))
+ .WillOnce(Return());
video_capture_impl_->StartCapture(client_small.get(), params_small_);
video_capture_impl_->StartCapture(client_large.get(), params_large_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client_large, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_large, OnRemoved(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client_small, OnRemoved(_))
+ .WillOnce(Return());
+
video_capture_impl_->StopCapture(client_small.get());
video_capture_impl_->StopCapture(client_large.get());
- run_loop_.Run();
+ message_loop_->RunUntilIdle();
}
+TEST_F(VideoCaptureImplTest, TwoClientsWithSameSize) {
+ // Execute SetCapture() and StopCapture() for 2 clients simultaneously.
+ // The client1 starts first and stops first.
+ scoped_ptr<MockVideoCaptureClient> client1(new MockVideoCaptureClient);
+ scoped_ptr<MockVideoCaptureClient> client2(new MockVideoCaptureClient);
+
+ EXPECT_CALL(*client1, OnStarted(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client2, OnStarted(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StartCapture(client1.get(), params_small_);
+ video_capture_impl_->StartCapture(client2.get(), params_small_);
+ message_loop_->RunUntilIdle();
+
+ EXPECT_CALL(*client1, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client1, OnRemoved(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client2, OnStopped(_))
+ .WillOnce(Return());
+ EXPECT_CALL(*client2, OnRemoved(_))
+ .WillOnce(Return());
+
+ video_capture_impl_->StopCapture(client1.get());
+ video_capture_impl_->StopCapture(client2.get());
+ message_loop_->RunUntilIdle();
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698