Commit cec4d7ab authored by sergeyu@chromium.org's avatar sergeyu@chromium.org

Add file thread in MessageHostContext.

Review URL: https://chromiumcodereview.appspot.com/9956148

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132544 0039d316-1c4b-4281-b951-d872f2087c98
parent 715ffe49
...@@ -13,12 +13,11 @@ ...@@ -13,12 +13,11 @@
namespace remoting { namespace remoting {
ChromotingHostContext::ChromotingHostContext( ChromotingHostContext::ChromotingHostContext(
base::MessageLoopProxy* io_message_loop,
base::MessageLoopProxy* ui_message_loop) base::MessageLoopProxy* ui_message_loop)
: main_thread_("ChromotingMainThread"), : main_thread_("ChromotingMainThread"),
encode_thread_("ChromotingEncodeThread"), encode_thread_("ChromotingEncodeThread"),
desktop_thread_("ChromotingDesktopThread"), desktop_thread_("ChromotingDesktopThread"),
io_message_loop_(io_message_loop), file_thread_("ChromotingFileIOThread"),
ui_message_loop_(ui_message_loop) { ui_message_loop_(ui_message_loop) {
} }
...@@ -28,21 +27,15 @@ ChromotingHostContext::~ChromotingHostContext() { ...@@ -28,21 +27,15 @@ ChromotingHostContext::~ChromotingHostContext() {
bool ChromotingHostContext::Start() { bool ChromotingHostContext::Start() {
// Start all the threads. // Start all the threads.
return main_thread_.Start() && encode_thread_.Start() && return main_thread_.Start() && encode_thread_.Start() &&
jingle_thread_.Start() && desktop_thread_.Start(); jingle_thread_.Start() && desktop_thread_.Start() &&
file_thread_.StartWithOptions(
base::Thread::Options(MessageLoop::TYPE_IO, 0));
} }
JingleThread* ChromotingHostContext::jingle_thread() { JingleThread* ChromotingHostContext::jingle_thread() {
return &jingle_thread_; return &jingle_thread_;
} }
base::MessageLoopProxy* ChromotingHostContext::io_message_loop() {
return io_message_loop_;
}
base::MessageLoopProxy* ChromotingHostContext::ui_message_loop() {
return ui_message_loop_;
}
MessageLoop* ChromotingHostContext::main_message_loop() { MessageLoop* ChromotingHostContext::main_message_loop() {
return main_thread_.message_loop(); return main_thread_.message_loop();
} }
...@@ -59,4 +52,12 @@ MessageLoop* ChromotingHostContext::desktop_message_loop() { ...@@ -59,4 +52,12 @@ MessageLoop* ChromotingHostContext::desktop_message_loop() {
return desktop_thread_.message_loop(); return desktop_thread_.message_loop();
} }
base::MessageLoopProxy* ChromotingHostContext::ui_message_loop() {
return ui_message_loop_;
}
MessageLoop* ChromotingHostContext::file_message_loop() {
return file_thread_.message_loop();
}
} // namespace remoting } // namespace remoting
...@@ -19,8 +19,7 @@ namespace remoting { ...@@ -19,8 +19,7 @@ namespace remoting {
class ChromotingHostContext { class ChromotingHostContext {
public: public:
// Create a context. // Create a context.
ChromotingHostContext(base::MessageLoopProxy* io_message_loop, ChromotingHostContext(base::MessageLoopProxy* ui_message_loop);
base::MessageLoopProxy* ui_message_loop);
virtual ~ChromotingHostContext(); virtual ~ChromotingHostContext();
// TODO(ajwong): Move the Start method out of this class. Then // TODO(ajwong): Move the Start method out of this class. Then
...@@ -32,12 +31,13 @@ class ChromotingHostContext { ...@@ -32,12 +31,13 @@ class ChromotingHostContext {
virtual JingleThread* jingle_thread(); virtual JingleThread* jingle_thread();
virtual base::MessageLoopProxy* io_message_loop();
virtual base::MessageLoopProxy* ui_message_loop();
virtual MessageLoop* main_message_loop(); virtual MessageLoop* main_message_loop();
virtual MessageLoop* encode_message_loop(); virtual MessageLoop* encode_message_loop();
virtual base::MessageLoopProxy* network_message_loop(); virtual base::MessageLoopProxy* network_message_loop();
virtual MessageLoop* desktop_message_loop(); virtual MessageLoop* desktop_message_loop();
virtual base::MessageLoopProxy* ui_message_loop();
virtual MessageLoop* file_message_loop();
private: private:
FRIEND_TEST_ALL_PREFIXES(ChromotingHostContextTest, StartAndStop); FRIEND_TEST_ALL_PREFIXES(ChromotingHostContextTest, StartAndStop);
...@@ -45,7 +45,8 @@ class ChromotingHostContext { ...@@ -45,7 +45,8 @@ class ChromotingHostContext {
// A thread that hosts all network operations. // A thread that hosts all network operations.
JingleThread jingle_thread_; JingleThread jingle_thread_;
// A thread that hosts ChromotingHost and performs rate control. // TODO(sergeyu): The "main" thread is used just by the
// capturer. Consider renaming it.
base::Thread main_thread_; base::Thread main_thread_;
// A thread that hosts all encode operations. // A thread that hosts all encode operations.
...@@ -55,7 +56,9 @@ class ChromotingHostContext { ...@@ -55,7 +56,9 @@ class ChromotingHostContext {
// This is NOT a Chrome-style UI thread. // This is NOT a Chrome-style UI thread.
base::Thread desktop_thread_; base::Thread desktop_thread_;
scoped_refptr<base::MessageLoopProxy> io_message_loop_; // Thread for blocking IO operations.
base::Thread file_thread_;
scoped_refptr<base::MessageLoopProxy> ui_message_loop_; scoped_refptr<base::MessageLoopProxy> ui_message_loop_;
DISALLOW_COPY_AND_ASSIGN(ChromotingHostContext); DISALLOW_COPY_AND_ASSIGN(ChromotingHostContext);
......
...@@ -13,7 +13,7 @@ namespace remoting { ...@@ -13,7 +13,7 @@ namespace remoting {
// operates properly and all threads and message loops are valid. // operates properly and all threads and message loops are valid.
TEST(ChromotingHostContextTest, StartAndStop) { TEST(ChromotingHostContextTest, StartAndStop) {
MessageLoop message_loop; MessageLoop message_loop;
ChromotingHostContext context(NULL, base::MessageLoopProxy::current()); ChromotingHostContext context(base::MessageLoopProxy::current());
context.Start(); context.Start();
EXPECT_TRUE(context.jingle_thread()); EXPECT_TRUE(context.jingle_thread());
......
...@@ -52,7 +52,7 @@ scoped_ptr<DesktopEnvironment> DesktopEnvironment::CreateForService( ...@@ -52,7 +52,7 @@ scoped_ptr<DesktopEnvironment> DesktopEnvironment::CreateForService(
#if defined(OS_WIN) #if defined(OS_WIN)
event_executor.reset(new SessionEventExecutorWin( event_executor.reset(new SessionEventExecutorWin(
context->desktop_message_loop(), context->desktop_message_loop(),
context->io_message_loop(), context->file_message_loop()->message_loop_proxy(),
event_executor.Pass())); event_executor.Pass()));
#endif #endif
......
...@@ -52,7 +52,7 @@ scoped_ptr<LocalInputMonitor> LocalInputMonitor::Create() { ...@@ -52,7 +52,7 @@ scoped_ptr<LocalInputMonitor> LocalInputMonitor::Create() {
} }
MockChromotingHostContext::MockChromotingHostContext() MockChromotingHostContext::MockChromotingHostContext()
: ChromotingHostContext(NULL, base::MessageLoopProxy::current()) { : ChromotingHostContext(base::MessageLoopProxy::current()) {
} }
MockChromotingHostContext::~MockChromotingHostContext() {} MockChromotingHostContext::~MockChromotingHostContext() {}
......
...@@ -134,8 +134,7 @@ bool HostNPScriptObject::Init() { ...@@ -134,8 +134,7 @@ bool HostNPScriptObject::Init() {
DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread()); DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread());
VLOG(2) << "Init"; VLOG(2) << "Init";
host_context_.reset(new ChromotingHostContext(NULL, host_context_.reset(new ChromotingHostContext(plugin_message_loop_proxy_));
plugin_message_loop_proxy_));
if (!host_context_->Start()) { if (!host_context_->Start()) {
host_context_.reset(); host_context_.reset();
return false; return false;
......
...@@ -77,15 +77,10 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -77,15 +77,10 @@ class HostProcess : public OAuthClient::Delegate {
public: public:
HostProcess() HostProcess()
: message_loop_(MessageLoop::TYPE_UI), : message_loop_(MessageLoop::TYPE_UI),
file_io_thread_("FileIO"),
allow_nat_traversal_(true), allow_nat_traversal_(true),
restarting_(false) { restarting_(false) {
file_io_thread_.StartWithOptions( context_.reset(
base::Thread::Options(MessageLoop::TYPE_IO, 0)); new ChromotingHostContext(message_loop_.message_loop_proxy()));
context_.reset(new ChromotingHostContext(
file_io_thread_.message_loop_proxy(),
message_loop_.message_loop_proxy()));
context_->Start(); context_->Start();
network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
} }
...@@ -113,7 +108,7 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -113,7 +108,7 @@ class HostProcess : public OAuthClient::Delegate {
// The auth tokens can't be updated once the host is running, so we don't // The auth tokens can't be updated once the host is running, so we don't
// need to check the pending state, but it's a required parameter. // need to check the pending state, but it's a required parameter.
bool tokens_pending; bool tokens_pending;
if (LoadConfig(file_io_thread_.message_loop_proxy(), &tokens_pending)) { if (LoadConfig(&tokens_pending)) {
context_->network_message_loop()->PostTask( context_->network_message_loop()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&HostProcess::CreateAuthenticatorFactory, base::Bind(&HostProcess::CreateAuthenticatorFactory,
...@@ -140,7 +135,7 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -140,7 +135,7 @@ class HostProcess : public OAuthClient::Delegate {
int Run() { int Run() {
bool tokens_pending = false; bool tokens_pending = false;
if (!LoadConfig(file_io_thread_.message_loop_proxy(), &tokens_pending)) { if (!LoadConfig(&tokens_pending)) {
return kInvalidHostConfigurationExitCode; return kInvalidHostConfigurationExitCode;
} }
if (tokens_pending) { if (tokens_pending) {
...@@ -157,7 +152,7 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -157,7 +152,7 @@ class HostProcess : public OAuthClient::Delegate {
} }
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
file_io_thread_.message_loop_proxy()->PostTask( context_->file_message_loop()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&HostProcess::ListenForConfigChanges, base::Bind(&HostProcess::ListenForConfigChanges,
base::Unretained(this))); base::Unretained(this)));
...@@ -192,14 +187,14 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -192,14 +187,14 @@ class HostProcess : public OAuthClient::Delegate {
private: private:
void StartWatchingNatPolicy() { void StartWatchingNatPolicy() {
nat_policy_.reset( nat_policy_.reset(
policy_hack::NatPolicy::Create(file_io_thread_.message_loop_proxy())); policy_hack::NatPolicy::Create(
context_->file_message_loop()->message_loop_proxy()));
nat_policy_->StartWatching( nat_policy_->StartWatching(
base::Bind(&HostProcess::OnNatPolicyUpdate, base::Unretained(this))); base::Bind(&HostProcess::OnNatPolicyUpdate, base::Unretained(this)));
} }
// Read Host config from disk, returning true if successful. // Read Host config from disk, returning true if successful.
bool LoadConfig(base::MessageLoopProxy* io_message_loop, bool LoadConfig(bool* tokens_pending) {
bool* tokens_pending) {
JsonHostConfig host_config(host_config_path_); JsonHostConfig host_config(host_config_path_);
JsonHostConfig auth_config(auth_config_path_); JsonHostConfig auth_config(auth_config_path_);
...@@ -343,7 +338,6 @@ class HostProcess : public OAuthClient::Delegate { ...@@ -343,7 +338,6 @@ class HostProcess : public OAuthClient::Delegate {
} }
MessageLoop message_loop_; MessageLoop message_loop_;
base::Thread file_io_thread_;
scoped_ptr<ChromotingHostContext> context_; scoped_ptr<ChromotingHostContext> context_;
scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
......
...@@ -93,12 +93,10 @@ class SimpleHost { ...@@ -93,12 +93,10 @@ class SimpleHost {
public: public:
SimpleHost() SimpleHost()
: message_loop_(MessageLoop::TYPE_UI), : message_loop_(MessageLoop::TYPE_UI),
file_io_thread_("FileIO"), context_(message_loop_.message_loop_proxy()),
context_(NULL, message_loop_.message_loop_proxy()),
fake_(false), fake_(false),
is_it2me_(false) { is_it2me_(false) {
context_.Start(); context_.Start();
file_io_thread_.Start();
network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
} }
...@@ -263,7 +261,6 @@ class SimpleHost { ...@@ -263,7 +261,6 @@ class SimpleHost {
} }
MessageLoop message_loop_; MessageLoop message_loop_;
base::Thread file_io_thread_;
ChromotingHostContext context_; ChromotingHostContext context_;
scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment