Index: gpu/ipc/common/gpu_surface_tracker.h |
diff --git a/gpu/ipc/common/gpu_surface_tracker.h b/gpu/ipc/common/gpu_surface_tracker.h |
index 6d372712521397e6e77bd9d9160d1e7888dbfdcd..52cf377920c1a1d613890183ce8a4964443588c7 100644 |
--- a/gpu/ipc/common/gpu_surface_tracker.h |
+++ b/gpu/ipc/common/gpu_surface_tracker.h |
@@ -26,12 +26,30 @@ namespace gpu { |
// GpuMemoryBufferManager::CreateGpuMemoryBuffer. |
// On Android, the handle is used in the GPU process to get a reference to the |
// ANativeWindow, using GpuSurfaceLookup (implemented by |
-// ChildProcessSurfaceManager). |
+// ChildProcessSurfaceManager). We require that an Android Surface is provided |
+// with the ANativeWindow, so one must provide an explicit GpuSurfaceTracker:: |
+// SurfaceRecord when adding it. |
// On Mac, the handle just passes through the GPU process, and is sent back via |
// GpuCommandBufferMsg_SwapBuffersCompleted to reference the surface. |
// This class is thread safe. |
class GPU_EXPORT GpuSurfaceTracker : public gpu::GpuSurfaceLookup { |
public: |
+ struct SurfaceRecord { |
+#if defined(OS_ANDROID) |
+ SurfaceRecord(gfx::AcceleratedWidget widget, jobject j_surface); |
+#else // defined(OS_ANDROID) |
+ explicit SurfaceRecord(gfx::AcceleratedWidget widget); |
+#endif // !defined(OS_ANDROID) |
+ |
+ SurfaceRecord(SurfaceRecord&&); |
+ SurfaceRecord(const SurfaceRecord&) = delete; |
+ |
+ gfx::AcceleratedWidget widget; |
+#if defined(OS_ANDROID) |
+ gl::ScopedJavaSurface surface; |
+#endif |
+ }; |
+ |
// GpuSurfaceLookup implementation: |
// Returns the native widget associated with a given surface_handle. |
// On Android, this adds a reference on the ANativeWindow. |
@@ -39,16 +57,15 @@ class GPU_EXPORT GpuSurfaceTracker : public gpu::GpuSurfaceLookup { |
gpu::SurfaceHandle surface_handle) override; |
#if defined(OS_ANDROID) |
- void RegisterViewSurface(int surface_id, jobject j_surface); |
- void UnregisterViewSurface(int surface_id); |
- gl::ScopedJavaSurface AcquireJavaSurface(int surface_id) override; |
+ gl::ScopedJavaSurface AcquireJavaSurface( |
+ gpu::SurfaceHandle surface_handle) override; |
#endif |
// Gets the global instance of the surface tracker. |
static GpuSurfaceTracker* Get() { return GetInstance(); } |
// Adds a surface for a native widget. Returns the surface ID. |
- int AddSurfaceForNativeWidget(gfx::AcceleratedWidget widget); |
+ int AddSurfaceForNativeWidget(SurfaceRecord record); |
// Return true if the surface handle is registered with the tracker. |
bool IsValidSurfaceHandle(gpu::SurfaceHandle surface_handle) const; |
@@ -64,7 +81,7 @@ class GPU_EXPORT GpuSurfaceTracker : public gpu::GpuSurfaceLookup { |
static GpuSurfaceTracker* GetInstance(); |
private: |
- typedef std::map<gpu::SurfaceHandle, gfx::AcceleratedWidget> SurfaceMap; |
+ using SurfaceMap = std::map<gpu::SurfaceHandle, SurfaceRecord>; |
friend struct base::DefaultSingletonTraits<GpuSurfaceTracker>; |
@@ -75,12 +92,6 @@ class GPU_EXPORT GpuSurfaceTracker : public gpu::GpuSurfaceLookup { |
SurfaceMap surface_map_; |
int next_surface_handle_; |
-#if defined(OS_ANDROID) |
- base::Lock surface_view_map_lock_; |
- typedef std::map<gpu::SurfaceHandle, gl::ScopedJavaSurface> SurfaceViewMap; |
- SurfaceViewMap surface_view_map_; |
-#endif |
- |
DISALLOW_COPY_AND_ASSIGN(GpuSurfaceTracker); |
}; |