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 |