OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "media/video/capture/screen/screen_capturer.h" | |
6 | |
7 #include "base/bind.h" | |
8 #if defined(OS_MACOSX) | |
9 #include "base/mac/mac_util.h" | |
10 #endif // defined(OS_MACOSX) | |
11 #include "media/video/capture/screen/screen_capturer_mock_objects.h" | |
12 #include "testing/gmock/include/gmock/gmock.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | |
15 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" | |
16 | |
17 using ::testing::_; | |
18 using ::testing::AnyNumber; | |
19 using ::testing::Return; | |
20 using ::testing::SaveArg; | |
21 | |
22 const int kTestSharedMemoryId = 123; | |
23 | |
24 namespace media { | |
25 | |
26 class ScreenCapturerTest : public testing::Test { | |
27 public: | |
28 webrtc::SharedMemory* CreateSharedMemory(size_t size); | |
29 | |
30 protected: | |
31 scoped_ptr<ScreenCapturer> capturer_; | |
32 MockMouseShapeObserver mouse_observer_; | |
33 MockScreenCapturerCallback callback_; | |
34 }; | |
35 | |
36 class FakeSharedMemory : public webrtc::SharedMemory { | |
37 public: | |
38 FakeSharedMemory(char* buffer, size_t size) | |
39 : SharedMemory(buffer, size, 0, kTestSharedMemoryId), | |
40 buffer_(buffer) { | |
41 } | |
42 virtual ~FakeSharedMemory() { | |
43 delete[] buffer_; | |
44 } | |
45 private: | |
46 char* buffer_; | |
47 DISALLOW_COPY_AND_ASSIGN(FakeSharedMemory); | |
48 }; | |
49 | |
50 webrtc::SharedMemory* ScreenCapturerTest::CreateSharedMemory(size_t size) { | |
51 return new FakeSharedMemory(new char[size], size); | |
52 } | |
53 | |
54 TEST_F(ScreenCapturerTest, StartCapturer) { | |
55 capturer_ = ScreenCapturer::Create(); | |
56 capturer_->SetMouseShapeObserver(&mouse_observer_); | |
57 capturer_->Start(&callback_); | |
58 } | |
59 | |
60 TEST_F(ScreenCapturerTest, Capture) { | |
61 // Assume that Start() treats the screen as invalid initially. | |
62 webrtc::DesktopFrame* frame = NULL; | |
63 EXPECT_CALL(callback_, OnCaptureCompleted(_)) | |
64 .WillOnce(SaveArg<0>(&frame)); | |
65 EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_)) | |
66 .Times(AnyNumber()); | |
67 | |
68 EXPECT_CALL(callback_, CreateSharedMemory(_)) | |
69 .Times(AnyNumber()) | |
70 .WillRepeatedly(Return(static_cast<webrtc::SharedMemory*>(NULL))); | |
71 | |
72 capturer_ = ScreenCapturer::Create(); | |
73 capturer_->Start(&callback_); | |
74 capturer_->Capture(webrtc::DesktopRegion()); | |
75 | |
76 ASSERT_TRUE(frame); | |
77 EXPECT_GT(frame->size().width(), 0); | |
78 EXPECT_GT(frame->size().height(), 0); | |
79 EXPECT_GE(frame->stride(), | |
80 frame->size().width() * webrtc::DesktopFrame::kBytesPerPixel); | |
81 EXPECT_TRUE(frame->shared_memory() == NULL); | |
82 | |
83 // Verify that the region contains whole screen. | |
84 EXPECT_FALSE(frame->updated_region().is_empty()); | |
85 webrtc::DesktopRegion::Iterator it(frame->updated_region()); | |
86 ASSERT_TRUE(!it.IsAtEnd()); | |
87 EXPECT_TRUE(it.rect().equals(webrtc::DesktopRect::MakeSize(frame->size()))); | |
88 it.Advance(); | |
89 EXPECT_TRUE(it.IsAtEnd()); | |
90 | |
91 delete frame; | |
92 } | |
93 | |
94 #if defined(OS_WIN) | |
95 | |
96 TEST_F(ScreenCapturerTest, UseSharedBuffers) { | |
97 webrtc::DesktopFrame* frame = NULL; | |
98 EXPECT_CALL(callback_, OnCaptureCompleted(_)) | |
99 .WillOnce(SaveArg<0>(&frame)); | |
100 EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_)) | |
101 .Times(AnyNumber()); | |
102 | |
103 EXPECT_CALL(callback_, CreateSharedMemory(_)) | |
104 .Times(AnyNumber()) | |
105 .WillRepeatedly(Invoke(this, &ScreenCapturerTest::CreateSharedMemory)); | |
106 | |
107 capturer_ = ScreenCapturer::Create(); | |
108 capturer_->Start(&callback_); | |
109 capturer_->Capture(webrtc::DesktopRegion()); | |
110 | |
111 ASSERT_TRUE(frame); | |
112 ASSERT_TRUE(frame->shared_memory()); | |
113 EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId); | |
114 | |
115 delete frame; | |
116 } | |
117 | |
118 #endif // defined(OS_WIN) | |
119 | |
120 } // namespace media | |
OLD | NEW |