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 075c8f993f5da2332a185895ee210b8e68d8155c..c2cb27881888df33fb959f652e9642995eca7494 100644 |
--- a/content/browser/gpu/browser_gpu_channel_host_factory.cc |
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
@@ -393,6 +393,52 @@ scoped_ptr<gfx::GpuMemoryBuffer> |
return buffer.PassAs<gfx::GpuMemoryBuffer>(); |
} |
+void BrowserGpuChannelHostFactory::CreateSurfaceTextureOnIO( |
+ int32 surface_texture_id, |
+ base::ProcessHandle process_handle, |
+ const CreateSurfaceTextureCallback& callback) { |
+ GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); |
+ if (!host) { |
+ SurfaceTextureCreatedOnIO(callback); |
+ return; |
+ } |
+ |
+ host->CreateSurfaceTexture( |
+ surface_texture_id, |
+ process_handle, |
+ base::Bind(&BrowserGpuChannelHostFactory::SurfaceTextureCreatedOnIO, |
+ callback)); |
+} |
+ |
+// static |
+void BrowserGpuChannelHostFactory::SurfaceTextureCreatedOnIO( |
+ const CreateSurfaceTextureCallback& callback) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&BrowserGpuChannelHostFactory::OnSurfaceTextureCreated, |
+ callback)); |
+} |
+ |
+// static |
+void BrowserGpuChannelHostFactory::OnSurfaceTextureCreated( |
+ const CreateSurfaceTextureCallback& callback) { |
+ callback.Run(); |
+} |
+ |
+void BrowserGpuChannelHostFactory::CreateSurfaceTexture( |
+ int32 surface_texture_id, |
+ base::ProcessHandle process_handle, |
+ const CreateSurfaceTextureCallback& callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ GetIOLoopProxy()->PostTask(FROM_HERE, base::Bind( |
+ &BrowserGpuChannelHostFactory::CreateSurfaceTextureOnIO, |
+ base::Unretained(this), |
+ surface_texture_id, |
+ process_handle, |
+ callback)); |
+} |
+ |
// static |
void BrowserGpuChannelHostFactory::AddFilterOnIO( |
int host_id, |