| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/gpu/gpu_surface_tracker.h" | 5 #include "content/browser/gpu/gpu_surface_tracker.h" |
| 6 | 6 |
| 7 #if defined(OS_ANDROID) | 7 #if defined(OS_ANDROID) |
| 8 #include <android/native_window_jni.h> | 8 #include <android/native_window_jni.h> |
| 9 #endif // defined(OS_ANDROID) | 9 #endif // defined(OS_ANDROID) |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { | 24 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { |
| 25 return base::Singleton<GpuSurfaceTracker>::get(); | 25 return base::Singleton<GpuSurfaceTracker>::get(); |
| 26 } | 26 } |
| 27 | 27 |
| 28 int GpuSurfaceTracker::AddSurfaceForRenderer(int renderer_id, | 28 int GpuSurfaceTracker::AddSurfaceForRenderer(int renderer_id, |
| 29 int render_widget_id) { | 29 int render_widget_id) { |
| 30 base::AutoLock lock(lock_); | 30 base::AutoLock lock(lock_); |
| 31 int surface_id = next_surface_id_++; | 31 int surface_id = next_surface_id_++; |
| 32 surface_map_[surface_id] = | 32 surface_map_[surface_id] = |
| 33 SurfaceInfo(renderer_id, render_widget_id, gfx::kNullAcceleratedWidget, | 33 SurfaceInfo(renderer_id, render_widget_id, gfx::kNullAcceleratedWidget, |
| 34 gfx::GLSurfaceHandle(), NULL); | 34 gfx::GLSurfaceHandle()); |
| 35 return surface_id; | 35 return surface_id; |
| 36 } | 36 } |
| 37 | 37 |
| 38 int GpuSurfaceTracker::LookupSurfaceForRenderer(int renderer_id, | 38 int GpuSurfaceTracker::LookupSurfaceForRenderer(int renderer_id, |
| 39 int render_widget_id) { | 39 int render_widget_id) { |
| 40 base::AutoLock lock(lock_); | 40 base::AutoLock lock(lock_); |
| 41 for (SurfaceMap::iterator it = surface_map_.begin(); it != surface_map_.end(); | 41 for (SurfaceMap::iterator it = surface_map_.begin(); it != surface_map_.end(); |
| 42 ++it) { | 42 ++it) { |
| 43 const SurfaceInfo& info = it->second; | 43 const SurfaceInfo& info = it->second; |
| 44 if (info.renderer_id == renderer_id && | 44 if (info.renderer_id == renderer_id && |
| 45 info.render_widget_id == render_widget_id) { | 45 info.render_widget_id == render_widget_id) { |
| 46 return it->first; | 46 return it->first; |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 return 0; | 49 return 0; |
| 50 } | 50 } |
| 51 | 51 |
| 52 int GpuSurfaceTracker::AddSurfaceForNativeWidget( | 52 int GpuSurfaceTracker::AddSurfaceForNativeWidget( |
| 53 gfx::AcceleratedWidget widget) { | 53 gfx::AcceleratedWidget widget) { |
| 54 base::AutoLock lock(lock_); | 54 base::AutoLock lock(lock_); |
| 55 int surface_id = next_surface_id_++; | 55 int surface_id = next_surface_id_++; |
| 56 surface_map_[surface_id] = | 56 surface_map_[surface_id] = SurfaceInfo(0, 0, widget, gfx::GLSurfaceHandle()); |
| 57 SurfaceInfo(0, 0, widget, gfx::GLSurfaceHandle(), NULL); | |
| 58 return surface_id; | 57 return surface_id; |
| 59 } | 58 } |
| 60 | 59 |
| 61 void GpuSurfaceTracker::RemoveSurface(int surface_id) { | 60 void GpuSurfaceTracker::RemoveSurface(int surface_id) { |
| 62 base::AutoLock lock(lock_); | 61 base::AutoLock lock(lock_); |
| 63 DCHECK(surface_map_.find(surface_id) != surface_map_.end()); | 62 DCHECK(surface_map_.find(surface_id) != surface_map_.end()); |
| 64 surface_map_.erase(surface_id); | 63 surface_map_.erase(surface_id); |
| 65 } | 64 } |
| 66 | 65 |
| 67 bool GpuSurfaceTracker::GetRenderWidgetIDForSurface(int surface_id, | |
| 68 int* renderer_id, | |
| 69 int* render_widget_id) { | |
| 70 base::AutoLock lock(lock_); | |
| 71 SurfaceMap::iterator it = surface_map_.find(surface_id); | |
| 72 if (it == surface_map_.end()) | |
| 73 return false; | |
| 74 const SurfaceInfo& info = it->second; | |
| 75 if (!info.handle.is_transport()) | |
| 76 return false; | |
| 77 *renderer_id = info.renderer_id; | |
| 78 *render_widget_id = info.render_widget_id; | |
| 79 return true; | |
| 80 } | |
| 81 | |
| 82 void GpuSurfaceTracker::SetSurfaceHandle(int surface_id, | 66 void GpuSurfaceTracker::SetSurfaceHandle(int surface_id, |
| 83 const gfx::GLSurfaceHandle& handle) { | 67 const gfx::GLSurfaceHandle& handle) { |
| 84 base::AutoLock lock(lock_); | 68 base::AutoLock lock(lock_); |
| 85 DCHECK(surface_map_.find(surface_id) != surface_map_.end()); | 69 DCHECK(surface_map_.find(surface_id) != surface_map_.end()); |
| 86 SurfaceInfo& info = surface_map_[surface_id]; | 70 SurfaceInfo& info = surface_map_[surface_id]; |
| 87 info.handle = handle; | 71 info.handle = handle; |
| 88 } | 72 } |
| 89 | 73 |
| 90 gfx::GLSurfaceHandle GpuSurfaceTracker::GetSurfaceHandle(int surface_id) { | 74 gfx::GLSurfaceHandle GpuSurfaceTracker::GetSurfaceHandle(int surface_id) { |
| 91 base::AutoLock lock(lock_); | 75 base::AutoLock lock(lock_); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 102 return gfx::kNullAcceleratedWidget; | 86 return gfx::kNullAcceleratedWidget; |
| 103 | 87 |
| 104 #if defined(OS_ANDROID) | 88 #if defined(OS_ANDROID) |
| 105 if (it->second.native_widget != gfx::kNullAcceleratedWidget) | 89 if (it->second.native_widget != gfx::kNullAcceleratedWidget) |
| 106 ANativeWindow_acquire(it->second.native_widget); | 90 ANativeWindow_acquire(it->second.native_widget); |
| 107 #endif // defined(OS_ANDROID) | 91 #endif // defined(OS_ANDROID) |
| 108 | 92 |
| 109 return it->second.native_widget; | 93 return it->second.native_widget; |
| 110 } | 94 } |
| 111 | 95 |
| 112 void GpuSurfaceTracker::SetNativeWidget( | |
| 113 int surface_id, gfx::AcceleratedWidget widget, | |
| 114 SurfaceRef* surface_ref) { | |
| 115 base::AutoLock lock(lock_); | |
| 116 SurfaceMap::iterator it = surface_map_.find(surface_id); | |
| 117 DCHECK(it != surface_map_.end()); | |
| 118 SurfaceInfo& info = it->second; | |
| 119 info.native_widget = widget; | |
| 120 info.surface_ref = surface_ref; | |
| 121 } | |
| 122 | |
| 123 std::size_t GpuSurfaceTracker::GetSurfaceCount() { | 96 std::size_t GpuSurfaceTracker::GetSurfaceCount() { |
| 124 base::AutoLock lock(lock_); | 97 base::AutoLock lock(lock_); |
| 125 return surface_map_.size(); | 98 return surface_map_.size(); |
| 126 } | 99 } |
| 127 | 100 |
| 128 GpuSurfaceTracker::SurfaceInfo::SurfaceInfo() | 101 GpuSurfaceTracker::SurfaceInfo::SurfaceInfo() |
| 129 : renderer_id(0), | 102 : renderer_id(0), |
| 130 render_widget_id(0), | 103 render_widget_id(0), |
| 131 native_widget(gfx::kNullAcceleratedWidget) { } | 104 native_widget(gfx::kNullAcceleratedWidget) { } |
| 132 | 105 |
| 133 GpuSurfaceTracker::SurfaceInfo::SurfaceInfo( | 106 GpuSurfaceTracker::SurfaceInfo::SurfaceInfo( |
| 134 int renderer_id, | 107 int renderer_id, |
| 135 int render_widget_id, | 108 int render_widget_id, |
| 136 const gfx::AcceleratedWidget& native_widget, | 109 const gfx::AcceleratedWidget& native_widget, |
| 137 const gfx::GLSurfaceHandle& handle, | 110 const gfx::GLSurfaceHandle& handle) |
| 138 const scoped_refptr<SurfaceRef>& surface_ref) | |
| 139 : renderer_id(renderer_id), | 111 : renderer_id(renderer_id), |
| 140 render_widget_id(render_widget_id), | 112 render_widget_id(render_widget_id), |
| 141 native_widget(native_widget), | 113 native_widget(native_widget), |
| 142 handle(handle), | 114 handle(handle) {} |
| 143 surface_ref(surface_ref) { } | |
| 144 | 115 |
| 145 GpuSurfaceTracker::SurfaceInfo::~SurfaceInfo() { } | 116 GpuSurfaceTracker::SurfaceInfo::~SurfaceInfo() { } |
| 146 | 117 |
| 147 | 118 |
| 148 } // namespace content | 119 } // namespace content |
| OLD | NEW |