Remove DesktopRegion parameter from DesktopCapturer::Capture.

To ensure this change won't break Chromium, this is the first change, to add a
new CaptureFrame() function, and let Capture(DesktopRegion) and CaptureFrame()
call each other. So both a legacy consumer or a legacy implementation won't be
broken.

BUG=https://bugs.chromium.org/p/webrtc/issues/detail?id=6513

Review-Url: https://codereview.webrtc.org/2409833002
Cr-Commit-Position: refs/heads/master@{#14635}
This commit is contained in:
zijiehe 2016-10-13 16:47:49 -07:00 committed by Commit bot
parent 794d535e51
commit 91902cb6c0
24 changed files with 55 additions and 51 deletions

View File

@ -36,7 +36,7 @@ void CroppingWindowCapturer::SetSharedMemoryFactory(
window_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
}
void CroppingWindowCapturer::Capture(const DesktopRegion& region) {
void CroppingWindowCapturer::CaptureFrame() {
if (ShouldUseScreenCapturer()) {
if (!screen_capturer_.get()) {
screen_capturer_.reset(ScreenCapturer::Create(options_));
@ -45,9 +45,9 @@ void CroppingWindowCapturer::Capture(const DesktopRegion& region) {
}
screen_capturer_->Start(this);
}
screen_capturer_->Capture(region);
screen_capturer_->CaptureFrame();
} else {
window_capturer_->Capture(region);
window_capturer_->CaptureFrame();
}
}

View File

@ -32,7 +32,7 @@ class CroppingWindowCapturer : public WindowCapturer,
void Start(DesktopCapturer::Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
void SetExcludedWindow(WindowId window) override;
// WindowCapturer implementation.

View File

@ -145,10 +145,10 @@ void DesktopAndCursorComposer::SetSharedMemoryFactory(
desktop_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
}
void DesktopAndCursorComposer::Capture(const DesktopRegion& region) {
void DesktopAndCursorComposer::CaptureFrame() {
if (mouse_monitor_.get())
mouse_monitor_->Capture();
desktop_capturer_->Capture(region);
desktop_capturer_->CaptureFrame();
}
void DesktopAndCursorComposer::SetExcludedWindow(WindowId window) {

View File

@ -37,7 +37,7 @@ class DesktopAndCursorComposer : public DesktopCapturer,
void Start(DesktopCapturer::Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
void SetExcludedWindow(WindowId window) override;
private:

View File

@ -77,7 +77,7 @@ class FakeScreenCapturer : public DesktopCapturer {
void Start(Callback* callback) override { callback_ = callback; }
void Capture(const DesktopRegion& region) override {
void CaptureFrame() override {
callback_->OnCaptureResult(
next_frame_ ? Result::SUCCESS : Result::ERROR_TEMPORARY,
std::move(next_frame_));
@ -193,7 +193,7 @@ TEST_F(DesktopAndCursorComposerTest, Error) {
fake_cursor_->SetState(MouseCursorMonitor::INSIDE, DesktopVector());
fake_screen_->SetNextFrame(nullptr);
blender_.Capture(DesktopRegion());
blender_.CaptureFrame();
EXPECT_FALSE(frame_);
}
@ -237,7 +237,7 @@ TEST_F(DesktopAndCursorComposerTest, Blend) {
SharedDesktopFrame::Wrap(CreateTestFrame()));
fake_screen_->SetNextFrame(frame->Share());
blender_.Capture(DesktopRegion());
blender_.CaptureFrame();
VerifyFrame(*frame_, state, pos);

View File

@ -66,13 +66,12 @@ class DesktopCapturer {
virtual void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) {}
// Captures next frame. |region| specifies region of the capture target that
// should be fresh in the resulting frame. The frame may also include fresh
// data for areas outside |region|. In that case capturer will include these
// areas in updated_region() of the frame. |region| is specified relative to
// the top left corner of the capture target. Pending capture operations are
// canceled when DesktopCapturer is deleted.
virtual void Capture(const DesktopRegion& region) = 0;
// This is a legacy interface, consumers should call CaptureFrame() function.
virtual void Capture(const DesktopRegion& region) { CaptureFrame(); }
// Captures next frame, and involve callback provided by Start() function.
// Pending capture requests are canceled when DesktopCapturer is deleted.
virtual void CaptureFrame() { Capture(DesktopRegion()); }
// Sets the window to be excluded from the captured image in the future
// Capture calls. Used to exclude the screenshare notification window for

View File

@ -62,7 +62,7 @@ class FakeDesktopCapturer : public T {
callback_ = callback;
}
void Capture(const DesktopRegion& region) override {
void CaptureFrame() override {
if (generator_) {
std::unique_ptr<DesktopFrame> frame(
generator_->GetNextFrame(shared_memory_factory_.get()));

View File

@ -161,8 +161,8 @@ void ScreenCapturerDifferWrapper::SetSharedMemoryFactory(
base_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
}
void ScreenCapturerDifferWrapper::Capture(const DesktopRegion& region) {
base_capturer_->Capture(region);
void ScreenCapturerDifferWrapper::CaptureFrame() {
base_capturer_->CaptureFrame();
}
bool ScreenCapturerDifferWrapper::GetScreenList(ScreenList* screens) {

View File

@ -39,7 +39,7 @@ class ScreenCapturerDifferWrapper : public ScreenCapturer,
void Start(DesktopCapturer::Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
bool GetScreenList(ScreenList* screens) override;
bool SelectScreen(ScreenId id) override;

View File

@ -136,7 +136,7 @@ void ExecuteDifferWrapperCase(BlackWhiteDesktopFramePainter* frame_painter,
for (const auto& rect : updated_region) {
frame_painter->updated_region()->AddRect(rect);
}
capturer->Capture(DesktopRegion());
capturer->CaptureFrame();
}
// Executes a ScreenCapturerDifferWrapper::Capture(), if updated_region() is not
@ -147,7 +147,7 @@ void ExecuteCapturer(ScreenCapturerDifferWrapper* capturer,
EXPECT_CALL(*callback,
OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, testing::_))
.Times(1);
capturer->Capture(DesktopRegion());
capturer->CaptureFrame();
}
void ExecuteDifferWrapperTest(bool with_hints,
@ -178,7 +178,7 @@ void ExecuteDifferWrapperTest(bool with_hints,
AssertUpdatedRegionIs(**frame,
{DesktopRect::MakeSize((*frame)->size())});
}));
capturer.Capture(DesktopRegion());
capturer.CaptureFrame();
ExecuteDifferWrapperCase(&frame_painter, &capturer, &callback,
{DesktopRect::MakeLTRB(100, 100, 200, 200),

View File

@ -285,7 +285,7 @@ class ScreenCapturerMac : public ScreenCapturer {
// Overridden from ScreenCapturer:
void Start(Callback* callback) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
void SetExcludedWindow(WindowId window) override;
bool GetScreenList(ScreenList* screens) override;
bool SelectScreen(ScreenId id) override;
@ -426,7 +426,7 @@ void ScreenCapturerMac::Start(Callback* callback) {
callback_ = callback;
}
void ScreenCapturerMac::Capture(const DesktopRegion& region_to_capture) {
void ScreenCapturerMac::CaptureFrame() {
int64_t capture_start_time_nanos = rtc::TimeNanos();
queue_.MoveToNextFrame();

View File

@ -19,11 +19,16 @@ namespace webrtc {
class MockScreenCapturer : public ScreenCapturer {
public:
MockScreenCapturer() {}
MockScreenCapturer() {
ON_CALL(*this, Capture(testing::_))
.WillByDefault(testing::WithoutArgs(testing::Invoke(
this, &MockScreenCapturer::CaptureFrame)));
}
virtual ~MockScreenCapturer() {}
MOCK_METHOD1(Start, void(Callback* callback));
MOCK_METHOD1(Capture, void(const DesktopRegion& region));
MOCK_METHOD0(CaptureFrame, void(void));
MOCK_METHOD1(GetScreenList, bool(ScreenList* screens));
MOCK_METHOD1(SelectScreen, bool(ScreenId id));

View File

@ -204,7 +204,7 @@ class ScreenCapturerTest : public testing::Test {
EXPECT_CALL(callback_,
OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _))
.WillOnce(SaveUniquePtrArg(&frame));
capturer->Capture(DesktopRegion());
capturer->CaptureFrame();
EXPECT_TRUE(frame);
return frame;
}
@ -259,7 +259,7 @@ TEST_F(ScreenCapturerTest, Capture) {
.WillOnce(SaveUniquePtrArg(&frame));
capturer_->Start(&callback_);
capturer_->Capture(DesktopRegion());
capturer_->CaptureFrame();
ASSERT_TRUE(frame);
EXPECT_GT(frame->size().width(), 0);
@ -302,7 +302,7 @@ TEST_F(ScreenCapturerTest, UseSharedBuffers) {
capturer_->Start(&callback_);
capturer_->SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory>(new FakeSharedMemoryFactory()));
capturer_->Capture(DesktopRegion());
capturer_->CaptureFrame();
ASSERT_TRUE(frame);
ASSERT_TRUE(frame->shared_memory());
@ -318,7 +318,7 @@ TEST_F(ScreenCapturerTest, UseMagnifier) {
.WillOnce(SaveUniquePtrArg(&frame));
capturer_->Start(&callback_);
capturer_->Capture(DesktopRegion());
capturer_->CaptureFrame();
ASSERT_TRUE(frame);
}
@ -333,7 +333,7 @@ TEST_F(ScreenCapturerTest, UseDirectxCapturer) {
.WillOnce(SaveUniquePtrArg(&frame));
capturer_->Start(&callback_);
capturer_->Capture(DesktopRegion());
capturer_->CaptureFrame();
ASSERT_TRUE(frame);
}
@ -350,7 +350,7 @@ TEST_F(ScreenCapturerTest, UseDirectxCapturerWithSharedBuffers) {
capturer_->Start(&callback_);
capturer_->SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory>(new FakeSharedMemoryFactory()));
capturer_->Capture(DesktopRegion());
capturer_->CaptureFrame();
ASSERT_TRUE(frame);
ASSERT_TRUE(frame->shared_memory());
EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId);

View File

@ -54,7 +54,7 @@ class ScreenCapturerLinux : public ScreenCapturer,
// DesktopCapturer interface.
void Start(Callback* delegate) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
// ScreenCapturer interface.
bool GetScreenList(ScreenList* screens) override;
@ -228,7 +228,7 @@ void ScreenCapturerLinux::Start(Callback* callback) {
callback_ = callback;
}
void ScreenCapturerLinux::Capture(const DesktopRegion& region) {
void ScreenCapturerLinux::CaptureFrame() {
int64_t capture_start_time_nanos = rtc::TimeNanos();
queue_.MoveToNextFrame();

View File

@ -54,7 +54,7 @@ DesktopSize ScreenCapturerWinDirectx::SelectedDesktopSize() const {
.size();
}
void ScreenCapturerWinDirectx::Capture(const DesktopRegion& region) {
void ScreenCapturerWinDirectx::CaptureFrame() {
RTC_DCHECK(callback_);
int64_t capture_start_time_nanos = rtc::TimeNanos();

View File

@ -38,7 +38,7 @@ class ScreenCapturerWinDirectx : public ScreenCapturer {
void Start(Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
bool GetScreenList(ScreenList* screens) override;
bool SelectScreen(ScreenId id) override;

View File

@ -71,7 +71,7 @@ void ScreenCapturerWinGdi::SetSharedMemoryFactory(
shared_memory_factory_ = std::move(shared_memory_factory);
}
void ScreenCapturerWinGdi::Capture(const DesktopRegion& region) {
void ScreenCapturerWinGdi::CaptureFrame() {
int64_t capture_start_time_nanos = rtc::TimeNanos();
queue_.MoveToNextFrame();

View File

@ -39,7 +39,7 @@ class ScreenCapturerWinGdi : public ScreenCapturer {
void Start(Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
bool GetScreenList(ScreenList* screens) override;
bool SelectScreen(ScreenId id) override;

View File

@ -72,7 +72,7 @@ void ScreenCapturerWinMagnifier::SetSharedMemoryFactory(
shared_memory_factory_ = std::move(shared_memory_factory);
}
void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
void ScreenCapturerWinMagnifier::CaptureFrame() {
if (!magnifier_initialized_ ||
!magnifier_capture_succeeded_ ||
GetSystemMetrics(SM_CMONITORS) != 1) {
@ -82,7 +82,7 @@ void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
"initialization or last capture attempt failed, or "
"execute on multi-screen system.";
StartFallbackCapturer();
fallback_capturer_->Capture(region);
fallback_capturer_->CaptureFrame();
return;
}
@ -111,7 +111,7 @@ void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
LOG_F(LS_WARNING) << "Switching to the fallback screen capturer because "
"last capture attempt failed.";
StartFallbackCapturer();
fallback_capturer_->Capture(region);
fallback_capturer_->CaptureFrame();
return;
}

View File

@ -51,7 +51,7 @@ class ScreenCapturerWinMagnifier : public ScreenCapturer {
void Start(Callback* callback) override;
void SetSharedMemoryFactory(
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
bool GetScreenList(ScreenList* screens) override;
bool SelectScreen(ScreenId id) override;
void SetExcludedWindow(WindowId window) override;

View File

@ -55,7 +55,7 @@ class WindowCapturerMac : public WindowCapturer {
// DesktopCapturer interface.
void Start(Callback* callback) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
private:
Callback* callback_ = nullptr;
@ -176,7 +176,7 @@ void WindowCapturerMac::Start(Callback* callback) {
callback_ = callback;
}
void WindowCapturerMac::Capture(const DesktopRegion& region) {
void WindowCapturerMac::CaptureFrame() {
if (!IsWindowValid(window_id_)) {
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);
return;

View File

@ -31,7 +31,7 @@ class WindowCapturerNull : public WindowCapturer {
// DesktopCapturer interface.
void Start(Callback* callback) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
private:
Callback* callback_ = nullptr;
@ -64,7 +64,7 @@ void WindowCapturerNull::Start(Callback* callback) {
callback_ = callback;
}
void WindowCapturerNull::Capture(const DesktopRegion& region) {
void WindowCapturerNull::CaptureFrame() {
// Not implemented yet.
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
}

View File

@ -92,7 +92,7 @@ class WindowCapturerWin : public WindowCapturer {
// DesktopCapturer interface.
void Start(Callback* callback) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
private:
Callback* callback_ = nullptr;
@ -160,7 +160,7 @@ void WindowCapturerWin::Start(Callback* callback) {
callback_ = callback;
}
void WindowCapturerWin::Capture(const DesktopRegion& region) {
void WindowCapturerWin::CaptureFrame() {
if (!window_) {
LOG(LS_ERROR) << "Window hasn't been selected: " << GetLastError();
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);

View File

@ -95,7 +95,7 @@ class WindowCapturerLinux : public WindowCapturer,
// DesktopCapturer interface.
void Start(Callback* callback) override;
void Capture(const DesktopRegion& region) override;
void CaptureFrame() override;
// SharedXDisplay::XEventHandler interface.
bool HandleXEvent(const XEvent& event) override;
@ -271,7 +271,7 @@ void WindowCapturerLinux::Start(Callback* callback) {
callback_ = callback;
}
void WindowCapturerLinux::Capture(const DesktopRegion& region) {
void WindowCapturerLinux::CaptureFrame() {
if (!x_server_pixel_buffer_.IsWindowValid()) {
LOG(LS_INFO) << "The window is no longer valid.";
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);