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

Unified Diff: content/renderer/media/renderer_gpu_video_accelerator_factories.cc

Issue 23440015: Fix webrtc HW encode deadlock scenarios. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/renderer_gpu_video_accelerator_factories.cc
diff --git a/content/renderer/media/renderer_gpu_video_accelerator_factories.cc b/content/renderer/media/renderer_gpu_video_accelerator_factories.cc
index f586497f484a8b83135f7ec82c213096ddf76aac..6aa56f73c8ae4169ce1d12c8e01b8dffcc6ccc0b 100644
--- a/content/renderer/media/renderer_gpu_video_accelerator_factories.cc
+++ b/content/renderer/media/renderer_gpu_video_accelerator_factories.cc
@@ -23,11 +23,10 @@ RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories(
const scoped_refptr<base::MessageLoopProxy>& message_loop,
WebGraphicsContext3DCommandBufferImpl* context)
: message_loop_(message_loop),
- main_message_loop_(base::MessageLoopProxy::current()),
gpu_channel_host_(gpu_channel_host),
+ thread_safe_sender_(ChildThread::current()->thread_safe_sender()),
aborted_waiter_(true, false),
- message_loop_async_waiter_(false, false),
- render_thread_async_waiter_(false, false) {
+ message_loop_async_waiter_(false, false) {
// |context| is only required to support HW-accelerated decode.
if (!context)
return;
@@ -55,8 +54,7 @@ RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories(
RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories()
: aborted_waiter_(true, false),
- message_loop_async_waiter_(false, false),
- render_thread_async_waiter_(false, false) {}
+ message_loop_async_waiter_(false, false) {}
void RendererGpuVideoAcceleratorFactories::AsyncGetContext(
WebGraphicsContext3DCommandBufferImpl* context) {
@@ -363,30 +361,7 @@ void RendererGpuVideoAcceleratorFactories::AsyncReadPixels(
base::SharedMemory* RendererGpuVideoAcceleratorFactories::CreateSharedMemory(
size_t size) {
- if (main_message_loop_->BelongsToCurrentThread()) {
- return ChildThread::current()->AllocateSharedMemory(size);
- }
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&RendererGpuVideoAcceleratorFactories::AsyncCreateSharedMemory,
- this,
- size));
-
- base::WaitableEvent* objects[] = {&aborted_waiter_,
- &render_thread_async_waiter_};
- if (base::WaitableEvent::WaitMany(objects, arraysize(objects)) == 0)
- return NULL;
- return shared_memory_segment_.release();
-}
-
-void RendererGpuVideoAcceleratorFactories::AsyncCreateSharedMemory(
- size_t size) {
- DCHECK_EQ(base::MessageLoop::current(),
- ChildThread::current()->message_loop());
-
- shared_memory_segment_.reset(
- ChildThread::current()->AllocateSharedMemory(size));
- render_thread_async_waiter_.Signal();
+ return ChildThread::AllocateSharedMemory(size, thread_safe_sender_.get());
}
scoped_refptr<base::MessageLoopProxy>
@@ -405,9 +380,9 @@ RendererGpuVideoAcceleratorFactories::Clone() {
scoped_refptr<RendererGpuVideoAcceleratorFactories> factories =
new RendererGpuVideoAcceleratorFactories();
factories->message_loop_ = message_loop_;
- factories->main_message_loop_ = main_message_loop_;
factories->gpu_channel_host_ = gpu_channel_host_;
factories->context_ = context_;
+ factories->thread_safe_sender_ = thread_safe_sender_;
return factories;
}
« no previous file with comments | « content/renderer/media/renderer_gpu_video_accelerator_factories.h ('k') | content/renderer/media/rtc_video_encoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698