From 5e67f87430d581155c700bb33ac0b43ed5de20b7 Mon Sep 17 00:00:00 2001 From: Jamie Gennis Date: Mon, 10 May 2010 17:33:32 -0700 Subject: Add incStrong and decStrong methods to android_native_{window,buffer}_t. This change adds the methods necessary to use sp<> to handle refcounting android_native_window_t and android_native_buffer_t. The new methods forward the refcounting operations to the corresponding android_native_base_t functions. Change-Id: I7de8e262728e439bc1efdf69374a2a9f6f432ced --- include/ui/android_native_buffer.h | 9 +++++++++ include/ui/egl/android_natives.h | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/ui/android_native_buffer.h b/include/ui/android_native_buffer.h index 9c92af8..402843e 100644 --- a/include/ui/android_native_buffer.h +++ b/include/ui/android_native_buffer.h @@ -33,6 +33,15 @@ typedef struct android_native_buffer_t common.version = sizeof(android_native_buffer_t); memset(common.reserved, 0, sizeof(common.reserved)); } + + // Implement the methods that sp expects so that it + // can be used to automatically refcount android_native_buffer_t's. + void incStrong(const void* id) const { + common.incRef(const_cast(&common)); + } + void decStrong(const void* id) const { + common.decRef(const_cast(&common)); + } #endif struct android_native_base_t common; diff --git a/include/ui/egl/android_natives.h b/include/ui/egl/android_natives.h index 471c3c7..49bfa2b 100644 --- a/include/ui/egl/android_natives.h +++ b/include/ui/egl/android_natives.h @@ -98,6 +98,15 @@ typedef struct android_native_window_t common.version = sizeof(android_native_window_t); memset(common.reserved, 0, sizeof(common.reserved)); } + + // Implement the methods that sp expects so that it + // can be used to automatically refcount android_native_window_t's. + void incStrong(const void* id) const { + common.incRef(const_cast(&common)); + } + void decStrong(const void* id) const { + common.decRef(const_cast(&common)); + } #endif struct android_native_base_t common; @@ -291,6 +300,15 @@ namespace android { template class EGLNativeBase : public NATIVE_TYPE, public REF { +public: + // Disambiguate between the incStrong in REF and NATIVE_TYPE + void incStrong(const void* id) const { + REF::incStrong(id); + } + void decStrong(const void* id) const { + REF::decStrong(id); + } + protected: typedef EGLNativeBase BASE; EGLNativeBase() : NATIVE_TYPE(), REF() { -- cgit v1.1