| Index: remoting/host/video_frame_pump_unittest.cc
|
| diff --git a/remoting/host/video_frame_pump_unittest.cc b/remoting/host/video_frame_pump_unittest.cc
|
| deleted file mode 100644
|
| index d6490f41a43948c7e19861b40dadd81db13c9a11..0000000000000000000000000000000000000000
|
| --- a/remoting/host/video_frame_pump_unittest.cc
|
| +++ /dev/null
|
| @@ -1,239 +0,0 @@
|
| -// Copyright 2015 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 "remoting/host/video_frame_pump.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "remoting/base/auto_thread.h"
|
| -#include "remoting/base/auto_thread_task_runner.h"
|
| -#include "remoting/codec/video_encoder.h"
|
| -#include "remoting/codec/video_encoder_verbatim.h"
|
| -#include "remoting/host/desktop_capturer_proxy.h"
|
| -#include "remoting/host/fake_desktop_capturer.h"
|
| -#include "remoting/host/host_mock_objects.h"
|
| -#include "remoting/proto/control.pb.h"
|
| -#include "remoting/proto/video.pb.h"
|
| -#include "remoting/protocol/protocol_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/screen_capturer_mock_objects.h"
|
| -
|
| -using ::remoting::protocol::MockVideoStub;
|
| -
|
| -using ::testing::_;
|
| -using ::testing::AtLeast;
|
| -using ::testing::DoAll;
|
| -using ::testing::Expectation;
|
| -using ::testing::InvokeWithoutArgs;
|
| -using ::testing::Return;
|
| -
|
| -namespace remoting {
|
| -
|
| -namespace {
|
| -
|
| -ACTION(FinishSend) {
|
| - arg1.Run();
|
| -}
|
| -
|
| -scoped_ptr<webrtc::DesktopFrame> CreateNullFrame(
|
| - webrtc::DesktopCapturer::Callback*) {
|
| - return nullptr;
|
| -}
|
| -
|
| -scoped_ptr<webrtc::DesktopFrame> CreateUnchangedFrame(
|
| - webrtc::DesktopCapturer::Callback*) {
|
| - const webrtc::DesktopSize kSize(800, 640);
|
| - // updated_region() is already empty by default in new BasicDesktopFrames.
|
| - return make_scoped_ptr(new webrtc::BasicDesktopFrame(kSize));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -static const int kWidth = 640;
|
| -static const int kHeight = 480;
|
| -
|
| -class ThreadCheckVideoEncoder : public VideoEncoderVerbatim {
|
| - public:
|
| - ThreadCheckVideoEncoder(
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| - : task_runner_(task_runner) {
|
| - }
|
| - ~ThreadCheckVideoEncoder() override {
|
| - EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
|
| - }
|
| -
|
| - scoped_ptr<VideoPacket> Encode(const webrtc::DesktopFrame& frame) override {
|
| - return make_scoped_ptr(new VideoPacket());
|
| - }
|
| -
|
| - private:
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ThreadCheckVideoEncoder);
|
| -};
|
| -
|
| -class ThreadCheckDesktopCapturer : public webrtc::DesktopCapturer {
|
| - public:
|
| - ThreadCheckDesktopCapturer(
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| - : task_runner_(task_runner), callback_(nullptr) {}
|
| - ~ThreadCheckDesktopCapturer() override {
|
| - EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
|
| - }
|
| -
|
| - void Start(Callback* callback) override {
|
| - EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
|
| - EXPECT_FALSE(callback_);
|
| - EXPECT_TRUE(callback);
|
| -
|
| - callback_ = callback;
|
| - }
|
| -
|
| - void Capture(const webrtc::DesktopRegion& rect) override {
|
| - EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
|
| -
|
| - scoped_ptr<webrtc::DesktopFrame> frame(
|
| - new webrtc::BasicDesktopFrame(webrtc::DesktopSize(kWidth, kHeight)));
|
| - frame->mutable_updated_region()->SetRect(
|
| - webrtc::DesktopRect::MakeXYWH(0, 0, 10, 10));
|
| - callback_->OnCaptureCompleted(frame.release());
|
| - }
|
| -
|
| - private:
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| - webrtc::DesktopCapturer::Callback* callback_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ThreadCheckDesktopCapturer);
|
| -};
|
| -
|
| -class VideoFramePumpTest : public testing::Test {
|
| - public:
|
| - void SetUp() override;
|
| - void TearDown() override;
|
| -
|
| - void StartVideoFramePump(
|
| - scoped_ptr<webrtc::DesktopCapturer> capturer,
|
| - scoped_ptr<VideoEncoder> encoder);
|
| -
|
| - protected:
|
| - base::MessageLoop message_loop_;
|
| - base::RunLoop run_loop_;
|
| - scoped_refptr<AutoThreadTaskRunner> capture_task_runner_;
|
| - scoped_refptr<AutoThreadTaskRunner> encode_task_runner_;
|
| - scoped_refptr<AutoThreadTaskRunner> main_task_runner_;
|
| - scoped_ptr<VideoFramePump> pump_;
|
| -
|
| - MockVideoStub video_stub_;
|
| -};
|
| -
|
| -void VideoFramePumpTest::SetUp() {
|
| - main_task_runner_ = new AutoThreadTaskRunner(
|
| - message_loop_.task_runner(), run_loop_.QuitClosure());
|
| - capture_task_runner_ = AutoThread::Create("capture", main_task_runner_);
|
| - encode_task_runner_ = AutoThread::Create("encode", main_task_runner_);
|
| -}
|
| -
|
| -void VideoFramePumpTest::TearDown() {
|
| - pump_.reset();
|
| -
|
| - // Release the task runners, so that the test can quit.
|
| - capture_task_runner_ = nullptr;
|
| - encode_task_runner_ = nullptr;
|
| - main_task_runner_ = nullptr;
|
| -
|
| - // Run the MessageLoop until everything has torn down.
|
| - run_loop_.Run();
|
| -}
|
| -
|
| -// This test mocks capturer, encoder and network layer to simulate one capture
|
| -// cycle.
|
| -TEST_F(VideoFramePumpTest, StartAndStop) {
|
| - scoped_ptr<ThreadCheckDesktopCapturer> capturer(
|
| - new ThreadCheckDesktopCapturer(capture_task_runner_));
|
| - scoped_ptr<ThreadCheckVideoEncoder> encoder(
|
| - new ThreadCheckVideoEncoder(encode_task_runner_));
|
| -
|
| - base::RunLoop run_loop;
|
| -
|
| - // When the first ProcessVideoPacket is received we stop the VideoFramePump.
|
| - EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _))
|
| - .WillOnce(DoAll(
|
| - FinishSend(),
|
| - InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)))
|
| - .RetiresOnSaturation();
|
| -
|
| - // Start video frame capture.
|
| - pump_.reset(new VideoFramePump(encode_task_runner_,
|
| - make_scoped_ptr(new DesktopCapturerProxy(
|
| - capture_task_runner_, capturer.Pass())),
|
| - encoder.Pass(), &video_stub_));
|
| -
|
| - // Run MessageLoop until the first frame is received.
|
| - run_loop.Run();
|
| -}
|
| -
|
| -// Tests that the pump handles null frames returned by the capturer.
|
| -TEST_F(VideoFramePumpTest, NullFrame) {
|
| - scoped_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer);
|
| - scoped_ptr<MockVideoEncoder> encoder(new MockVideoEncoder);
|
| -
|
| - base::RunLoop run_loop;
|
| -
|
| - // Set up the capturer to return null frames.
|
| - capturer->set_frame_generator(base::Bind(&CreateNullFrame));
|
| -
|
| - // Expect that the VideoEncoder::Encode() method is never called.
|
| - EXPECT_CALL(*encoder, EncodePtr(_)).Times(0);
|
| -
|
| - // When the first ProcessVideoPacket is received we stop the VideoFramePump.
|
| - EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _))
|
| - .WillOnce(DoAll(FinishSend(),
|
| - InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)))
|
| - .RetiresOnSaturation();
|
| -
|
| - // Start video frame capture.
|
| - pump_.reset(new VideoFramePump(encode_task_runner_,
|
| - make_scoped_ptr(new DesktopCapturerProxy(
|
| - capture_task_runner_, capturer.Pass())),
|
| - encoder.Pass(), &video_stub_));
|
| -
|
| - // Run MessageLoop until the first frame is received..
|
| - run_loop.Run();
|
| -}
|
| -
|
| -// Tests how the pump handles unchanged frames returned by the capturer.
|
| -TEST_F(VideoFramePumpTest, UnchangedFrame) {
|
| - scoped_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer);
|
| - scoped_ptr<MockVideoEncoder> encoder(new MockVideoEncoder);
|
| -
|
| - base::RunLoop run_loop;
|
| -
|
| - // Set up the capturer to return unchanged frames.
|
| - capturer->set_frame_generator(base::Bind(&CreateUnchangedFrame));
|
| -
|
| - // Expect that the VideoEncoder::Encode() method is called.
|
| - EXPECT_CALL(*encoder, EncodePtr(_)).WillRepeatedly(Return(nullptr));
|
| -
|
| - // When the first ProcessVideoPacket is received we stop the VideoFramePump.
|
| - // TODO(wez): Verify that the generated packet has no content here.
|
| - EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _))
|
| - .WillOnce(DoAll(FinishSend(),
|
| - InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)))
|
| - .RetiresOnSaturation();
|
| -
|
| - // Start video frame capture.
|
| - pump_.reset(new VideoFramePump(encode_task_runner_,
|
| - make_scoped_ptr(new DesktopCapturerProxy(
|
| - capture_task_runner_, capturer.Pass())),
|
| - encoder.Pass(), &video_stub_));
|
| -
|
| - // Run MessageLoop until the first frame is received..
|
| - run_loop.Run();
|
| -}
|
| -
|
| -} // namespace remoting
|
|
|