Index: content/common/gpu/client/gpu_channel_host.cc |
diff --git a/content/common/gpu/client/gpu_channel_host.cc b/content/common/gpu/client/gpu_channel_host.cc |
index afc0b5993c7e548060235b95bf1b865bf92bbe66..f503051fb162ee42d3f8ab442de42edc47265fdb 100644 |
--- a/content/common/gpu/client/gpu_channel_host.cc |
+++ b/content/common/gpu/client/gpu_channel_host.cc |
@@ -144,6 +144,19 @@ CommandBufferProxyImpl* GpuChannelHost::CreateViewCommandBuffer( |
int32 route_id = GenerateRouteID(); |
if (!factory_->CreateViewCommandBuffer(surface_id, init_params, route_id)) { |
LOG(ERROR) << "GpuChannelHost::CreateViewCommandBuffer failed."; |
+ |
+ // The most likely reason CreateViewCommandBuffer will fail is |
+ // that the GPU process crashed. In this case the GPU channel |
+ // needs to be considered lost. The caller will then set up a new |
+ // connection, and the GPU channel and any view command buffers |
+ // will all be associated with the same GPU process. |
+ DCHECK(MessageLoopProxy::current().get()); |
+ |
+ scoped_refptr<base::MessageLoopProxy> io_loop = factory_->GetIOLoopProxy(); |
+ io_loop->PostTask(FROM_HERE, |
+ base::Bind(&GpuChannelHost::MessageFilter::OnChannelError, |
+ channel_filter_.get())); |
+ |
return NULL; |
} |