Index: content/browser/gpu/gpu_surface_tracker.cc |
diff --git a/content/browser/gpu/gpu_surface_tracker.cc b/content/browser/gpu/gpu_surface_tracker.cc |
index 4b828f80dc9f15cf9f5f656e619892e18b6d064d..3f089aac0a2ea6b1ef3b4b5068a2069eae91e28f 100644 |
--- a/content/browser/gpu/gpu_surface_tracker.cc |
+++ b/content/browser/gpu/gpu_surface_tracker.cc |
@@ -6,11 +6,26 @@ |
#include "base/logging.h" |
+#if defined(OS_ANDROID) |
+#include "base/command_line.h" |
+#include "content/public/common/content_switches.h" |
+#include <android/native_window_jni.h> |
+#endif |
+ |
GpuSurfaceTracker::GpuSurfaceTracker() |
: next_surface_id_(1) { |
} |
GpuSurfaceTracker::~GpuSurfaceTracker() { |
+#if defined(OS_ANDROID) |
+ // Handles should have been inserted with an extra ref, so release those now. |
+ for (SurfaceMap::iterator it = surface_map_.begin(); it != surface_map_.end(); |
+ ++it) { |
+ const SurfaceInfo& info = it->second; |
+ if (info.native_widget) |
+ ANativeWindow_release(info.native_widget); |
+ } |
+#endif |
} |
GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { |
@@ -94,3 +109,18 @@ gfx::PluginWindowHandle GpuSurfaceTracker::GetSurfaceWindowHandle( |
return gfx::kNullPluginWindow; |
return it->second.handle.handle; |
} |
+ |
+gfx::AcceleratedWidget GpuSurfaceTracker::GetNativeWidget(int surface_id) { |
+ GpuSurfaceTracker* tracker = GpuSurfaceTracker::GetInstance(); |
apatrick_chromium
2012/07/24 18:34:16
This member function is not static. Why is it gett
no sievers
2012/07/26 21:21:17
Done.
|
+ base::AutoLock lock(tracker->lock_); |
+ DCHECK(tracker->surface_map_.find(surface_id) != tracker->surface_map_.end()); |
+ return tracker->surface_map_[surface_id].native_widget; |
apatrick_chromium
2012/07/24 18:34:16
How exactly does this differ from the handle retur
no sievers
2012/07/26 21:21:17
The native AcceleratedWidget on Android is a point
|
+} |
+ |
+#if defined(OS_ANDROID) |
+gfx::AcceleratedWidget GetNativeWidgetAndroid(int surface_id) { |
+ DCHECK(CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessGPU)); |
+ GpuSurfaceTracker* tracker = GpuSurfaceTracker::GetInstance(); |
+ return tracker->GetNativeWidget(surface_id); |
+} |
+#endif |