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

Side by Side Diff: remoting/host/chromoting_host_context.cc

Issue 7633009: Use MessageLoopProxy for network message loop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 4 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/chromoting_host_context.h" 5 #include "remoting/host/chromoting_host_context.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/synchronization/waitable_event.h"
10 #include "base/threading/thread.h" 11 #include "base/threading/thread.h"
11 #include "remoting/jingle_glue/jingle_thread.h" 12 #include "remoting/jingle_glue/jingle_thread.h"
12 13
13 namespace remoting { 14 namespace remoting {
14 15
16 namespace {
17 void InitializeMessageLoopProxy(
18 scoped_refptr<base::MessageLoopProxy>* proxy,
19 base::WaitableEvent* done) {
20 *proxy = base::MessageLoopProxy::CreateForCurrentThread();
21 done->Signal();
22 }
23 } // namespace
24
15 ChromotingHostContext::ChromotingHostContext() 25 ChromotingHostContext::ChromotingHostContext()
16 : main_thread_("ChromotingMainThread"), 26 : main_thread_("ChromotingMainThread"),
17 encode_thread_("ChromotingEncodeThread"), 27 encode_thread_("ChromotingEncodeThread"),
18 desktop_thread_("ChromotingDesktopThread") { 28 desktop_thread_("ChromotingDesktopThread") {
19 } 29 }
20 30
21 ChromotingHostContext::~ChromotingHostContext() { 31 ChromotingHostContext::~ChromotingHostContext() {
22 } 32 }
23 33
24 void ChromotingHostContext::Start() { 34 void ChromotingHostContext::Start() {
25 // Start all the threads. 35 // Start all the threads.
26 main_thread_.Start(); 36 main_thread_.Start();
27 encode_thread_.Start(); 37 encode_thread_.Start();
28 jingle_thread_.Start(); 38 jingle_thread_.Start();
29 desktop_thread_.Start(); 39 desktop_thread_.Start();
40
41 // Initialize |network_message_loop_| on the network thread.
42 base::WaitableEvent proxy_event(true, false);
43 jingle_thread_.message_loop()->PostTask(FROM_HERE, base::Bind(
44 &InitializeMessageLoopProxy, &network_message_loop_, &proxy_event));
45 proxy_event.Wait();
Wez 2011/08/12 21:11:20 Again, use message_loop_proxy() here?
Sergey Ulanov 2011/08/12 21:24:18 Added message_loop_proxy() in JingleThread.
30 } 46 }
31 47
32 void ChromotingHostContext::Stop() { 48 void ChromotingHostContext::Stop() {
33 // Stop all the threads. 49 // Stop all the threads.
34 jingle_thread_.Stop(); 50 jingle_thread_.Stop();
35 encode_thread_.Stop(); 51 encode_thread_.Stop();
36 main_thread_.Stop(); 52 main_thread_.Stop();
37 desktop_thread_.Stop(); 53 desktop_thread_.Stop();
38 } 54 }
39 55
40 JingleThread* ChromotingHostContext::jingle_thread() { 56 JingleThread* ChromotingHostContext::jingle_thread() {
41 return &jingle_thread_; 57 return &jingle_thread_;
42 } 58 }
43 59
44 MessageLoop* ChromotingHostContext::main_message_loop() { 60 MessageLoop* ChromotingHostContext::main_message_loop() {
45 return main_thread_.message_loop(); 61 return main_thread_.message_loop();
46 } 62 }
47 63
48 MessageLoop* ChromotingHostContext::encode_message_loop() { 64 MessageLoop* ChromotingHostContext::encode_message_loop() {
49 return encode_thread_.message_loop(); 65 return encode_thread_.message_loop();
50 } 66 }
51 67
52 MessageLoop* ChromotingHostContext::network_message_loop() { 68 base::MessageLoopProxy* ChromotingHostContext::network_message_loop() {
53 return jingle_thread_.message_loop(); 69 return network_message_loop_;
54 } 70 }
55 71
56 MessageLoop* ChromotingHostContext::desktop_message_loop() { 72 MessageLoop* ChromotingHostContext::desktop_message_loop() {
57 return desktop_thread_.message_loop(); 73 return desktop_thread_.message_loop();
58 } 74 }
59 75
60 void ChromotingHostContext::SetUITaskPostFunction( 76 void ChromotingHostContext::SetUITaskPostFunction(
61 const UIThreadPostTaskFunction& poster) { 77 const UIThreadPostTaskFunction& poster) {
62 ui_poster_ = poster; 78 ui_poster_ = poster;
63 ui_main_thread_id_ = base::PlatformThread::CurrentId(); 79 ui_main_thread_id_ = base::PlatformThread::CurrentId();
(...skipping 14 matching lines...) Expand all
78 main_message_loop()->PostDelayedTask(from_here, base::Bind( 94 main_message_loop()->PostDelayedTask(from_here, base::Bind(
79 &ChromotingHostContext::PostTaskToUIThread, base::Unretained(this), 95 &ChromotingHostContext::PostTaskToUIThread, base::Unretained(this),
80 from_here, task), delay_ms); 96 from_here, task), delay_ms);
81 } 97 }
82 98
83 bool ChromotingHostContext::IsUIThread() const { 99 bool ChromotingHostContext::IsUIThread() const {
84 return ui_main_thread_id_ == base::PlatformThread::CurrentId(); 100 return ui_main_thread_id_ == base::PlatformThread::CurrentId();
85 } 101 }
86 102
87 } // namespace remoting 103 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698