Index: media/base/message_loop_factory_impl.cc |
=================================================================== |
--- media/base/message_loop_factory_impl.cc (revision 83707) |
+++ media/base/message_loop_factory_impl.cc (working copy) |
@@ -48,4 +48,29 @@ |
return NULL; |
} |
+scoped_refptr<base::MessageLoopProxy> |
+MessageLoopFactoryImpl::GetMessageLoopProxy(const std::string& name) { |
+ if (name.empty()) { |
+ return NULL; |
+ } |
+ |
+ base::AutoLock auto_lock(lock_); |
+ |
+ ThreadMap::iterator it = thread_map_.find(name); |
+ if (it != thread_map_.end()) |
+ return (*it).second->message_loop_proxy(); |
+ |
+ scoped_ptr<base::Thread> thread(new base::Thread(name.c_str())); |
+ |
+ if (thread->Start()) { |
+ scoped_refptr<base::MessageLoopProxy> message_loop_proxy = |
+ thread->message_loop_proxy(); |
+ thread_map_[name] = thread.release(); |
+ return message_loop_proxy; |
+ } |
+ |
+ LOG(ERROR) << "Failed to start '" << name << "' thread!"; |
+ return NULL; |
+} |
+ |
} // namespace media |