Index: remoting/host/screen_recorder.cc |
diff --git a/remoting/host/screen_recorder.cc b/remoting/host/screen_recorder.cc |
index e7b414c9afbe0d909bfd7806ad10bb00fbdb1bc3..20b305a9de9f5e541a71ceb303fcb2bc2d825e05 100644 |
--- a/remoting/host/screen_recorder.cc |
+++ b/remoting/host/screen_recorder.cc |
@@ -32,14 +32,14 @@ namespace remoting { |
static const int kMaxRecordings = 2; |
ScreenRecorder::ScreenRecorder( |
- MessageLoop* capture_loop, |
- MessageLoop* encode_loop, |
- base::MessageLoopProxy* network_loop, |
+ scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, |
Capturer* capturer, |
Encoder* encoder) |
- : capture_loop_(capture_loop), |
- encode_loop_(encode_loop), |
- network_loop_(network_loop), |
+ : capture_task_runner_(capture_task_runner), |
+ encode_task_runner_(encode_task_runner), |
+ network_task_runner_(network_task_runner), |
capturer_(capturer), |
encoder_(encoder), |
network_stopped_(false), |
@@ -48,21 +48,21 @@ ScreenRecorder::ScreenRecorder( |
recordings_(0), |
frame_skipped_(false), |
sequence_number_(0) { |
- DCHECK(capture_loop_); |
- DCHECK(encode_loop_); |
- DCHECK(network_loop_); |
+ DCHECK(capture_task_runner_); |
+ DCHECK(encode_task_runner_); |
+ DCHECK(network_task_runner_); |
} |
// Public methods -------------------------------------------------------------- |
void ScreenRecorder::Start() { |
- capture_loop_->PostTask( |
+ capture_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoStart, this)); |
} |
void ScreenRecorder::Stop(const base::Closure& done_task) { |
- if (MessageLoop::current() != capture_loop_) { |
- capture_loop_->PostTask(FROM_HERE, base::Bind( |
+ if (!capture_task_runner_->BelongsToCurrentThread()) { |
+ capture_task_runner_->PostTask(FROM_HERE, base::Bind( |
&ScreenRecorder::Stop, this, done_task)); |
return; |
} |
@@ -72,20 +72,20 @@ void ScreenRecorder::Stop(const base::Closure& done_task) { |
capturer()->Stop(); |
capture_timer_.reset(); |
- network_loop_->PostTask(FROM_HERE, base::Bind( |
+ network_task_runner_->PostTask(FROM_HERE, base::Bind( |
&ScreenRecorder::DoStopOnNetworkThread, this, done_task)); |
} |
void ScreenRecorder::AddConnection(ConnectionToClient* connection) { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
connections_.push_back(connection); |
- capture_loop_->PostTask( |
+ capture_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoInvalidateFullScreen, this)); |
} |
void ScreenRecorder::RemoveConnection(ConnectionToClient* connection) { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
ConnectionToClientList::iterator it = |
std::find(connections_.begin(), connections_.end(), connection); |
@@ -95,14 +95,14 @@ void ScreenRecorder::RemoveConnection(ConnectionToClient* connection) { |
} |
void ScreenRecorder::RemoveAllConnections() { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
connections_.clear(); |
} |
void ScreenRecorder::UpdateSequenceNumber(int64 sequence_number) { |
// Sequence number is used and written only on the capture thread. |
- if (MessageLoop::current() != capture_loop_) { |
- capture_loop_->PostTask( |
+ if (!capture_task_runner_->BelongsToCurrentThread()) { |
+ capture_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::UpdateSequenceNumber, |
this, sequence_number)); |
return; |
@@ -117,26 +117,26 @@ ScreenRecorder::~ScreenRecorder() { |
} |
Capturer* ScreenRecorder::capturer() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
DCHECK(capturer_); |
return capturer_; |
} |
Encoder* ScreenRecorder::encoder() { |
- DCHECK_EQ(encode_loop_, MessageLoop::current()); |
+ DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
DCHECK(encoder_.get()); |
return encoder_.get(); |
} |
bool ScreenRecorder::is_recording() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
return capture_timer_.get() != NULL; |
} |
// Capturer thread ------------------------------------------------------------- |
void ScreenRecorder::DoStart() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
if (is_recording()) { |
NOTREACHED() << "Record session already started."; |
@@ -153,7 +153,7 @@ void ScreenRecorder::DoStart() { |
} |
void ScreenRecorder::StartCaptureTimer() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
capture_timer_->Start(FROM_HERE, |
scheduler_.NextCaptureDelay(), |
@@ -162,7 +162,7 @@ void ScreenRecorder::StartCaptureTimer() { |
} |
void ScreenRecorder::DoCapture() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ 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 |
// end of an encode operation. |
@@ -193,7 +193,7 @@ void ScreenRecorder::DoCapture() { |
void ScreenRecorder::CaptureDoneCallback( |
scoped_refptr<CaptureData> capture_data) { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
if (!is_recording()) |
return; |
@@ -213,24 +213,24 @@ void ScreenRecorder::CaptureDoneCallback( |
capture_data->set_client_sequence_number(sequence_number_); |
} |
- encode_loop_->PostTask( |
+ encode_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoEncode, this, capture_data)); |
} |
void ScreenRecorder::CursorShapeChangedCallback( |
scoped_ptr<protocol::CursorShapeInfo> cursor_shape) { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
if (!is_recording()) |
return; |
- network_loop_->PostTask( |
+ network_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoSendCursorShape, this, |
base::Passed(cursor_shape.Pass()))); |
} |
void ScreenRecorder::DoFinishOneRecording() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
if (!is_recording()) |
return; |
@@ -247,7 +247,7 @@ void ScreenRecorder::DoFinishOneRecording() { |
} |
void ScreenRecorder::DoInvalidateFullScreen() { |
- DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
capturer_->InvalidateFullScreen(); |
} |
@@ -255,7 +255,7 @@ void ScreenRecorder::DoInvalidateFullScreen() { |
// Network thread -------------------------------------------------------------- |
void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
if (network_stopped_ || connections_.empty()) |
return; |
@@ -271,17 +271,17 @@ void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) { |
} |
void ScreenRecorder::VideoFrameSentCallback() { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
if (network_stopped_) |
return; |
- capture_loop_->PostTask( |
+ capture_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoFinishOneRecording, this)); |
} |
void ScreenRecorder::DoStopOnNetworkThread(const base::Closure& done_task) { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
// There could be tasks on the network thread when this method is being |
// executed. By setting the flag we'll not post anymore tasks from network |
@@ -291,14 +291,14 @@ void ScreenRecorder::DoStopOnNetworkThread(const base::Closure& done_task) { |
// sequence. |
network_stopped_ = true; |
- encode_loop_->PostTask( |
+ encode_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoStopOnEncodeThread, |
this, done_task)); |
} |
void ScreenRecorder::DoSendCursorShape( |
scoped_ptr<protocol::CursorShapeInfo> cursor_shape) { |
- DCHECK(network_loop_->BelongsToCurrentThread()); |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
if (network_stopped_ || connections_.empty()) |
return; |
@@ -312,7 +312,7 @@ void ScreenRecorder::DoSendCursorShape( |
void ScreenRecorder::DoEncode( |
scoped_refptr<CaptureData> capture_data) { |
- DCHECK_EQ(encode_loop_, MessageLoop::current()); |
+ DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
if (encoder_stopped_) |
return; |
@@ -322,7 +322,7 @@ void ScreenRecorder::DoEncode( |
// Send an empty video packet to keep network active. |
scoped_ptr<VideoPacket> packet(new VideoPacket()); |
packet->set_flags(VideoPacket::LAST_PARTITION); |
- network_loop_->PostTask( |
+ network_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, |
this, base::Passed(packet.Pass()))); |
return; |
@@ -335,19 +335,19 @@ void ScreenRecorder::DoEncode( |
} |
void ScreenRecorder::DoStopOnEncodeThread(const base::Closure& done_task) { |
- DCHECK_EQ(encode_loop_, MessageLoop::current()); |
+ DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
encoder_stopped_ = true; |
// When this method is being executed there are no more tasks on encode thread |
// for this object. We can then post a task to capture thread to finish the |
// stop sequence. |
- capture_loop_->PostTask(FROM_HERE, done_task); |
+ capture_task_runner_->PostTask(FROM_HERE, done_task); |
} |
void ScreenRecorder::EncodedDataAvailableCallback( |
scoped_ptr<VideoPacket> packet) { |
- DCHECK_EQ(encode_loop_, MessageLoop::current()); |
+ DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
if (encoder_stopped_) |
return; |
@@ -361,7 +361,7 @@ void ScreenRecorder::EncodedDataAvailableCallback( |
scheduler_.RecordEncodeTime(encode_time); |
} |
- network_loop_->PostTask( |
+ network_task_runner_->PostTask( |
FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, this, |
base::Passed(packet.Pass()))); |
} |