summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--remoting/host/client_session.cc44
-rw-r--r--remoting/host/client_session.h6
-rw-r--r--remoting/host/video_scheduler.cc (renamed from remoting/host/screen_recorder.cc)92
-rw-r--r--remoting/host/video_scheduler.h (renamed from remoting/host/screen_recorder.h)24
-rw-r--r--remoting/host/video_scheduler_unittest.cc (renamed from remoting/host/screen_recorder_unittest.cc)43
-rw-r--r--remoting/remoting.gyp8
6 files changed, 111 insertions, 106 deletions
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index 6bc351f..df72e7f 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -18,8 +18,8 @@
#include "remoting/host/desktop_environment.h"
#include "remoting/host/desktop_environment_factory.h"
#include "remoting/host/event_executor.h"
-#include "remoting/host/screen_recorder.h"
#include "remoting/host/video_frame_capturer.h"
+#include "remoting/host/video_scheduler.h"
#include "remoting/proto/control.pb.h"
#include "remoting/proto/event.pb.h"
#include "remoting/protocol/client_stub.h"
@@ -126,14 +126,16 @@ void ClientSession::OnConnectionChannelsConnected(
DCHECK_EQ(connection_.get(), connection);
SetDisableInputs(false);
- // Create a ScreenRecorder, passing the message loops that it should run on.
- VideoEncoder* video_encoder =
+ // Create a VideoEncoder based on the session's video channel configuration.
+ scoped_ptr<VideoEncoder> video_encoder =
CreateVideoEncoder(connection_->session()->config());
- video_recorder_ = new ScreenRecorder(capture_task_runner_,
- encode_task_runner_,
- network_task_runner_,
- desktop_environment_->video_capturer(),
- video_encoder);
+
+ // Create a VideoScheduler to capture frames and feed them to the encoder.
+ video_scheduler_ = new VideoScheduler(capture_task_runner_,
+ encode_task_runner_,
+ network_task_runner_,
+ desktop_environment_->video_capturer(),
+ video_encoder.Pass());
++active_recorders_;
if (connection_->session()->config().is_audio_enabled()) {
@@ -149,8 +151,8 @@ void ClientSession::OnConnectionChannelsConnected(
}
// Start the session.
- video_recorder_->AddConnection(connection_.get());
- video_recorder_->Start();
+ video_scheduler_->AddConnection(connection_.get());
+ video_scheduler_->Start();
desktop_environment_->Start(CreateClipboardProxy());
event_handler_->OnSessionChannelsConnected(this);
@@ -183,8 +185,8 @@ void ClientSession::OnSequenceNumberUpdated(
DCHECK(CalledOnValidThread());
DCHECK_EQ(connection_.get(), connection);
- if (video_recorder_.get())
- video_recorder_->UpdateSequenceNumber(sequence_number);
+ if (video_scheduler_.get())
+ video_scheduler_->UpdateSequenceNumber(sequence_number);
event_handler_->OnSessionSequenceNumber(this, sequence_number);
}
@@ -218,10 +220,10 @@ void ClientSession::Stop(const base::Closure& done_task) {
audio_scheduler_ = NULL;
}
- if (video_recorder_.get()) {
- video_recorder_->RemoveConnection(connection_.get());
- video_recorder_->Stop(base::Bind(&ClientSession::OnRecorderStopped, this));
- video_recorder_ = NULL;
+ if (video_scheduler_.get()) {
+ video_scheduler_->RemoveConnection(connection_.get());
+ video_scheduler_->Stop(base::Bind(&ClientSession::OnRecorderStopped, this));
+ video_scheduler_ = NULL;
}
if (!active_recorders_) {
@@ -248,7 +250,7 @@ void ClientSession::SetDisableInputs(bool disable_inputs) {
ClientSession::~ClientSession() {
DCHECK(!active_recorders_);
DCHECK(audio_scheduler_.get() == NULL);
- DCHECK(video_recorder_.get() == NULL);
+ DCHECK(video_scheduler_.get() == NULL);
}
scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() {
@@ -280,18 +282,18 @@ void ClientSession::OnRecorderStopped() {
// TODO(sergeyu): Move this to SessionManager?
// static
-VideoEncoder* ClientSession::CreateVideoEncoder(
+scoped_ptr<VideoEncoder> ClientSession::CreateVideoEncoder(
const protocol::SessionConfig& config) {
const protocol::ChannelConfig& video_config = config.video_config();
if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
- return new remoting::VideoEncoderVerbatim();
+ return scoped_ptr<VideoEncoder>(new remoting::VideoEncoderVerbatim());
} else if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) {
- return new remoting::VideoEncoderVp8();
+ return scoped_ptr<VideoEncoder>(new remoting::VideoEncoderVp8());
}
NOTIMPLEMENTED();
- return NULL;
+ return scoped_ptr<VideoEncoder>(NULL);
}
// static
diff --git a/remoting/host/client_session.h b/remoting/host/client_session.h
index 126431d..7623cbf 100644
--- a/remoting/host/client_session.h
+++ b/remoting/host/client_session.h
@@ -36,9 +36,9 @@ class AudioScheduler;
struct ClientSessionTraits;
class DesktopEnvironment;
class DesktopEnvironmentFactory;
-class ScreenRecorder;
class VideoEncoder;
class VideoFrameCapturer;
+class VideoScheduler;
// A ClientSession keeps a reference to a connection to a client, and maintains
// per-client state.
@@ -163,7 +163,7 @@ class ClientSession
const protocol::SessionConfig& config);
// Creates a video encoder for the specified configuration.
- static VideoEncoder* CreateVideoEncoder(
+ static scoped_ptr<VideoEncoder> CreateVideoEncoder(
const protocol::SessionConfig& config);
EventHandler* event_handler_;
@@ -222,7 +222,7 @@ class ClientSession
// Schedulers for audio and video capture.
scoped_refptr<AudioScheduler> audio_scheduler_;
- scoped_refptr<ScreenRecorder> video_recorder_;
+ scoped_refptr<VideoScheduler> video_scheduler_;
// Number of screen recorders and audio schedulers that are currently being
// used or shutdown. Used to delay shutdown if one or more
diff --git a/remoting/host/screen_recorder.cc b/remoting/host/video_scheduler.cc
index d9588a1..2031ae1 100644
--- a/remoting/host/screen_recorder.cc
+++ b/remoting/host/video_scheduler.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "remoting/host/screen_recorder.h"
+#include "remoting/host/video_scheduler.h"
#include <algorithm>
@@ -32,17 +32,17 @@ namespace remoting {
// TODO(hclam): Move this value to CaptureScheduler.
static const int kMaxRecordings = 2;
-ScreenRecorder::ScreenRecorder(
+VideoScheduler::VideoScheduler(
scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
VideoFrameCapturer* capturer,
- VideoEncoder* encoder)
+ scoped_ptr<VideoEncoder> encoder)
: capture_task_runner_(capture_task_runner),
encode_task_runner_(encode_task_runner),
network_task_runner_(network_task_runner),
capturer_(capturer),
- encoder_(encoder),
+ encoder_(encoder.Pass()),
network_stopped_(false),
encoder_stopped_(false),
max_recordings_(kMaxRecordings),
@@ -56,15 +56,15 @@ ScreenRecorder::ScreenRecorder(
// Public methods --------------------------------------------------------------
-void ScreenRecorder::Start() {
+void VideoScheduler::Start() {
capture_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoStart, this));
+ FROM_HERE, base::Bind(&VideoScheduler::DoStart, this));
}
-void ScreenRecorder::Stop(const base::Closure& done_task) {
+void VideoScheduler::Stop(const base::Closure& done_task) {
if (!capture_task_runner_->BelongsToCurrentThread()) {
capture_task_runner_->PostTask(FROM_HERE, base::Bind(
- &ScreenRecorder::Stop, this, done_task));
+ &VideoScheduler::Stop, this, done_task));
return;
}
@@ -74,18 +74,18 @@ void ScreenRecorder::Stop(const base::Closure& done_task) {
capture_timer_.reset();
network_task_runner_->PostTask(FROM_HERE, base::Bind(
- &ScreenRecorder::DoStopOnNetworkThread, this, done_task));
+ &VideoScheduler::DoStopOnNetworkThread, this, done_task));
}
-void ScreenRecorder::AddConnection(ConnectionToClient* connection) {
+void VideoScheduler::AddConnection(ConnectionToClient* connection) {
DCHECK(network_task_runner_->BelongsToCurrentThread());
connections_.push_back(connection);
capture_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoInvalidateFullScreen, this));
+ FROM_HERE, base::Bind(&VideoScheduler::DoInvalidateFullScreen, this));
}
-void ScreenRecorder::RemoveConnection(ConnectionToClient* connection) {
+void VideoScheduler::RemoveConnection(ConnectionToClient* connection) {
DCHECK(network_task_runner_->BelongsToCurrentThread());
ConnectionToClientList::iterator it =
@@ -95,16 +95,16 @@ void ScreenRecorder::RemoveConnection(ConnectionToClient* connection) {
}
}
-void ScreenRecorder::RemoveAllConnections() {
+void VideoScheduler::RemoveAllConnections() {
DCHECK(network_task_runner_->BelongsToCurrentThread());
connections_.clear();
}
-void ScreenRecorder::UpdateSequenceNumber(int64 sequence_number) {
+void VideoScheduler::UpdateSequenceNumber(int64 sequence_number) {
// Sequence number is used and written only on the capture thread.
if (!capture_task_runner_->BelongsToCurrentThread()) {
capture_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::UpdateSequenceNumber,
+ FROM_HERE, base::Bind(&VideoScheduler::UpdateSequenceNumber,
this, sequence_number));
return;
}
@@ -114,29 +114,29 @@ void ScreenRecorder::UpdateSequenceNumber(int64 sequence_number) {
// Private methods -----------------------------------------------------------
-ScreenRecorder::~ScreenRecorder() {
+VideoScheduler::~VideoScheduler() {
}
-VideoFrameCapturer* ScreenRecorder::capturer() {
+VideoFrameCapturer* VideoScheduler::capturer() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
DCHECK(capturer_);
return capturer_;
}
-VideoEncoder* ScreenRecorder::encoder() {
+VideoEncoder* VideoScheduler::encoder() {
DCHECK(encode_task_runner_->BelongsToCurrentThread());
DCHECK(encoder_.get());
return encoder_.get();
}
-bool ScreenRecorder::is_recording() {
+bool VideoScheduler::is_recording() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
return capture_timer_.get() != NULL;
}
// Capturer thread -------------------------------------------------------------
-void ScreenRecorder::DoStart() {
+void VideoScheduler::DoStart() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
if (is_recording()) {
@@ -145,24 +145,24 @@ void ScreenRecorder::DoStart() {
}
capturer()->Start(
- base::Bind(&ScreenRecorder::CursorShapeChangedCallback, this));
+ base::Bind(&VideoScheduler::CursorShapeChangedCallback, this));
- capture_timer_.reset(new base::OneShotTimer<ScreenRecorder>());
+ capture_timer_.reset(new base::OneShotTimer<VideoScheduler>());
// Capture first frame immedately.
DoCapture();
}
-void ScreenRecorder::StartCaptureTimer() {
+void VideoScheduler::StartCaptureTimer() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
capture_timer_->Start(FROM_HERE,
scheduler_.NextCaptureDelay(),
this,
- &ScreenRecorder::DoCapture);
+ &VideoScheduler::DoCapture);
}
-void ScreenRecorder::DoCapture() {
+void VideoScheduler::DoCapture() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
// Make sure we have at most two oustanding recordings. We can simply return
// if we can't make a capture now, the next capture will be started by the
@@ -184,15 +184,15 @@ void ScreenRecorder::DoCapture() {
capture_timer_->Start(FROM_HERE,
scheduler_.NextCaptureDelay(),
this,
- &ScreenRecorder::DoCapture);
+ &VideoScheduler::DoCapture);
// And finally perform one capture.
capture_start_time_ = base::Time::Now();
capturer()->CaptureInvalidRegion(
- base::Bind(&ScreenRecorder::CaptureDoneCallback, this));
+ base::Bind(&VideoScheduler::CaptureDoneCallback, this));
}
-void ScreenRecorder::CaptureDoneCallback(
+void VideoScheduler::CaptureDoneCallback(
scoped_refptr<CaptureData> capture_data) {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
@@ -215,10 +215,10 @@ void ScreenRecorder::CaptureDoneCallback(
}
encode_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoEncode, this, capture_data));
+ FROM_HERE, base::Bind(&VideoScheduler::DoEncode, this, capture_data));
}
-void ScreenRecorder::CursorShapeChangedCallback(
+void VideoScheduler::CursorShapeChangedCallback(
scoped_ptr<protocol::CursorShapeInfo> cursor_shape) {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
@@ -226,11 +226,11 @@ void ScreenRecorder::CursorShapeChangedCallback(
return;
network_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoSendCursorShape, this,
+ FROM_HERE, base::Bind(&VideoScheduler::DoSendCursorShape, this,
base::Passed(cursor_shape.Pass())));
}
-void ScreenRecorder::DoFinishOneRecording() {
+void VideoScheduler::DoFinishOneRecording() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
if (!is_recording())
@@ -247,7 +247,7 @@ void ScreenRecorder::DoFinishOneRecording() {
DoCapture();
}
-void ScreenRecorder::DoInvalidateFullScreen() {
+void VideoScheduler::DoInvalidateFullScreen() {
DCHECK(capture_task_runner_->BelongsToCurrentThread());
SkRegion region;
@@ -258,7 +258,7 @@ void ScreenRecorder::DoInvalidateFullScreen() {
// Network thread --------------------------------------------------------------
-void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) {
+void VideoScheduler::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) {
DCHECK(network_task_runner_->BelongsToCurrentThread());
if (network_stopped_ || connections_.empty())
@@ -266,7 +266,7 @@ void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) {
base::Closure callback;
if ((packet->flags() & VideoPacket::LAST_PARTITION) != 0)
- callback = base::Bind(&ScreenRecorder::VideoFrameSentCallback, this);
+ callback = base::Bind(&VideoScheduler::VideoFrameSentCallback, this);
// TODO(sergeyu): Currently we send the data only to the first
// connection. Send it to all connections if necessary.
@@ -274,17 +274,17 @@ void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) {
packet.Pass(), callback);
}
-void ScreenRecorder::VideoFrameSentCallback() {
+void VideoScheduler::VideoFrameSentCallback() {
DCHECK(network_task_runner_->BelongsToCurrentThread());
if (network_stopped_)
return;
capture_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoFinishOneRecording, this));
+ FROM_HERE, base::Bind(&VideoScheduler::DoFinishOneRecording, this));
}
-void ScreenRecorder::DoStopOnNetworkThread(const base::Closure& done_task) {
+void VideoScheduler::DoStopOnNetworkThread(const base::Closure& done_task) {
DCHECK(network_task_runner_->BelongsToCurrentThread());
// There could be tasks on the network thread when this method is being
@@ -296,11 +296,11 @@ void ScreenRecorder::DoStopOnNetworkThread(const base::Closure& done_task) {
network_stopped_ = true;
encode_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoStopOnEncodeThread,
+ FROM_HERE, base::Bind(&VideoScheduler::DoStopOnEncodeThread,
this, done_task));
}
-void ScreenRecorder::DoSendCursorShape(
+void VideoScheduler::DoSendCursorShape(
scoped_ptr<protocol::CursorShapeInfo> cursor_shape) {
DCHECK(network_task_runner_->BelongsToCurrentThread());
@@ -314,7 +314,7 @@ void ScreenRecorder::DoSendCursorShape(
// Encoder thread --------------------------------------------------------------
-void ScreenRecorder::DoEncode(
+void VideoScheduler::DoEncode(
scoped_refptr<CaptureData> capture_data) {
DCHECK(encode_task_runner_->BelongsToCurrentThread());
@@ -327,7 +327,7 @@ void ScreenRecorder::DoEncode(
scoped_ptr<VideoPacket> packet(new VideoPacket());
packet->set_flags(VideoPacket::LAST_PARTITION);
network_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket,
+ FROM_HERE, base::Bind(&VideoScheduler::DoSendVideoPacket,
this, base::Passed(packet.Pass())));
return;
}
@@ -335,10 +335,10 @@ void ScreenRecorder::DoEncode(
encode_start_time_ = base::Time::Now();
encoder()->Encode(
capture_data, false,
- base::Bind(&ScreenRecorder::EncodedDataAvailableCallback, this));
+ base::Bind(&VideoScheduler::EncodedDataAvailableCallback, this));
}
-void ScreenRecorder::DoStopOnEncodeThread(const base::Closure& done_task) {
+void VideoScheduler::DoStopOnEncodeThread(const base::Closure& done_task) {
DCHECK(encode_task_runner_->BelongsToCurrentThread());
encoder_stopped_ = true;
@@ -349,7 +349,7 @@ void ScreenRecorder::DoStopOnEncodeThread(const base::Closure& done_task) {
capture_task_runner_->PostTask(FROM_HERE, done_task);
}
-void ScreenRecorder::EncodedDataAvailableCallback(
+void VideoScheduler::EncodedDataAvailableCallback(
scoped_ptr<VideoPacket> packet) {
DCHECK(encode_task_runner_->BelongsToCurrentThread());
@@ -366,7 +366,7 @@ void ScreenRecorder::EncodedDataAvailableCallback(
}
network_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, this,
+ FROM_HERE, base::Bind(&VideoScheduler::DoSendVideoPacket, this,
base::Passed(packet.Pass())));
}
diff --git a/remoting/host/screen_recorder.h b/remoting/host/video_scheduler.h
index 07028d3..5296253 100644
--- a/remoting/host/screen_recorder.h
+++ b/remoting/host/video_scheduler.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef REMOTING_HOST_SCREEN_RECORDER_H_
-#define REMOTING_HOST_SCREEN_RECORDER_H_
+#ifndef REMOTING_HOST_VIDEO_SCHEDULER_H_
+#define REMOTING_HOST_VIDEO_SCHEDULER_H_
#include <vector>
@@ -63,7 +63,7 @@ class CursorShapeInfo;
// | Time
// v
//
-// ScreenRecorder has the following responsibilities:
+// VideoScheduler has the following responsibilities:
// 1. Make sure capture and encode occurs no more frequently than |rate|.
// 2. Make sure there is at most one outstanding capture not being encoded.
// 3. Distribute tasks on three threads on a timely fashion to minimize latency.
@@ -73,16 +73,16 @@ class CursorShapeInfo;
// the capture thread by this object.
// |network_stopped_| - This state is to prevent activity on the network thread
// if set to false.
-class ScreenRecorder : public base::RefCountedThreadSafe<ScreenRecorder> {
+class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler> {
public:
- // Construct a ScreenRecorder. Message loops and threads are provided.
+ // Construct a VideoScheduler. Message loops and threads are provided.
// This object does not own capturer but owns encoder.
- ScreenRecorder(
+ VideoScheduler(
scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
VideoFrameCapturer* capturer,
- VideoEncoder* encoder);
+ scoped_ptr<VideoEncoder> encoder);
// Start recording.
void Start();
@@ -104,8 +104,8 @@ class ScreenRecorder : public base::RefCountedThreadSafe<ScreenRecorder> {
void UpdateSequenceNumber(int64 sequence_number);
private:
- friend class base::RefCountedThreadSafe<ScreenRecorder>;
- virtual ~ScreenRecorder();
+ friend class base::RefCountedThreadSafe<VideoScheduler>;
+ virtual ~VideoScheduler();
// Getters for capturer and encoder.
VideoFrameCapturer* capturer();
@@ -174,9 +174,9 @@ class ScreenRecorder : public base::RefCountedThreadSafe<ScreenRecorder> {
ConnectionToClientList connections_;
// Timer that calls DoCapture. Set to NULL when not recording.
- scoped_ptr<base::OneShotTimer<ScreenRecorder> > capture_timer_;
+ scoped_ptr<base::OneShotTimer<VideoScheduler> > capture_timer_;
- // Per-thread flags that are set when the ScreenRecorder is
+ // Per-thread flags that are set when the VideoScheduler is
// stopped. They must be used on the corresponding threads only.
bool network_stopped_;
bool encoder_stopped_;
@@ -203,7 +203,7 @@ class ScreenRecorder : public base::RefCountedThreadSafe<ScreenRecorder> {
// An object to schedule capturing.
CaptureScheduler scheduler_;
- DISALLOW_COPY_AND_ASSIGN(ScreenRecorder);
+ DISALLOW_COPY_AND_ASSIGN(VideoScheduler);
};
} // namespace remoting
diff --git a/remoting/host/screen_recorder_unittest.cc b/remoting/host/video_scheduler_unittest.cc
index 194db96..abaea18 100644
--- a/remoting/host/screen_recorder_unittest.cc
+++ b/remoting/host/video_scheduler_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "remoting/host/screen_recorder.h"
+#include "remoting/host/video_scheduler.h"
#include "base/bind.h"
#include "base/message_loop.h"
@@ -57,8 +57,8 @@ void QuitMessageLoop(MessageLoop* message_loop) {
message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure());
}
-ACTION_P2(StopScreenRecorder, recorder, task) {
- recorder->Stop(task);
+ACTION_P2(StopVideoScheduler, scheduler, task) {
+ scheduler->Stop(task);
}
} // namespace
@@ -87,13 +87,13 @@ MockVideoEncoder::MockVideoEncoder() {}
MockVideoEncoder::~MockVideoEncoder() {}
-class ScreenRecorderTest : public testing::Test {
+class VideoSchedulerTest : public testing::Test {
public:
- ScreenRecorderTest() {
+ VideoSchedulerTest() {
}
virtual void SetUp() OVERRIDE {
- // VideoFrameCapturer and VideoEncoder are owned by ScreenRecorder.
+ // VideoFrameCapturer and VideoEncoder are owned by VideoScheduler.
encoder_ = new MockVideoEncoder();
session_ = new MockSession();
@@ -103,9 +103,10 @@ class ScreenRecorderTest : public testing::Test {
connection_.reset(new MockConnectionToClient(session_, &host_stub_));
connection_->SetEventHandler(&handler_);
- record_ = new ScreenRecorder(
+ scheduler_ = new VideoScheduler(
message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(),
- message_loop_.message_loop_proxy(), &capturer_, encoder_);
+ message_loop_.message_loop_proxy(), &capturer_,
+ scoped_ptr<remoting::VideoEncoder>(encoder_));
}
virtual void TearDown() OVERRIDE {
@@ -117,26 +118,26 @@ class ScreenRecorderTest : public testing::Test {
protected:
MessageLoop message_loop_;
- scoped_refptr<ScreenRecorder> record_;
+ scoped_refptr<VideoScheduler> scheduler_;
MockConnectionToClientEventHandler handler_;
MockHostStub host_stub_;
MockSession* session_; // Owned by |connection_|.
scoped_ptr<MockConnectionToClient> connection_;
- // The following mock objects are owned by ScreenRecorder.
+ // The following mock objects are owned by VideoScheduler.
MockVideoFrameCapturer capturer_;
MockVideoEncoder* encoder_;
private:
- DISALLOW_COPY_AND_ASSIGN(ScreenRecorderTest);
+ DISALLOW_COPY_AND_ASSIGN(VideoSchedulerTest);
};
-// This test mocks capturer, encoder and network layer to simulate one recording
+// This test mocks capturer, encoder and network layer to simulate one capture
// cycle. When the first encoded packet is submitted to the network
-// ScreenRecorder is instructed to come to a complete stop. We expect the stop
+// VideoScheduler is instructed to come to a complete stop. We expect the stop
// sequence to be executed successfully.
-TEST_F(ScreenRecorderTest, StartAndStop) {
+TEST_F(VideoSchedulerTest, StartAndStop) {
SkRegion update_region(SkIRect::MakeXYWH(0, 0, 10, 10));
DataPlanes planes;
for (int i = 0; i < DataPlanes::kPlaneCount; ++i) {
@@ -172,11 +173,11 @@ TEST_F(ScreenRecorderTest, StartAndStop) {
.WillRepeatedly(FinishSend());
// For the first time when ProcessVideoPacket is received we stop the
- // ScreenRecorder.
+ // VideoScheduler.
EXPECT_CALL(video_stub, ProcessVideoPacketPtr(_, _))
.WillOnce(DoAll(
FinishSend(),
- StopScreenRecorder(record_,
+ StopVideoScheduler(scheduler_,
base::Bind(&QuitMessageLoop, &message_loop_))))
.RetiresOnSaturation();
@@ -184,16 +185,16 @@ TEST_F(ScreenRecorderTest, StartAndStop) {
.After(capturer_capture);
// Add the mock client connection to the session.
- record_->AddConnection(connection_.get());
+ scheduler_->AddConnection(connection_.get());
- // Start the recording.
- record_->Start();
+ // Start capturing.
+ scheduler_->Start();
message_loop_.Run();
}
-TEST_F(ScreenRecorderTest, StopWithoutStart) {
+TEST_F(VideoSchedulerTest, StopWithoutStart) {
EXPECT_CALL(capturer_, Stop());
- record_->Stop(base::Bind(&QuitMessageLoop, &message_loop_));
+ scheduler_->Stop(base::Bind(&QuitMessageLoop, &message_loop_));
message_loop_.Run();
}
diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp
index 6001629..a0b734e 100644
--- a/remoting/remoting.gyp
+++ b/remoting/remoting.gyp
@@ -1590,8 +1590,6 @@
'host/resizing_host_observer.h',
'host/sas_injector.h',
'host/sas_injector_win.cc',
- 'host/screen_recorder.cc',
- 'host/screen_recorder.h',
'host/server_log_entry.cc',
'host/server_log_entry.h',
'host/service_client.cc',
@@ -1618,6 +1616,8 @@
'host/video_frame_capturer_linux.cc',
'host/video_frame_capturer_mac.mm',
'host/video_frame_capturer_win.cc',
+ 'host/video_scheduler.cc',
+ 'host/video_scheduler.h',
'host/vlog_net_log.cc',
'host/vlog_net_log.h',
'host/win/desktop.cc',
@@ -2104,7 +2104,6 @@
'host/register_support_host_request_unittest.cc',
'host/remote_input_filter_unittest.cc',
'host/resizing_host_observer_unittest.cc',
- 'host/screen_recorder_unittest.cc',
'host/server_log_entry_unittest.cc',
'host/setup/oauth_helper_unittest.cc',
'host/setup/pin_validator_unittest.cc',
@@ -2112,6 +2111,9 @@
'host/video_frame_capturer_helper_unittest.cc',
'host/video_frame_capturer_mac_unittest.cc',
'host/video_frame_capturer_unittest.cc',
+ 'host/video_scheduler_unittest.cc',
+ 'host/win/launch_process_with_token.cc',
+ 'host/win/launch_process_with_token.h',
'host/win/worker_process_launcher.cc',
'host/win/worker_process_launcher.h',
'host/win/worker_process_launcher_unittest.cc',