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

Unified Diff: media/video/capture/screen/screen_capturer_unittest.cc

Issue 13983010: Use webrtc::DesktopCapturer for screen capturer implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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: media/video/capture/screen/screen_capturer_unittest.cc
diff --git a/media/video/capture/screen/screen_capturer_unittest.cc b/media/video/capture/screen/screen_capturer_unittest.cc
index 4ed45d9648cc45be2b262f56a0ae42a9fac5393c..7be07dbc4bd9c38d05dd964d02f5116fa22dd8d4 100644
--- a/media/video/capture/screen/screen_capturer_unittest.cc
+++ b/media/video/capture/screen/screen_capturer_unittest.cc
@@ -8,79 +8,111 @@
#if defined(OS_MACOSX)
#include "base/mac/mac_util.h"
#endif // defined(OS_MACOSX)
-#include "media/video/capture/screen/screen_capture_data.h"
#include "media/video/capture/screen/screen_capturer_mock_objects.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_region.h"
using ::testing::_;
using ::testing::AnyNumber;
using ::testing::Return;
+using ::testing::SaveArg;
-namespace media {
+const int kTestSharedMemoryId = 123;
-MATCHER(DirtyRegionIsNonEmptyRect, "") {
- const SkRegion& dirty_region = arg->dirty_region();
- const SkIRect& dirty_region_bounds = dirty_region.getBounds();
- if (dirty_region_bounds.isEmpty()) {
- return false;
- }
- return dirty_region == SkRegion(dirty_region_bounds);
-}
+namespace media {
class ScreenCapturerTest : public testing::Test {
public:
- scoped_refptr<SharedBuffer> CreateSharedBuffer(uint32 size);
+ webrtc::SharedMemory* CreateSharedMemory(size_t size);
protected:
scoped_ptr<ScreenCapturer> capturer_;
- MockScreenCapturerDelegate delegate_;
+ MockMouseShapeObserver mouse_observer_;
+ MockScreenCapturerCallback callback_;
+};
+
+class FakeSharedMemory : public webrtc::SharedMemory {
+ public:
+ FakeSharedMemory(char* buffer, size_t size)
+ : SharedMemory(buffer, size, 0, kTestSharedMemoryId),
+ buffer_(buffer) {
+ }
+ virtual ~FakeSharedMemory() {
+ delete[] buffer_;
+ }
+ private:
+ char* buffer_;
+ DISALLOW_COPY_AND_ASSIGN(FakeSharedMemory);
};
-scoped_refptr<SharedBuffer> ScreenCapturerTest::CreateSharedBuffer(
- uint32 size) {
- return scoped_refptr<SharedBuffer>(new SharedBuffer(size));
+webrtc::SharedMemory* ScreenCapturerTest::CreateSharedMemory(size_t size) {
+ return new FakeSharedMemory(new char[size], size);
}
TEST_F(ScreenCapturerTest, StartCapturer) {
capturer_ = ScreenCapturer::Create();
- capturer_->Start(&delegate_);
+ capturer_->SetMouseShapeObserver(&mouse_observer_);
+ capturer_->Start(&callback_);
}
TEST_F(ScreenCapturerTest, Capture) {
// Assume that Start() treats the screen as invalid initially.
- EXPECT_CALL(delegate_,
- OnCaptureCompleted(DirtyRegionIsNonEmptyRect()));
- EXPECT_CALL(delegate_, OnCursorShapeChangedPtr(_))
+ webrtc::DesktopFrame* frame = NULL;
+ EXPECT_CALL(callback_, OnCaptureCompleted(_))
+ .WillOnce(SaveArg<0>(&frame));
+ EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_))
.Times(AnyNumber());
- EXPECT_CALL(delegate_, CreateSharedBuffer(_))
+ EXPECT_CALL(callback_, CreateSharedMemory(_))
.Times(AnyNumber())
- .WillRepeatedly(Return(scoped_refptr<SharedBuffer>()));
+ .WillRepeatedly(Return(static_cast<webrtc::SharedMemory*>(NULL)));
capturer_ = ScreenCapturer::Create();
- capturer_->Start(&delegate_);
- capturer_->CaptureFrame();
+ capturer_->Start(&callback_);
+ capturer_->Capture(webrtc::DesktopRegion());
+
+ ASSERT_TRUE(frame);
+ EXPECT_GT(frame->size().width(), 0);
+ EXPECT_GT(frame->size().height(), 0);
+ EXPECT_GE(frame->stride(),
+ frame->size().width() * webrtc::DesktopFrame::kBytesPerPixel);
+ EXPECT_TRUE(frame->shared_memory() == NULL);
+
+ // Verify that the region contains whole screen.
+ EXPECT_FALSE(frame->updated_region().is_empty());
+ webrtc::DesktopRegion::Iterator it(frame->updated_region());
+ ASSERT_TRUE(!it.IsAtEnd());
+ EXPECT_TRUE(it.rect().equals(webrtc::DesktopRect::MakeSize(frame->size())));
+ it.Advance();
+ EXPECT_TRUE(it.IsAtEnd());
+
+ delete frame;
}
#if defined(OS_WIN)
TEST_F(ScreenCapturerTest, UseSharedBuffers) {
- EXPECT_CALL(delegate_,
- OnCaptureCompleted(DirtyRegionIsNonEmptyRect()));
- EXPECT_CALL(delegate_, OnCursorShapeChangedPtr(_))
+ webrtc::DesktopFrame* frame = NULL;
+ EXPECT_CALL(callback_, OnCaptureCompleted(_))
+ .WillOnce(SaveArg<0>(&frame));
+ EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_))
.Times(AnyNumber());
- EXPECT_CALL(delegate_, CreateSharedBuffer(_))
+ EXPECT_CALL(callback_, CreateSharedMemory(_))
.Times(AnyNumber())
- .WillRepeatedly(Invoke(this, &ScreenCapturerTest::CreateSharedBuffer));
- EXPECT_CALL(delegate_, ReleaseSharedBuffer(_))
- .Times(AnyNumber());
+ .WillRepeatedly(Invoke(this, &ScreenCapturerTest::CreateSharedMemory));
capturer_ = ScreenCapturer::Create();
- capturer_->Start(&delegate_);
- capturer_->CaptureFrame();
- capturer_.reset();
+ capturer_->Start(&callback_);
+ capturer_->Capture(webrtc::DesktopRegion());
+
+ ASSERT_TRUE(frame);
+ ASSERT_TRUE(frame->shared_memory());
+ EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId);
+
+ delete frame;
}
#endif // defined(OS_WIN)
« no previous file with comments | « media/video/capture/screen/screen_capturer_mock_objects.cc ('k') | media/video/capture/screen/screen_capturer_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698