| Index: chrome/browser/gpu_process_host_ui_shim.h
|
| diff --git a/chrome/browser/gpu_process_host_ui_shim.h b/chrome/browser/gpu_process_host_ui_shim.h
|
| index 8bcdb23a7434054954268942028e0821e7e1be7d..cd834a55e127620493a3f9d17d3772fb114cbf65 100644
|
| --- a/chrome/browser/gpu_process_host_ui_shim.h
|
| +++ b/chrome/browser/gpu_process_host_ui_shim.h
|
| @@ -122,6 +122,7 @@ class GpuProcessHostUIShim
|
| // Tells the GPU process to create a new command buffer that draws into the
|
| // window associated with the given renderer.
|
| void CreateViewCommandBuffer(
|
| + gfx::PluginWindowHandle compositing_surface,
|
| int32 render_view_id,
|
| int32 renderer_id,
|
| const GPUCreateCommandBufferConfig& init_params,
|
| @@ -197,16 +198,21 @@ class GpuProcessHostUIShim
|
| std::queue<linked_ptr<CreateCommandBufferCallback> >
|
| create_command_buffer_requests_;
|
|
|
| +#if defined(OS_LINUX)
|
| typedef std::pair<int32 /* renderer_id */,
|
| int32 /* render_view_id */> ViewID;
|
|
|
| - // Encapsulates surfaces that we acquire when creating view command buffers.
|
| - // We assume that a render view has at most 1 such surface associated
|
| - // with it. Multimap is used to simulate reference counting, see comment in
|
| + // Encapsulates surfaces that we lock when creating view command buffers.
|
| + // We release this lock once the command buffer (or associated GPU process)
|
| + // is destroyed. This prevents the browser from destroying the surface
|
| + // while the GPU process is drawing to it.
|
| +
|
| + // Multimap is used to simulate reference counting, see comment in
|
| // GpuProcessHostUIShim::CreateViewCommandBuffer.
|
| - class ViewSurface;
|
| - typedef std::multimap<ViewID, linked_ptr<ViewSurface> > ViewSurfaceMap;
|
| - ViewSurfaceMap acquired_surfaces_;
|
| + class SurfaceRef;
|
| + typedef std::multimap<ViewID, linked_ptr<SurfaceRef> > SurfaceRefMap;
|
| + SurfaceRefMap surface_refs_;
|
| +#endif
|
|
|
| // In single process and in process GPU mode, this references the
|
| // GpuChannelManager or null otherwise. It must be called and deleted on the
|
|
|