Index: gpu/ipc/common/gpu_surface_tracker.cc |
diff --git a/gpu/ipc/common/gpu_surface_tracker.cc b/gpu/ipc/common/gpu_surface_tracker.cc |
index b2b8dacdaf75ba8c1bd11f1706ce416fd826cf2c..a93ea2cc665840030c339ca9aac777d7ef3105f8 100644 |
--- a/gpu/ipc/common/gpu_surface_tracker.cc |
+++ b/gpu/ipc/common/gpu_surface_tracker.cc |
@@ -14,6 +14,23 @@ |
namespace gpu { |
+#if defined(OS_ANDROID) |
+GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(gfx::AcceleratedWidget widget, |
+ jobject j_surface) |
+ : widget(widget) { |
+ // TODO(liberato): It would be nice to assert |surface != nullptr|, but we |
+ // can't. in_process_context_factory.cc (for tests) actually calls us without |
+ // a Surface from java. Presumably, nobody uses it. crbug.com/712717 . |
+ if (j_surface != nullptr) |
+ surface = gl::ScopedJavaSurface::AcquireExternalSurface(j_surface); |
+} |
+#else // defined(OS_ANDROID) |
+GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(gfx::AcceleratedWidget widget) |
+ : widget(widget) {} |
+#endif // !defined(OS_ANDROID) |
+ |
+GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(SurfaceRecord&&) = default; |
+ |
GpuSurfaceTracker::GpuSurfaceTracker() |
: next_surface_handle_(1) { |
gpu::GpuSurfaceLookup::InitInstance(this); |
@@ -27,11 +44,10 @@ GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { |
return base::Singleton<GpuSurfaceTracker>::get(); |
} |
-int GpuSurfaceTracker::AddSurfaceForNativeWidget( |
- gfx::AcceleratedWidget widget) { |
+int GpuSurfaceTracker::AddSurfaceForNativeWidget(SurfaceRecord record) { |
base::AutoLock lock(surface_map_lock_); |
gpu::SurfaceHandle surface_handle = next_surface_handle_++; |
- surface_map_[surface_handle] = widget; |
+ surface_map_.emplace(surface_handle, std::move(record)); |
return surface_handle; |
} |
@@ -55,38 +71,22 @@ gfx::AcceleratedWidget GpuSurfaceTracker::AcquireNativeWidget( |
return gfx::kNullAcceleratedWidget; |
#if defined(OS_ANDROID) |
- if (it->second != gfx::kNullAcceleratedWidget) |
- ANativeWindow_acquire(it->second); |
+ if (it->second.widget != gfx::kNullAcceleratedWidget) |
+ ANativeWindow_acquire(it->second.widget); |
#endif // defined(OS_ANDROID) |
- return it->second; |
+ return it->second.widget; |
} |
#if defined(OS_ANDROID) |
-void GpuSurfaceTracker::RegisterViewSurface( |
- int surface_id, jobject j_surface) { |
- base::AutoLock lock(surface_view_map_lock_); |
- DCHECK(surface_view_map_.find(surface_id) == surface_view_map_.end()); |
- |
- surface_view_map_[surface_id] = |
- gl::ScopedJavaSurface::AcquireExternalSurface(j_surface); |
- CHECK(surface_view_map_[surface_id].IsValid()); |
-} |
- |
-void GpuSurfaceTracker::UnregisterViewSurface(int surface_id) |
-{ |
- base::AutoLock lock(surface_view_map_lock_); |
- DCHECK(surface_view_map_.find(surface_id) != surface_view_map_.end()); |
- surface_view_map_.erase(surface_id); |
-} |
- |
-gl::ScopedJavaSurface GpuSurfaceTracker::AcquireJavaSurface(int surface_id) { |
- base::AutoLock lock(surface_view_map_lock_); |
- SurfaceViewMap::const_iterator iter = surface_view_map_.find(surface_id); |
- if (iter == surface_view_map_.end()) |
+gl::ScopedJavaSurface GpuSurfaceTracker::AcquireJavaSurface( |
+ gpu::SurfaceHandle surface_handle) { |
+ base::AutoLock lock(surface_map_lock_); |
+ SurfaceMap::const_iterator it = surface_map_.find(surface_handle); |
+ if (it == surface_map_.end()) |
return gl::ScopedJavaSurface(); |
- const gl::ScopedJavaSurface& j_surface = iter->second; |
+ const gl::ScopedJavaSurface& j_surface = it->second.surface; |
DCHECK(j_surface.IsValid()); |
return gl::ScopedJavaSurface::AcquireExternalSurface( |
j_surface.j_surface().obj()); |