Chromium Code Reviews

Unified Diff: remoting/host/session_manager.cc

Issue 2829018: Fix thread usage in chromoting host (Closed)
Patch Set: removed useless test Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « remoting/host/session_manager.h ('k') | remoting/host/simple_host_process.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/session_manager.cc
diff --git a/remoting/host/session_manager.cc b/remoting/host/session_manager.cc
index cd6fc4774b7d4c64fdc296ad97e4afc04073374d..1e044820c142cb75aab0d00d08a3f6c188e02334 100644
--- a/remoting/host/session_manager.cc
+++ b/remoting/host/session_manager.cc
@@ -139,6 +139,12 @@ void SessionManager::RemoveClient(scoped_refptr<ClientConnection> client) {
NewRunnableMethod(this, &SessionManager::DoRemoveClient, client));
}
+void SessionManager::RemoveAllClients() {
+ network_loop_->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this, &SessionManager::DoRemoveAllClients));
+}
+
void SessionManager::DoCapture() {
DCHECK_EQ(capture_loop_, MessageLoop::current());
@@ -166,8 +172,7 @@ void SessionManager::DoCapture() {
ScheduleNextCapture();
// And finally perform one capture.
- DCHECK(capturer_.get());
- capturer_->CaptureDirtyRects(
+ capturer()->CaptureDirtyRects(
NewRunnableMethod(this, &SessionManager::CaptureDoneTask));
}
@@ -190,13 +195,11 @@ void SessionManager::DoEncode(const CaptureData *capture_data) {
DCHECK_EQ(encode_loop_, MessageLoop::current());
- DCHECK(encoder_.get());
-
// TODO(hclam): Enable |force_refresh| if a new client was
// added.
- encoder_->SetSize(capture_data->width_, capture_data->height_);
- encoder_->SetPixelFormat(capture_data->pixel_format_);
- encoder_->Encode(
+ encoder()->SetSize(capture_data->width_, capture_data->height_);
+ encoder()->SetPixelFormat(capture_data->pixel_format_);
+ encoder()->Encode(
capture_data->dirty_rects_,
capture_data->data_,
capture_data->data_strides_,
@@ -239,7 +242,7 @@ void SessionManager::DoGetInitInfo(scoped_refptr<ClientConnection> client) {
network_loop_->PostTask(
FROM_HERE,
NewRunnableMethod(this, &SessionManager::DoSendInit, client,
- capturer_->GetWidth(), capturer_->GetHeight()));
+ capturer()->GetWidth(), capturer()->GetHeight()));
// And then add the client to the list so it can receive update stream.
// It is important we do so in such order or the client will receive
@@ -288,8 +291,16 @@ void SessionManager::DoRemoveClient(scoped_refptr<ClientConnection> client) {
// TODO(hclam): Is it correct to do to a scoped_refptr?
ClientConnectionList::iterator it
= std::find(clients_.begin(), clients_.end(), client);
- if (it != clients_.end())
+ if (it != clients_.end()) {
clients_.erase(it);
+ }
+}
+
+void SessionManager::DoRemoveAllClients() {
+ DCHECK_EQ(network_loop_, MessageLoop::current());
+
+ // Clear the list of clients.
+ clients_.clear();
}
void SessionManager::DoRateControl() {
@@ -354,12 +365,12 @@ void SessionManager::CaptureDoneTask() {
scoped_ptr<CaptureData> data(new CaptureData);
// Save results of the capture.
- capturer_->GetData(data->data_);
- capturer_->GetDataStride(data->data_strides_);
- capturer_->GetDirtyRects(&data->dirty_rects_);
- data->pixel_format_ = capturer_->GetPixelFormat();
- data->width_ = capturer_->GetWidth();
- data->height_ = capturer_->GetHeight();
+ capturer()->GetData(data->data_);
+ capturer()->GetDataStride(data->data_strides_);
+ capturer()->GetDirtyRects(&data->dirty_rects_);
+ data->pixel_format_ = capturer()->GetPixelFormat();
+ data->width_ = capturer()->GetWidth();
+ data->height_ = capturer()->GetHeight();
encode_loop_->PostTask(
FROM_HERE,
@@ -384,10 +395,20 @@ void SessionManager::EncodeDataAvailableTask(
data,
state));
- if (state == Encoder::EncodingEnded) {
+ if (state & Encoder::EncodingEnded) {
capture_loop_->PostTask(
FROM_HERE, NewRunnableMethod(this, &SessionManager::DoFinishEncode));
}
}
+Capturer* SessionManager::capturer() {
+ DCHECK_EQ(capture_loop_, MessageLoop::current());
+ return capturer_.get();
+}
+
+Encoder* SessionManager::encoder() {
+ DCHECK_EQ(encode_loop_, MessageLoop::current());
+ return encoder_.get();
+}
+
} // namespace remoting
« no previous file with comments | « remoting/host/session_manager.h ('k') | remoting/host/simple_host_process.cc » ('j') | no next file with comments »

Powered by Google App Engine