Chromium Code Reviews| 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..96d2e8f519f3dbfcab1bb2cee4e6c8df9e25e075 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::Record::Record(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. |
|
dcheng
2017/04/14 00:55:24
Does this mean that it can be fixed in a followup?
liberato (no reviews please)
2017/04/18 20:47:38
crbug.com/712717 . added comment to reference it.
|
| + if (j_surface != nullptr) |
| + surface = gl::ScopedJavaSurface::AcquireExternalSurface(j_surface); |
| +} |
| +#else // !defined(OS_ANDROID) |
| +GpuSurfaceTracker::Record::Record(gfx::AcceleratedWidget widget) |
| + : widget(widget) {} |
| +#endif // !defined(OS_ANDROID) |
| + |
| +GpuSurfaceTracker::Record::Record(Record&&) = default; |
| + |
| GpuSurfaceTracker::GpuSurfaceTracker() |
| : next_surface_handle_(1) { |
| gpu::GpuSurfaceLookup::InitInstance(this); |
| @@ -27,11 +44,11 @@ GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { |
| return base::Singleton<GpuSurfaceTracker>::get(); |
| } |
| -int GpuSurfaceTracker::AddSurfaceForNativeWidget( |
| - gfx::AcceleratedWidget widget) { |
| +int GpuSurfaceTracker::AddSurfaceForNativeWidget(Record record) { |
| base::AutoLock lock(surface_map_lock_); |
| gpu::SurfaceHandle surface_handle = next_surface_handle_++; |
| - surface_map_[surface_handle] = widget; |
| + surface_map_.insert( |
| + SurfaceMap::value_type(surface_handle, std::move(record))); |
|
dcheng
2017/04/14 00:55:24
surface_map.emplace(surface_handle, std::move(reco
liberato (no reviews please)
2017/04/18 20:47:38
Done.
|
| return surface_handle; |
| } |
| @@ -55,38 +72,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()); |