Index: content/browser/gpu/browser_gpu_channel_host_factory.cc |
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
index b35d64f3255ec73f58561e98a56edc4976159879..fd2a96c8ba9737f353b48243bcff71d628c5d82c 100644 |
--- a/content/browser/gpu/browser_gpu_channel_host_factory.cc |
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
@@ -9,6 +9,7 @@ |
#include "base/synchronization/waitable_event.h" |
#include "base/threading/thread_restrictions.h" |
#include "content/browser/gpu/gpu_data_manager_impl.h" |
+#include "content/browser/gpu/gpu_memory_buffer_factory_host_impl.h" |
#include "content/browser/gpu/gpu_process_host.h" |
#include "content/browser/gpu/gpu_surface_tracker.h" |
#include "content/common/child_process_host_impl.h" |
@@ -231,8 +232,8 @@ void BrowserGpuChannelHostFactory::Terminate() { |
BrowserGpuChannelHostFactory::BrowserGpuChannelHostFactory() |
: gpu_client_id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), |
shutdown_event_(new base::WaitableEvent(true, false)), |
- gpu_host_id_(0), |
- next_create_gpu_memory_buffer_request_id_(0) { |
+ gpu_memory_buffer_factory_host_(new GpuMemoryBufferFactoryHostImpl), |
+ gpu_host_id_(0) { |
} |
BrowserGpuChannelHostFactory::~BrowserGpuChannelHostFactory() { |
@@ -370,6 +371,7 @@ void BrowserGpuChannelHostFactory::GpuChannelEstablished() { |
shutdown_event_.get()); |
} |
gpu_host_id_ = pending_request_->gpu_host_id(); |
+ gpu_memory_buffer_factory_host_->set_gpu_host_id(gpu_host_id_); |
pending_request_ = NULL; |
for (size_t n = 0; n < established_callbacks_.size(); n++) |
@@ -409,45 +411,6 @@ void BrowserGpuChannelHostFactory::DeleteGpuMemoryBuffer( |
base::Passed(&buffer))); |
} |
-void BrowserGpuChannelHostFactory::CreateGpuMemoryBuffer( |
- const gfx::GpuMemoryBufferHandle& handle, |
- const gfx::Size& size, |
- unsigned internalformat, |
- unsigned usage, |
- const CreateGpuMemoryBufferCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); |
- if (!host) { |
- callback.Run(gfx::GpuMemoryBufferHandle()); |
- return; |
- } |
- |
- uint32 request_id = next_create_gpu_memory_buffer_request_id_++; |
- create_gpu_memory_buffer_requests_[request_id] = callback; |
- |
- host->CreateGpuMemoryBuffer( |
- handle, |
- size, |
- internalformat, |
- usage, |
- base::Bind(&BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated, |
- base::Unretained(this), |
- request_id)); |
-} |
- |
-void BrowserGpuChannelHostFactory::DestroyGpuMemoryBuffer( |
- const gfx::GpuMemoryBufferHandle& handle, |
- int32 sync_point) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); |
- if (!host) |
- return; |
- |
- host->DestroyGpuMemoryBuffer(handle, sync_point); |
-} |
- |
// static |
void BrowserGpuChannelHostFactory::AddFilterOnIO( |
int host_id, |
@@ -492,11 +455,12 @@ void BrowserGpuChannelHostFactory::AllocateGpuMemoryBufferOnIO( |
return; |
} |
- request->result = GpuMemoryBufferImpl::Create( |
- gfx::Size(request->width, request->height), |
- request->internalformat, |
- request->usage).PassAs<gfx::GpuMemoryBuffer>(); |
- request->event.Signal(); |
+ GpuMemoryBufferImpl::Create( |
+ gfx::Size(request->width, request->height), |
+ request->internalformat, |
+ request->usage, |
+ base::Bind(&BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated, |
+ base::Unretained(request))); |
} |
// static |
@@ -504,16 +468,14 @@ void BrowserGpuChannelHostFactory::DeleteGpuMemoryBufferOnIO( |
scoped_ptr<gfx::GpuMemoryBuffer> buffer) { |
} |
+// static |
void BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated( |
- uint32 request_id, |
- const gfx::GpuMemoryBufferHandle& handle) { |
+ AllocateGpuMemoryBufferRequest* request, |
+ scoped_ptr<GpuMemoryBufferImpl> buffer) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- CreateGpuMemoryBufferCallbackMap::iterator iter = |
- create_gpu_memory_buffer_requests_.find(request_id); |
- DCHECK(iter != create_gpu_memory_buffer_requests_.end()); |
- iter->second.Run(handle); |
- create_gpu_memory_buffer_requests_.erase(iter); |
+ request->result = buffer.PassAs<gfx::GpuMemoryBuffer>(); |
+ request->event.Signal(); |
} |
} // namespace content |