OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "media/base/message_loop_factory_impl.h" | |
6 | |
7 namespace media { | |
8 | |
9 MessageLoopFactoryImpl::MessageLoopFactoryImpl() {} | |
10 | |
11 MessageLoopFactoryImpl::~MessageLoopFactoryImpl() { | |
12 base::AutoLock auto_lock(lock_); | |
13 | |
14 for (ThreadMap::iterator iter = thread_map_.begin(); | |
15 iter != thread_map_.end(); | |
16 ++iter) { | |
17 base::Thread* thread = (*iter).second; | |
18 | |
19 if (thread) { | |
20 thread->Stop(); | |
21 delete thread; | |
22 } | |
23 } | |
24 thread_map_.clear(); | |
25 } | |
26 | |
27 // MessageLoopFactory methods. | |
28 MessageLoop* MessageLoopFactoryImpl::GetMessageLoop(const std::string& name) { | |
29 if (name.empty()) { | |
30 return NULL; | |
31 } | |
32 | |
33 base::AutoLock auto_lock(lock_); | |
34 | |
35 ThreadMap::iterator it = thread_map_.find(name); | |
36 if (it != thread_map_.end()) | |
37 return (*it).second->message_loop(); | |
38 | |
39 scoped_ptr<base::Thread> thread(new base::Thread(name.c_str())); | |
40 | |
41 if (thread->Start()) { | |
42 MessageLoop* message_loop = thread->message_loop(); | |
43 thread_map_[name] = thread.release(); | |
44 return message_loop; | |
45 } | |
46 | |
47 LOG(ERROR) << "Failed to start '" << name << "' thread!"; | |
48 return NULL; | |
49 } | |
50 | |
51 scoped_refptr<base::MessageLoopProxy> | |
52 MessageLoopFactoryImpl::GetMessageLoopProxy(const std::string& name) { | |
53 if (name.empty()) { | |
54 return NULL; | |
55 } | |
56 | |
57 base::AutoLock auto_lock(lock_); | |
58 | |
59 ThreadMap::iterator it = thread_map_.find(name); | |
60 if (it != thread_map_.end()) | |
61 return (*it).second->message_loop_proxy(); | |
62 | |
63 scoped_ptr<base::Thread> thread(new base::Thread(name.c_str())); | |
64 | |
65 if (thread->Start()) { | |
66 scoped_refptr<base::MessageLoopProxy> message_loop_proxy = | |
67 thread->message_loop_proxy(); | |
68 thread_map_[name] = thread.release(); | |
69 return message_loop_proxy; | |
70 } | |
71 | |
72 LOG(ERROR) << "Failed to start '" << name << "' thread!"; | |
73 return NULL; | |
74 } | |
75 | |
76 } // namespace media | |
OLD | NEW |