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

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

Issue 2595853003: Revert of [Mojo Video Capture] Decouple VCController from VCBufferPool and VCDeviceClient (Closed)
Patch Set: Created 4 years 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 337e6d0511bcf17661b3ea2d34e9147f02c62d4f..2529e8959f48cfd64de6419ac9ffaf10b7da4327 100644
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -23,16 +23,11 @@
#include "base/threading/thread_task_runner_handle.h"
#include "content/browser/renderer_host/media/media_stream_provider.h"
#include "content/browser/renderer_host/media/video_capture_controller_event_handler.h"
-#include "content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.h"
#include "content/browser/renderer_host/media/video_capture_manager.h"
-#include "content/browser/renderer_host/media/video_frame_receiver_on_io_thread.h"
#include "content/common/media/media_stream_options.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "media/base/video_frame_metadata.h"
#include "media/base/video_util.h"
-#include "media/capture/video/video_capture_buffer_pool_impl.h"
-#include "media/capture/video/video_capture_buffer_tracker_factory_impl.h"
-#include "media/capture/video/video_capture_device_client.h"
#include "media/capture/video_capture_types.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -45,17 +40,13 @@
namespace content {
-std::unique_ptr<media::VideoCaptureJpegDecoder> CreateGpuJpegDecoder(
- const media::VideoCaptureJpegDecoder::DecodeDoneCB& decode_done_cb) {
- return base::MakeUnique<content::VideoCaptureGpuJpegDecoder>(decode_done_cb);
-}
-
class MockVideoCaptureControllerEventHandler
: public VideoCaptureControllerEventHandler {
public:
explicit MockVideoCaptureControllerEventHandler(
VideoCaptureController* controller)
- : controller_(controller), resource_utilization_(-1.0) {}
+ : controller_(controller),
+ resource_utilization_(-1.0) {}
~MockVideoCaptureControllerEventHandler() override {}
// These mock methods are delegated to by our fake implementation of
@@ -66,11 +57,12 @@
MOCK_METHOD1(DoEnded, void(VideoCaptureControllerID));
MOCK_METHOD1(DoError, void(VideoCaptureControllerID));
- void OnError(VideoCaptureControllerID id) override { DoError(id); }
+ void OnError(VideoCaptureControllerID id) override {
+ DoError(id);
+ }
void OnBufferCreated(VideoCaptureControllerID id,
mojo::ScopedSharedBufferHandle handle,
- int length,
- int buffer_id) override {
+ int length, int buffer_id) override {
DoBufferCreated(id);
}
void OnBufferDestroyed(VideoCaptureControllerID id, int buffer_id) override {
@@ -111,14 +103,6 @@
void(int frame_feedback_id, double utilization));
};
-class MockFrameBufferPool : public media::FrameBufferPool {
- public:
- MOCK_METHOD1(SetBufferHold, void(int buffer_id));
- MOCK_METHOD1(ReleaseBufferHold, void(int buffer_id));
- MOCK_METHOD1(GetHandleForTransit,
- mojo::ScopedSharedBufferHandle(int buffer_id));
-};
-
// Test class.
class VideoCaptureControllerTest
: public testing::Test,
@@ -131,22 +115,8 @@
static const int kPoolSize = 3;
void SetUp() override {
- scoped_refptr<media::VideoCaptureBufferPool> buffer_pool(
- new media::VideoCaptureBufferPoolImpl(
- base::MakeUnique<media::VideoCaptureBufferTrackerFactoryImpl>(),
- kPoolSize));
- controller_.reset(new VideoCaptureController());
- device_client_.reset(new media::VideoCaptureDeviceClient(
- base::MakeUnique<VideoFrameReceiverOnIOThread>(
- controller_->GetWeakPtrForIOThread()),
- buffer_pool,
- base::Bind(
- &CreateGpuJpegDecoder,
- base::Bind(&media::VideoFrameReceiver::OnIncomingCapturedVideoFrame,
- controller_->GetWeakPtrForIOThread()))));
- auto frame_receiver_observer = base::MakeUnique<MockFrameBufferPool>();
- mock_frame_receiver_observer_ = frame_receiver_observer.get();
- controller_->SetFrameBufferPool(std::move(frame_receiver_observer));
+ controller_.reset(new VideoCaptureController(kPoolSize));
+ device_ = controller_->NewDeviceClient();
auto consumer_feedback_observer =
base::MakeUnique<MockConsumerFeedbackObserver>();
mock_consumer_feedback_observer_ = consumer_feedback_observer.get();
@@ -177,8 +147,7 @@
std::unique_ptr<MockVideoCaptureControllerEventHandler> client_a_;
std::unique_ptr<MockVideoCaptureControllerEventHandler> client_b_;
std::unique_ptr<VideoCaptureController> controller_;
- std::unique_ptr<media::VideoCaptureDevice::Client> device_client_;
- MockFrameBufferPool* mock_frame_receiver_observer_;
+ std::unique_ptr<media::VideoCaptureDevice::Client> device_;
MockConsumerFeedbackObserver* mock_consumer_feedback_observer_;
private:
@@ -330,13 +299,13 @@
// side effect this will cause the first buffer to be shared with clients.
uint8_t buffer_no = 1;
const int arbitrary_frame_feedback_id = 101;
- ASSERT_EQ(0.0, device_client_->GetBufferPoolUtilization());
+ ASSERT_EQ(0.0, device_->GetBufferPoolUtilization());
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
- device_client_->ReserveOutputBuffer(capture_resolution, format,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id));
+ device_->ReserveOutputBuffer(capture_resolution, format,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id));
ASSERT_TRUE(buffer.get());
- ASSERT_EQ(1.0 / kPoolSize, device_client_->GetBufferPoolUtilization());
+ ASSERT_EQ(1.0 / kPoolSize, device_->GetBufferPoolUtilization());
memset(buffer->data(), buffer_no++, buffer->mapped_size());
{
InSequence s;
@@ -363,37 +332,30 @@
media::VideoFrameMetadata::RESOURCE_UTILIZATION));
client_a_->resource_utilization_ = 0.5;
client_b_->resource_utilization_ = -1.0;
- {
- InSequence s;
- EXPECT_CALL(*mock_frame_receiver_observer_, SetBufferHold(buffer->id()))
- .Times(1);
- // Expect VideoCaptureController to call the load observer with a
- // resource utilization of 0.5 (the largest of all reported values).
- EXPECT_CALL(*mock_consumer_feedback_observer_,
- OnUtilizationReport(arbitrary_frame_feedback_id, 0.5))
- .Times(1);
- EXPECT_CALL(*mock_frame_receiver_observer_, ReleaseBufferHold(buffer->id()))
- .Times(1);
- }
+
+ // Expect VideoCaptureController to call the load observer with a
+ // resource utilization of 0.5 (the largest of all reported values).
+ EXPECT_CALL(*mock_consumer_feedback_observer_,
+ OnUtilizationReport(arbitrary_frame_feedback_id, 0.5))
+ .Times(1);
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
base::RunLoop().RunUntilIdle();
Mock::VerifyAndClearExpectations(client_a_.get());
Mock::VerifyAndClearExpectations(client_b_.get());
Mock::VerifyAndClearExpectations(mock_consumer_feedback_observer_);
- Mock::VerifyAndClearExpectations(mock_frame_receiver_observer_);
// Second buffer which ought to use the same shared memory buffer. In this
// case pretend that the Buffer pointer is held by the device for a long
// delay. This shouldn't affect anything.
const int arbitrary_frame_feedback_id_2 = 102;
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer2 =
- device_client_->ReserveOutputBuffer(capture_resolution, format,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id_2);
+ device_->ReserveOutputBuffer(capture_resolution, format,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id_2);
ASSERT_TRUE(buffer2.get());
memset(buffer2->data(), buffer_no++, buffer2->mapped_size());
video_frame = WrapBuffer(capture_resolution,
@@ -404,21 +366,11 @@
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
// Expect VideoCaptureController to call the load observer with a
// resource utilization of 3.14 (the largest of all reported values).
- {
- InSequence s;
- EXPECT_CALL(*mock_frame_receiver_observer_, SetBufferHold(buffer2->id()))
- .Times(1);
- // Expect VideoCaptureController to call the load observer with a
- // resource utilization of 3.14 (the largest of all reported values).
- EXPECT_CALL(*mock_consumer_feedback_observer_,
- OnUtilizationReport(arbitrary_frame_feedback_id_2, 3.14))
- .Times(1);
- EXPECT_CALL(*mock_frame_receiver_observer_,
- ReleaseBufferHold(buffer2->id()))
- .Times(1);
- }
-
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer2), video_frame);
+ EXPECT_CALL(*mock_consumer_feedback_observer_,
+ OnUtilizationReport(arbitrary_frame_feedback_id_2, 3.14))
+ .Times(1);
+
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer2), video_frame);
// The buffer should be delivered to the clients in any order.
{
@@ -443,7 +395,6 @@
Mock::VerifyAndClearExpectations(client_a_.get());
Mock::VerifyAndClearExpectations(client_b_.get());
Mock::VerifyAndClearExpectations(mock_consumer_feedback_observer_);
- Mock::VerifyAndClearExpectations(mock_frame_receiver_observer_);
// Add a fourth client now that some buffers have come through.
controller_->AddClient(client_b_route_2,
@@ -456,9 +407,9 @@
for (int i = 0; i < kPoolSize; i++) {
const int arbitrary_frame_feedback_id = 200 + i;
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer =
- device_client_->ReserveOutputBuffer(capture_resolution, format,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id);
+ device_->ReserveOutputBuffer(capture_resolution, format,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id);
ASSERT_TRUE(buffer.get());
memset(buffer->data(), buffer_no++, buffer->mapped_size());
video_frame = WrapBuffer(capture_resolution,
@@ -466,11 +417,10 @@
ASSERT_TRUE(video_frame);
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer),
- video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
}
// ReserveOutputBuffer ought to fail now, because the pool is depleted.
- ASSERT_FALSE(device_client_
+ ASSERT_FALSE(device_
->ReserveOutputBuffer(capture_resolution, format,
media::PIXEL_STORAGE_CPU,
arbitrary_frame_feedback_id)
@@ -505,9 +455,9 @@
controller_->StopSession(300);
// Queue up another buffer.
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer3 =
- device_client_->ReserveOutputBuffer(capture_resolution, format,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id);
+ device_->ReserveOutputBuffer(capture_resolution, format,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id);
ASSERT_TRUE(buffer3.get());
memset(buffer3->data(), buffer_no++, buffer3->mapped_size());
video_frame = WrapBuffer(capture_resolution,
@@ -515,12 +465,12 @@
ASSERT_TRUE(video_frame);
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer3), video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer3), video_frame);
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer4 =
- device_client_->ReserveOutputBuffer(capture_resolution, format,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id);
+ device_->ReserveOutputBuffer(capture_resolution, format,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id);
{
// Kill A2 via session close (posts a task to disconnect, but A2 must not
// be sent either of these two buffers).
@@ -534,7 +484,7 @@
ASSERT_TRUE(video_frame);
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer4), video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer4), video_frame);
// B2 is the only client left, and is the only one that should
// get the buffer.
EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2, capture_resolution))
@@ -564,7 +514,7 @@
// Start with one client.
controller_->AddClient(route_id, client_a_.get(), 100, session_100);
- device_client_->OnError(FROM_HERE, "Test Error");
+ device_->OnError(FROM_HERE, "Test Error");
EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
base::RunLoop().RunUntilIdle();
Mock::VerifyAndClearExpectations(client_a_.get());
@@ -578,16 +528,16 @@
const int arbitrary_frame_feedback_id = 101;
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
- device_client_->ReserveOutputBuffer(
- capture_resolution, media::PIXEL_FORMAT_I420,
- media::PIXEL_STORAGE_CPU, arbitrary_frame_feedback_id));
+ device_->ReserveOutputBuffer(capture_resolution, media::PIXEL_FORMAT_I420,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id));
ASSERT_TRUE(buffer.get());
scoped_refptr<media::VideoFrame> video_frame =
WrapBuffer(capture_resolution, static_cast<uint8_t*>(buffer->data()));
ASSERT_TRUE(video_frame);
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
base::RunLoop().RunUntilIdle();
}
@@ -617,18 +567,18 @@
const gfx::Size dims(320, 240);
const int arbitrary_frame_feedback_id = 101;
std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
- device_client_->ReserveOutputBuffer(dims, media::PIXEL_FORMAT_I420,
- media::PIXEL_STORAGE_CPU,
- arbitrary_frame_feedback_id));
+ device_->ReserveOutputBuffer(dims, media::PIXEL_FORMAT_I420,
+ media::PIXEL_STORAGE_CPU,
+ arbitrary_frame_feedback_id));
ASSERT_TRUE(buffer.get());
scoped_refptr<media::VideoFrame> video_frame =
WrapBuffer(dims, static_cast<uint8_t*>(buffer->data()));
ASSERT_TRUE(video_frame);
- device_client_->OnError(FROM_HERE, "Test Error");
+ device_->OnError(FROM_HERE, "Test Error");
video_frame->metadata()->SetTimeTicks(
media::VideoFrameMetadata::REFERENCE_TIME, base::TimeTicks());
- device_client_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
+ device_->OnIncomingCapturedVideoFrame(std::move(buffer), video_frame);
EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
base::RunLoop().RunUntilIdle();

Powered by Google App Engine
This is Rietveld 408576698