summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc')
-rw-r--r--chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc279
1 files changed, 0 insertions, 279 deletions
diff --git a/chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc b/chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc
deleted file mode 100644
index 03dbd53059f..00000000000
--- a/chromium/content/browser/renderer_host/media/desktop_capture_device_unittest.cc
+++ /dev/null
@@ -1,279 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/renderer_host/media/desktop_capture_device.h"
-
-#include "base/basictypes.h"
-#include "base/sequenced_task_runner.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/test/test_timeouts.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "base/time/time.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
-#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
-
-using ::testing::_;
-using ::testing::AnyNumber;
-using ::testing::DoAll;
-using ::testing::Expectation;
-using ::testing::InvokeWithoutArgs;
-using ::testing::SaveArg;
-
-namespace content {
-
-namespace {
-
-MATCHER_P2(EqualsCaptureCapability, width, height, "") {
- return arg.width == width && arg.height == height;
-}
-
-const int kTestFrameWidth1 = 100;
-const int kTestFrameHeight1 = 100;
-const int kTestFrameWidth2 = 200;
-const int kTestFrameHeight2 = 150;
-
-const int kFrameRate = 30;
-
-class MockDeviceClient : public media::VideoCaptureDevice::Client {
- public:
- MOCK_METHOD2(ReserveOutputBuffer,
- scoped_refptr<Buffer>(media::VideoFrame::Format format,
- const gfx::Size& dimensions));
- MOCK_METHOD0(OnError, void());
- MOCK_METHOD5(OnIncomingCapturedFrame,
- void(const uint8* data,
- int length,
- base::Time timestamp,
- int rotation,
- const media::VideoCaptureFormat& frame_format));
- MOCK_METHOD5(OnIncomingCapturedBuffer,
- void(const scoped_refptr<Buffer>& buffer,
- media::VideoFrame::Format format,
- const gfx::Size& dimensions,
- base::Time timestamp,
- int frame_rate));
-};
-
-// DesktopFrame wrapper that flips wrapped frame upside down by inverting
-// stride.
-class InvertedDesktopFrame : public webrtc::DesktopFrame {
- public:
- // Takes ownership of |frame|.
- InvertedDesktopFrame(webrtc::DesktopFrame* frame)
- : webrtc::DesktopFrame(
- frame->size(), -frame->stride(),
- frame->data() + (frame->size().height() - 1) * frame->stride(),
- frame->shared_memory()),
- original_frame_(frame) {
- set_dpi(frame->dpi());
- set_capture_time_ms(frame->capture_time_ms());
- mutable_updated_region()->Swap(frame->mutable_updated_region());
- }
- virtual ~InvertedDesktopFrame() {}
-
- private:
- scoped_ptr<webrtc::DesktopFrame> original_frame_;
-
- DISALLOW_COPY_AND_ASSIGN(InvertedDesktopFrame);
-};
-
-// TODO(sergeyu): Move this to a separate file where it can be reused.
-class FakeScreenCapturer : public webrtc::ScreenCapturer {
- public:
- FakeScreenCapturer()
- : callback_(NULL),
- frame_index_(0),
- generate_inverted_frames_(false) {
- }
- virtual ~FakeScreenCapturer() {}
-
- void set_generate_inverted_frames(bool generate_inverted_frames) {
- generate_inverted_frames_ = generate_inverted_frames;
- }
-
- // VideoFrameCapturer interface.
- virtual void Start(Callback* callback) OVERRIDE {
- callback_ = callback;
- }
-
- virtual void Capture(const webrtc::DesktopRegion& region) OVERRIDE {
- webrtc::DesktopSize size;
- if (frame_index_ % 2 == 0) {
- size = webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1);
- } else {
- size = webrtc::DesktopSize(kTestFrameWidth2, kTestFrameHeight2);
- }
- frame_index_++;
-
- webrtc::DesktopFrame* frame = new webrtc::BasicDesktopFrame(size);
- if (generate_inverted_frames_)
- frame = new InvertedDesktopFrame(frame);
- callback_->OnCaptureCompleted(frame);
- }
-
- virtual void SetMouseShapeObserver(
- MouseShapeObserver* mouse_shape_observer) OVERRIDE {
- }
-
- private:
- Callback* callback_;
- int frame_index_;
- bool generate_inverted_frames_;
-};
-
-class DesktopCaptureDeviceTest : public testing::Test {
- public:
- virtual void SetUp() OVERRIDE {
- worker_pool_ = new base::SequencedWorkerPool(3, "TestCaptureThread");
- }
-
- protected:
- scoped_refptr<base::SequencedWorkerPool> worker_pool_;
-};
-
-} // namespace
-
-// There is currently no screen capturer implementation for ozone. So disable
-// the test that uses a real screen-capturer instead of FakeScreenCapturer.
-// http://crbug.com/260318
-#if defined(USE_OZONE)
-#define MAYBE_Capture DISABLED_Capture
-#else
-#define MAYBE_Capture Capture
-#endif
-TEST_F(DesktopCaptureDeviceTest, MAYBE_Capture) {
- scoped_ptr<webrtc::DesktopCapturer> capturer(
- webrtc::ScreenCapturer::Create());
- DesktopCaptureDevice capture_device(
- worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
- capturer.Pass());
- media::VideoCaptureFormat format;
- base::WaitableEvent done_event(false, false);
- int frame_size;
-
- scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
- EXPECT_CALL(*client, OnError()).Times(0);
- EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _))
- .WillRepeatedly(
- DoAll(SaveArg<1>(&frame_size),
- SaveArg<4>(&format),
- InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
-
- media::VideoCaptureParams capture_params;
- capture_params.requested_format.frame_size.SetSize(640, 480);
- capture_params.requested_format.frame_rate = kFrameRate;
- capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420;
- capture_params.allow_resolution_change = false;
- capture_device.AllocateAndStart(
- capture_params, client.PassAs<media::VideoCaptureDevice::Client>());
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
- capture_device.StopAndDeAllocate();
-
- EXPECT_GT(format.frame_size.width(), 0);
- EXPECT_GT(format.frame_size.height(), 0);
- EXPECT_EQ(kFrameRate, format.frame_rate);
- EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format);
-
- EXPECT_EQ(format.frame_size.GetArea() * 4, frame_size);
- worker_pool_->FlushForTesting();
-}
-
-// Test that screen capturer behaves correctly if the source frame size changes
-// but the caller cannot cope with variable resolution output.
-TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeConstantResolution) {
- FakeScreenCapturer* mock_capturer = new FakeScreenCapturer();
-
- DesktopCaptureDevice capture_device(
- worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
- scoped_ptr<webrtc::DesktopCapturer>(mock_capturer));
-
- media::VideoCaptureFormat format;
- base::WaitableEvent done_event(false, false);
- int frame_size;
-
- scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
- EXPECT_CALL(*client, OnError()).Times(0);
- EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _))
- .WillRepeatedly(
- DoAll(SaveArg<1>(&frame_size),
- SaveArg<4>(&format),
- InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
-
- media::VideoCaptureParams capture_params;
- capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1,
- kTestFrameHeight1);
- capture_params.requested_format.frame_rate = kFrameRate;
- capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420;
- capture_params.allow_resolution_change = false;
-
- capture_device.AllocateAndStart(
- capture_params, client.PassAs<media::VideoCaptureDevice::Client>());
-
- // Capture at least two frames, to ensure that the source frame size has
- // changed while capturing.
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
- done_event.Reset();
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
-
- capture_device.StopAndDeAllocate();
-
- EXPECT_EQ(kTestFrameWidth1, format.frame_size.width());
- EXPECT_EQ(kTestFrameHeight1, format.frame_size.height());
- EXPECT_EQ(kFrameRate, format.frame_rate);
- EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format);
-
- EXPECT_EQ(format.frame_size.GetArea() * 4, frame_size);
- worker_pool_->FlushForTesting();
-}
-
-// Test that screen capturer behaves correctly if the source frame size changes
-// and the caller can cope with variable resolution output.
-TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeVariableResolution) {
- FakeScreenCapturer* mock_capturer = new FakeScreenCapturer();
-
- DesktopCaptureDevice capture_device(
- worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
- scoped_ptr<webrtc::DesktopCapturer>(mock_capturer));
-
- media::VideoCaptureFormat format;
- base::WaitableEvent done_event(false, false);
-
- scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
- EXPECT_CALL(*client, OnError()).Times(0);
- EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _))
- .WillRepeatedly(
- DoAll(SaveArg<4>(&format),
- InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
-
- media::VideoCaptureParams capture_params;
- capture_params.requested_format.frame_size.SetSize(kTestFrameWidth2,
- kTestFrameHeight2);
- capture_params.requested_format.frame_rate = kFrameRate;
- capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420;
- capture_params.allow_resolution_change = false;
-
- capture_device.AllocateAndStart(
- capture_params, client.PassAs<media::VideoCaptureDevice::Client>());
-
- // Capture at least three frames, to ensure that the source frame size has
- // changed at least twice while capturing.
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
- done_event.Reset();
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
- done_event.Reset();
- EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
-
- capture_device.StopAndDeAllocate();
-
- EXPECT_EQ(kTestFrameWidth1, format.frame_size.width());
- EXPECT_EQ(kTestFrameHeight1, format.frame_size.height());
- EXPECT_EQ(kFrameRate, format.frame_rate);
- EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format);
- worker_pool_->FlushForTesting();
-}
-
-} // namespace content