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

Side by Side Diff: content/browser/renderer_host/media/media_stream_dispatcher_host.cc

Issue 10662049: Move the device enumerate/open/close work to device thread from IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: small changes to fix the trybots' failure Created 8 years, 5 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) 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 "content/browser/renderer_host/media/media_stream_dispatcher_host.h" 5 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
6 6
7 #include "content/browser/browser_main_loop.h"
7 #include "content/common/media/media_stream_messages.h" 8 #include "content/common/media/media_stream_messages.h"
8 #include "content/common/media/media_stream_options.h" 9 #include "content/common/media/media_stream_options.h"
9 #include "googleurl/src/gurl.h" 10 #include "googleurl/src/gurl.h"
10 11
12 using content::BrowserMainLoop;
11 using content::BrowserMessageFilter; 13 using content::BrowserMessageFilter;
12 using content::BrowserThread; 14 using content::BrowserThread;
13 15
14 namespace media_stream { 16 namespace media_stream {
15 17
16 struct MediaStreamDispatcherHost::StreamRequest { 18 struct MediaStreamDispatcherHost::StreamRequest {
17 StreamRequest() : render_view_id(0), page_request_id(0) {} 19 StreamRequest() : render_view_id(0), page_request_id(0) {}
18 StreamRequest(int render_view_id, int page_request_id) 20 StreamRequest(int render_view_id, int page_request_id)
19 : render_view_id(render_view_id), 21 : render_view_id(render_view_id),
20 page_request_id(page_request_id ) { 22 page_request_id(page_request_id ) {
21 } 23 }
22 int render_view_id; 24 int render_view_id;
23 // Id of the request generated by MediaStreamDispatcher. 25 // Id of the request generated by MediaStreamDispatcher.
24 int page_request_id; 26 int page_request_id;
25 }; 27 };
26 28
27 MediaStreamDispatcherHost::MediaStreamDispatcherHost( 29 MediaStreamDispatcherHost::MediaStreamDispatcherHost(int render_process_id)
28 content::ResourceContext* resource_context, 30 : render_process_id_(render_process_id) {
29 int render_process_id,
30 media::AudioManager* audio_manager)
31 : resource_context_(resource_context),
32 render_process_id_(render_process_id),
33 audio_manager_(audio_manager) {
34 } 31 }
35 32
36 void MediaStreamDispatcherHost::StreamGenerated( 33 void MediaStreamDispatcherHost::StreamGenerated(
37 const std::string& label, 34 const std::string& label,
38 const StreamDeviceInfoArray& audio_devices, 35 const StreamDeviceInfoArray& audio_devices,
39 const StreamDeviceInfoArray& video_devices) { 36 const StreamDeviceInfoArray& video_devices) {
40 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 37 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
41 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" 38 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated("
42 << ", {label = " << label << "})"; 39 << ", {label = " << label << "})";
43 40
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 IPC_END_MESSAGE_MAP_EX() 168 IPC_END_MESSAGE_MAP_EX()
172 return handled; 169 return handled;
173 } 170 }
174 171
175 void MediaStreamDispatcherHost::OnChannelClosing() { 172 void MediaStreamDispatcherHost::OnChannelClosing() {
176 BrowserMessageFilter::OnChannelClosing(); 173 BrowserMessageFilter::OnChannelClosing();
177 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; 174 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing";
178 175
179 // Since the IPC channel is gone, cancel pending requests and close all 176 // Since the IPC channel is gone, cancel pending requests and close all
180 // requested VideoCaptureDevices. 177 // requested VideoCaptureDevices.
181 manager()->CancelRequests(this); 178 GetManager()->CancelRequests(this);
182 for (StreamMap::iterator it = streams_.begin(); 179 for (StreamMap::iterator it = streams_.begin();
183 it != streams_.end(); 180 it != streams_.end();
184 it++) { 181 it++) {
185 std::string label = it->first; 182 std::string label = it->first;
186 manager()->StopGeneratedStream(label); 183 GetManager()->StopGeneratedStream(label);
187 } 184 }
188 } 185 }
189 186
190 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {} 187 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {}
191 188
192 void MediaStreamDispatcherHost::OnGenerateStream( 189 void MediaStreamDispatcherHost::OnGenerateStream(
193 int render_view_id, 190 int render_view_id,
194 int page_request_id, 191 int page_request_id,
195 const media_stream::StreamOptions& components, 192 const media_stream::StreamOptions& components,
196 const GURL& security_origin) { 193 const GURL& security_origin) {
197 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" 194 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream("
198 << render_view_id << ", " 195 << render_view_id << ", "
199 << page_request_id << ", [ " 196 << page_request_id << ", [ "
200 << (components.audio ? "audio " : "") 197 << (components.audio ? "audio " : "")
201 << (components.video ? "video " : "") 198 << (components.video ? "video " : "")
202 << "], " 199 << "], "
203 << security_origin.spec() << ")"; 200 << security_origin.spec() << ")";
204 201
205 std::string label; 202 std::string label;
206 manager()->GenerateStream(this, render_process_id_, render_view_id, 203 GetManager()->GenerateStream(this, render_process_id_, render_view_id,
207 components, security_origin, &label); 204 components, security_origin, &label);
208 DCHECK(!label.empty()); 205 DCHECK(!label.empty());
209 streams_[label] = StreamRequest(render_view_id, page_request_id); 206 streams_[label] = StreamRequest(render_view_id, page_request_id);
210 } 207 }
211 208
212 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id, 209 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id,
213 int page_request_id) { 210 int page_request_id) {
214 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream(" 211 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream("
215 << render_view_id << ", " 212 << render_view_id << ", "
216 << page_request_id << ")"; 213 << page_request_id << ")";
217 214
218 for (StreamMap::iterator it = streams_.begin(); it != streams_.end(); ++it) { 215 for (StreamMap::iterator it = streams_.begin(); it != streams_.end(); ++it) {
219 if (it->second.render_view_id == render_view_id && 216 if (it->second.render_view_id == render_view_id &&
220 it->second.page_request_id == page_request_id) { 217 it->second.page_request_id == page_request_id) {
221 manager()->CancelGenerateStream(it->first); 218 GetManager()->CancelGenerateStream(it->first);
222 } 219 }
223 } 220 }
224 } 221 }
225 222
226 void MediaStreamDispatcherHost::OnStopGeneratedStream( 223 void MediaStreamDispatcherHost::OnStopGeneratedStream(
227 int render_view_id, const std::string& label) { 224 int render_view_id, const std::string& label) {
228 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" 225 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream("
229 << ", {label = " << label << "})"; 226 << ", {label = " << label << "})";
230 227
231 StreamMap::iterator it = streams_.find(label); 228 StreamMap::iterator it = streams_.find(label);
232 DCHECK(it != streams_.end()); 229 DCHECK(it != streams_.end());
233 manager()->StopGeneratedStream(label); 230 GetManager()->StopGeneratedStream(label);
234 streams_.erase(it); 231 streams_.erase(it);
235 } 232 }
236 233
237 void MediaStreamDispatcherHost::OnEnumerateDevices( 234 void MediaStreamDispatcherHost::OnEnumerateDevices(
238 int render_view_id, 235 int render_view_id,
239 int page_request_id, 236 int page_request_id,
240 media_stream::MediaStreamType type, 237 media_stream::MediaStreamType type,
241 const GURL& security_origin) { 238 const GURL& security_origin) {
242 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" 239 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices("
243 << render_view_id << ", " 240 << render_view_id << ", "
244 << page_request_id << ", " 241 << page_request_id << ", "
245 << type << ", " 242 << type << ", "
246 << security_origin.spec() << ")"; 243 << security_origin.spec() << ")";
247 244
248 std::string label; 245 std::string label;
249 manager()->EnumerateDevices(this, render_process_id_, render_view_id, 246 GetManager()->EnumerateDevices(this, render_process_id_, render_view_id,
250 type, security_origin, &label); 247 type, security_origin, &label);
251 DCHECK(!label.empty()); 248 DCHECK(!label.empty());
252 streams_[label] = StreamRequest(render_view_id, page_request_id); 249 streams_[label] = StreamRequest(render_view_id, page_request_id);
253 } 250 }
254 251
255 void MediaStreamDispatcherHost::OnOpenDevice( 252 void MediaStreamDispatcherHost::OnOpenDevice(
256 int render_view_id, 253 int render_view_id,
257 int page_request_id, 254 int page_request_id,
258 const std::string& device_id, 255 const std::string& device_id,
259 media_stream::MediaStreamType type, 256 media_stream::MediaStreamType type,
260 const GURL& security_origin) { 257 const GURL& security_origin) {
261 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" 258 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice("
262 << render_view_id << ", " 259 << render_view_id << ", "
263 << page_request_id << ", device_id: " 260 << page_request_id << ", device_id: "
264 << device_id.c_str() << ", type: " 261 << device_id.c_str() << ", type: "
265 << type << ", " 262 << type << ", "
266 << security_origin.spec() << ")"; 263 << security_origin.spec() << ")";
267 264
268 std::string label; 265 std::string label;
269 manager()->OpenDevice(this, render_process_id_, render_view_id, 266 GetManager()->OpenDevice(this, render_process_id_, render_view_id,
270 device_id, type, security_origin, &label); 267 device_id, type, security_origin, &label);
271 DCHECK(!label.empty()); 268 DCHECK(!label.empty());
272 streams_[label] = StreamRequest(render_view_id, page_request_id); 269 streams_[label] = StreamRequest(render_view_id, page_request_id);
273 } 270 }
274 271
275 MediaStreamManager* MediaStreamDispatcherHost::manager() { 272 MediaStreamManager* MediaStreamDispatcherHost::GetManager() {
276 return MediaStreamManager::GetForResourceContext( 273 return BrowserMainLoop::GetMediaStreamManager();
277 resource_context_, audio_manager_);
278 } 274 }
279 275
280 } // namespace media_stream 276 } // namespace media_stream
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698