Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: remoting/host/chromoting_host_context.cc

Issue 11419265: Revert 170360 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/chromoting_host_context.h ('k') | remoting/host/chromoting_host_context_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/chromoting_host_context.cc
===================================================================
--- remoting/host/chromoting_host_context.cc (revision 170590)
+++ remoting/host/chromoting_host_context.cc (working copy)
@@ -7,102 +7,108 @@
#include <string>
#include "base/bind.h"
-#include "remoting/base/auto_thread.h"
+#include "base/threading/thread.h"
+#include "remoting/base/auto_thread_task_runner.h"
#include "remoting/host/url_request_context.h"
namespace remoting {
ChromotingHostContext::ChromotingHostContext(
- AutoThreadTaskRunner* ui_task_runner)
- : ui_task_runner_(ui_task_runner) {
-#if defined(OS_WIN)
- // On Windows the AudioCapturer requires COM, so we run a single-threaded
- // apartment, which requires a UI thread.
- audio_task_runner_ = AutoThread::CreateWithLoopAndComInitTypes(
- "ChromotingAudioThread", ui_task_runner_, MessageLoop::TYPE_UI,
- AutoThread::COM_INIT_STA);
-#else // !defined(OS_WIN)
- audio_task_runner_ = AutoThread::CreateWithType(
- "ChromotingAudioThread", ui_task_runner_, MessageLoop::TYPE_IO);
-#endif // !defined(OS_WIN)
-
- video_capture_task_runner_ = AutoThread::Create(
- "ChromotingCaptureThread", ui_task_runner_);
- video_encode_task_runner_ = AutoThread::Create(
- "ChromotingEncodeThread", ui_task_runner_);
- file_task_runner_ = AutoThread::CreateWithType(
- "ChromotingFileThread", ui_task_runner_, MessageLoop::TYPE_IO);
- input_task_runner_ = AutoThread::CreateWithType(
- "ChromotingInputThread", ui_task_runner_, MessageLoop::TYPE_IO);
- network_task_runner_ = AutoThread::CreateWithType(
- "ChromotingNetworkThread", ui_task_runner_, MessageLoop::TYPE_IO);
-
- url_request_context_getter_ = new URLRequestContextGetter(
- ui_task_runner_, network_task_runner_);
+ scoped_refptr<AutoThreadTaskRunner> ui_task_runner)
+ : audio_thread_("ChromotingAudioThread"),
+ video_capture_thread_("ChromotingCaptureThread"),
+ video_encode_thread_("ChromotingEncodeThread"),
+ file_thread_("ChromotingFileIOThread"),
+ input_thread_("ChromotingInputThread"),
+ network_thread_("ChromotingNetworkThread"),
+ ui_task_runner_(ui_task_runner) {
}
ChromotingHostContext::~ChromotingHostContext() {
- DCHECK(ui_task_runner_->BelongsToCurrentThread());
}
-scoped_ptr<ChromotingHostContext> ChromotingHostContext::Create(
- scoped_refptr<AutoThreadTaskRunner> ui_task_runner) {
- DCHECK(ui_task_runner->BelongsToCurrentThread());
+bool ChromotingHostContext::Start() {
+ // Start all the threads.
+ base::Thread::Options io_thread_options(MessageLoop::TYPE_IO, 0);
- scoped_ptr<ChromotingHostContext> context(
- new ChromotingHostContext(ui_task_runner));
- if (!context->audio_task_runner_ ||
- !context->video_capture_task_runner_ ||
- !context->video_encode_task_runner_ ||
- !context->file_task_runner_ ||
- !context->input_task_runner_ ||
- !context->network_task_runner_ ||
- !context->url_request_context_getter_) {
- context.reset();
- }
+ bool started = video_capture_thread_.Start() && video_encode_thread_.Start();
- return context.Pass();
+#if defined(OS_WIN)
+ // On Windows audio capturer needs to run on a UI thread that has COM
+ // initialized.
+ audio_thread_.init_com_with_mta(false);
+ started = started && audio_thread_.Start();
+#else // defined(OS_WIN)
+ started = started && audio_thread_.StartWithOptions(io_thread_options);
+#endif // !defined(OS_WIN)
+
+ started = started &&
+ file_thread_.StartWithOptions(io_thread_options) &&
+ input_thread_.StartWithOptions(io_thread_options) &&
+ network_thread_.StartWithOptions(io_thread_options);
+ if (!started)
+ return false;
+
+ // Wrap worker threads with |AutoThreadTaskRunner| and have them reference
+ // the main thread via |ui_task_runner_|, to ensure that it remain active to
+ // Stop() them when no references remain.
+ audio_task_runner_ =
+ new AutoThreadTaskRunner(audio_thread_.message_loop_proxy(),
+ ui_task_runner_);
+ video_capture_task_runner_ =
+ new AutoThreadTaskRunner(video_capture_thread_.message_loop_proxy(),
+ ui_task_runner_);
+ video_encode_task_runner_ =
+ new AutoThreadTaskRunner(video_encode_thread_.message_loop_proxy(),
+ ui_task_runner_);
+ file_task_runner_ =
+ new AutoThreadTaskRunner(file_thread_.message_loop_proxy(),
+ ui_task_runner_);
+ input_task_runner_ =
+ new AutoThreadTaskRunner(input_thread_.message_loop_proxy(),
+ ui_task_runner_);
+ network_task_runner_ =
+ new AutoThreadTaskRunner(network_thread_.message_loop_proxy(),
+ ui_task_runner_);
+
+ url_request_context_getter_ = new URLRequestContextGetter(
+ ui_task_runner(), network_task_runner());
+ return true;
}
-scoped_refptr<AutoThreadTaskRunner>
-ChromotingHostContext::audio_task_runner() {
+base::SingleThreadTaskRunner* ChromotingHostContext::audio_task_runner() {
return audio_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
+base::SingleThreadTaskRunner*
ChromotingHostContext::video_capture_task_runner() {
- DCHECK(ui_task_runner_->BelongsToCurrentThread());
return video_capture_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
+base::SingleThreadTaskRunner*
ChromotingHostContext::video_encode_task_runner() {
- DCHECK(ui_task_runner_->BelongsToCurrentThread());
return video_encode_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
-ChromotingHostContext::file_task_runner() {
+base::SingleThreadTaskRunner* ChromotingHostContext::file_task_runner() {
return file_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
-ChromotingHostContext::input_task_runner() {
+base::SingleThreadTaskRunner* ChromotingHostContext::input_task_runner() {
return input_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
-ChromotingHostContext::network_task_runner() {
+base::SingleThreadTaskRunner* ChromotingHostContext::network_task_runner() {
return network_task_runner_;
}
-scoped_refptr<AutoThreadTaskRunner>
-ChromotingHostContext::ui_task_runner() {
+base::SingleThreadTaskRunner* ChromotingHostContext::ui_task_runner() {
return ui_task_runner_;
}
-scoped_refptr<net::URLRequestContextGetter>
+const scoped_refptr<net::URLRequestContextGetter>&
ChromotingHostContext::url_request_context_getter() {
+ DCHECK(url_request_context_getter_.get());
return url_request_context_getter_;
}
« no previous file with comments | « remoting/host/chromoting_host_context.h ('k') | remoting/host/chromoting_host_context_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698