OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/ptr_util.h" |
8 #include "base/threading/thread_restrictions.h" | 9 #include "base/threading/thread_restrictions.h" |
9 #include "build/build_config.h" | 10 #include "build/build_config.h" |
10 #include "remoting/base/auto_thread.h" | 11 #include "remoting/base/auto_thread.h" |
11 #include "remoting/base/url_request_context_getter.h" | 12 #include "remoting/base/url_request_context_getter.h" |
12 | 13 |
13 namespace remoting { | 14 namespace remoting { |
14 | 15 |
15 namespace { | 16 namespace { |
16 | 17 |
17 void DisallowBlockingOperations() { | 18 void DisallowBlockingOperations() { |
(...skipping 18 matching lines...) Expand all Loading... |
36 input_task_runner_(input_task_runner), | 37 input_task_runner_(input_task_runner), |
37 network_task_runner_(network_task_runner), | 38 network_task_runner_(network_task_runner), |
38 video_capture_task_runner_(video_capture_task_runner), | 39 video_capture_task_runner_(video_capture_task_runner), |
39 video_encode_task_runner_(video_encode_task_runner), | 40 video_encode_task_runner_(video_encode_task_runner), |
40 url_request_context_getter_(url_request_context_getter) { | 41 url_request_context_getter_(url_request_context_getter) { |
41 } | 42 } |
42 | 43 |
43 ChromotingHostContext::~ChromotingHostContext() { | 44 ChromotingHostContext::~ChromotingHostContext() { |
44 } | 45 } |
45 | 46 |
46 scoped_ptr<ChromotingHostContext> ChromotingHostContext::Copy() { | 47 std::unique_ptr<ChromotingHostContext> ChromotingHostContext::Copy() { |
47 return make_scoped_ptr(new ChromotingHostContext( | 48 return base::WrapUnique(new ChromotingHostContext( |
48 ui_task_runner_, audio_task_runner_, file_task_runner_, | 49 ui_task_runner_, audio_task_runner_, file_task_runner_, |
49 input_task_runner_, network_task_runner_, video_capture_task_runner_, | 50 input_task_runner_, network_task_runner_, video_capture_task_runner_, |
50 video_encode_task_runner_, url_request_context_getter_)); | 51 video_encode_task_runner_, url_request_context_getter_)); |
51 } | 52 } |
52 | 53 |
53 scoped_refptr<AutoThreadTaskRunner> ChromotingHostContext::audio_task_runner() | 54 scoped_refptr<AutoThreadTaskRunner> ChromotingHostContext::audio_task_runner() |
54 const { | 55 const { |
55 return audio_task_runner_; | 56 return audio_task_runner_; |
56 } | 57 } |
57 | 58 |
(...skipping 25 matching lines...) Expand all Loading... |
83 scoped_refptr<AutoThreadTaskRunner> | 84 scoped_refptr<AutoThreadTaskRunner> |
84 ChromotingHostContext::video_encode_task_runner() const { | 85 ChromotingHostContext::video_encode_task_runner() const { |
85 return video_encode_task_runner_; | 86 return video_encode_task_runner_; |
86 } | 87 } |
87 | 88 |
88 scoped_refptr<net::URLRequestContextGetter> | 89 scoped_refptr<net::URLRequestContextGetter> |
89 ChromotingHostContext::url_request_context_getter() const { | 90 ChromotingHostContext::url_request_context_getter() const { |
90 return url_request_context_getter_; | 91 return url_request_context_getter_; |
91 } | 92 } |
92 | 93 |
93 scoped_ptr<ChromotingHostContext> ChromotingHostContext::Create( | 94 std::unique_ptr<ChromotingHostContext> ChromotingHostContext::Create( |
94 scoped_refptr<AutoThreadTaskRunner> ui_task_runner) { | 95 scoped_refptr<AutoThreadTaskRunner> ui_task_runner) { |
95 #if defined(OS_WIN) | 96 #if defined(OS_WIN) |
96 // On Windows the AudioCapturer requires COM, so we run a single-threaded | 97 // On Windows the AudioCapturer requires COM, so we run a single-threaded |
97 // apartment, which requires a UI thread. | 98 // apartment, which requires a UI thread. |
98 scoped_refptr<AutoThreadTaskRunner> audio_task_runner = | 99 scoped_refptr<AutoThreadTaskRunner> audio_task_runner = |
99 AutoThread::CreateWithLoopAndComInitTypes( | 100 AutoThread::CreateWithLoopAndComInitTypes( |
100 "ChromotingAudioThread", ui_task_runner, base::MessageLoop::TYPE_UI, | 101 "ChromotingAudioThread", ui_task_runner, base::MessageLoop::TYPE_UI, |
101 AutoThread::COM_INIT_STA); | 102 AutoThread::COM_INIT_STA); |
102 #else // !defined(OS_WIN) | 103 #else // !defined(OS_WIN) |
103 scoped_refptr<AutoThreadTaskRunner> audio_task_runner = | 104 scoped_refptr<AutoThreadTaskRunner> audio_task_runner = |
104 AutoThread::CreateWithType("ChromotingAudioThread", ui_task_runner, | 105 AutoThread::CreateWithType("ChromotingAudioThread", ui_task_runner, |
105 base::MessageLoop::TYPE_IO); | 106 base::MessageLoop::TYPE_IO); |
106 #endif // !defined(OS_WIN) | 107 #endif // !defined(OS_WIN) |
107 scoped_refptr<AutoThreadTaskRunner> file_task_runner = | 108 scoped_refptr<AutoThreadTaskRunner> file_task_runner = |
108 AutoThread::CreateWithType("ChromotingFileThread", ui_task_runner, | 109 AutoThread::CreateWithType("ChromotingFileThread", ui_task_runner, |
109 base::MessageLoop::TYPE_IO); | 110 base::MessageLoop::TYPE_IO); |
110 | 111 |
111 scoped_refptr<AutoThreadTaskRunner> network_task_runner = | 112 scoped_refptr<AutoThreadTaskRunner> network_task_runner = |
112 AutoThread::CreateWithType("ChromotingNetworkThread", ui_task_runner, | 113 AutoThread::CreateWithType("ChromotingNetworkThread", ui_task_runner, |
113 base::MessageLoop::TYPE_IO); | 114 base::MessageLoop::TYPE_IO); |
114 network_task_runner->PostTask(FROM_HERE, | 115 network_task_runner->PostTask(FROM_HERE, |
115 base::Bind(&DisallowBlockingOperations)); | 116 base::Bind(&DisallowBlockingOperations)); |
116 | 117 |
117 return make_scoped_ptr(new ChromotingHostContext( | 118 return base::WrapUnique(new ChromotingHostContext( |
118 ui_task_runner, | 119 ui_task_runner, audio_task_runner, file_task_runner, |
119 audio_task_runner, | |
120 file_task_runner, | |
121 AutoThread::CreateWithType("ChromotingInputThread", ui_task_runner, | 120 AutoThread::CreateWithType("ChromotingInputThread", ui_task_runner, |
122 base::MessageLoop::TYPE_IO), | 121 base::MessageLoop::TYPE_IO), |
123 network_task_runner, | 122 network_task_runner, |
124 AutoThread::Create("ChromotingCaptureThread", ui_task_runner), | 123 AutoThread::Create("ChromotingCaptureThread", ui_task_runner), |
125 AutoThread::Create("ChromotingEncodeThread", ui_task_runner), | 124 AutoThread::Create("ChromotingEncodeThread", ui_task_runner), |
126 make_scoped_refptr( | 125 make_scoped_refptr( |
127 new URLRequestContextGetter(network_task_runner, file_task_runner)))); | 126 new URLRequestContextGetter(network_task_runner, file_task_runner)))); |
128 } | 127 } |
129 | 128 |
130 #if defined(OS_CHROMEOS) | 129 #if defined(OS_CHROMEOS) |
131 | 130 |
132 // static | 131 // static |
133 scoped_ptr<ChromotingHostContext> ChromotingHostContext::CreateForChromeOS( | 132 std::unique_ptr<ChromotingHostContext> ChromotingHostContext::CreateForChromeOS( |
134 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, | 133 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, |
135 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 134 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, |
136 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 135 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
137 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) { | 136 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) { |
138 DCHECK(url_request_context_getter.get()); | 137 DCHECK(url_request_context_getter.get()); |
139 | 138 |
140 | 139 |
141 // AutoThreadTaskRunner is a TaskRunner with the special property that it will | 140 // AutoThreadTaskRunner is a TaskRunner with the special property that it will |
142 // continue to process tasks until no references remain, at least. The | 141 // continue to process tasks until no references remain, at least. The |
143 // QuitClosure we usually pass does the simple thing of stopping the | 142 // QuitClosure we usually pass does the simple thing of stopping the |
144 // underlying TaskRunner. Since we are re-using browser's threads, we cannot | 143 // underlying TaskRunner. Since we are re-using browser's threads, we cannot |
145 // stop them explicitly. Therefore, base::DoNothing is passed in as the quit | 144 // stop them explicitly. Therefore, base::DoNothing is passed in as the quit |
146 // closure. | 145 // closure. |
147 scoped_refptr<AutoThreadTaskRunner> io_auto_task_runner = | 146 scoped_refptr<AutoThreadTaskRunner> io_auto_task_runner = |
148 new AutoThreadTaskRunner(io_task_runner, base::Bind(&base::DoNothing)); | 147 new AutoThreadTaskRunner(io_task_runner, base::Bind(&base::DoNothing)); |
149 scoped_refptr<AutoThreadTaskRunner> file_auto_task_runner = | 148 scoped_refptr<AutoThreadTaskRunner> file_auto_task_runner = |
150 new AutoThreadTaskRunner(file_task_runner, base::Bind(&base::DoNothing)); | 149 new AutoThreadTaskRunner(file_task_runner, base::Bind(&base::DoNothing)); |
151 scoped_refptr<AutoThreadTaskRunner> ui_auto_task_runner = | 150 scoped_refptr<AutoThreadTaskRunner> ui_auto_task_runner = |
152 new AutoThreadTaskRunner(ui_task_runner, base::Bind(&base::DoNothing)); | 151 new AutoThreadTaskRunner(ui_task_runner, base::Bind(&base::DoNothing)); |
153 | 152 |
154 // Use browser's file thread as the joiner as it is the only browser-thread | 153 // Use browser's file thread as the joiner as it is the only browser-thread |
155 // that allows blocking I/O, which is required by thread joining. | 154 // that allows blocking I/O, which is required by thread joining. |
156 return make_scoped_ptr(new ChromotingHostContext( | 155 return base::WrapUnique(new ChromotingHostContext( |
157 ui_auto_task_runner, | 156 ui_auto_task_runner, |
158 AutoThread::Create("ChromotingAudioThread", file_auto_task_runner), | 157 AutoThread::Create("ChromotingAudioThread", file_auto_task_runner), |
159 file_auto_task_runner, | 158 file_auto_task_runner, |
160 ui_auto_task_runner, // input_task_runner | 159 ui_auto_task_runner, // input_task_runner |
161 io_auto_task_runner, // network_task_runner | 160 io_auto_task_runner, // network_task_runner |
162 ui_auto_task_runner, // video_capture_task_runner | 161 ui_auto_task_runner, // video_capture_task_runner |
163 AutoThread::Create("ChromotingEncodeThread", file_auto_task_runner), | 162 AutoThread::Create("ChromotingEncodeThread", file_auto_task_runner), |
164 url_request_context_getter)); | 163 url_request_context_getter)); |
165 } | 164 } |
166 #endif // defined(OS_CHROMEOS) | 165 #endif // defined(OS_CHROMEOS) |
167 | 166 |
168 } // namespace remoting | 167 } // namespace remoting |
OLD | NEW |