summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/utils/Singleton.h12
-rw-r--r--libs/surfaceflinger/BufferAllocator.cpp3
-rw-r--r--libs/ui/BufferMapper.cpp3
-rw-r--r--libs/ui/Surface.cpp3
4 files changed, 15 insertions, 6 deletions
diff --git a/include/utils/Singleton.h b/include/utils/Singleton.h
index ee07df11f479..2f7c7c2dbf25 100644
--- a/include/utils/Singleton.h
+++ b/include/utils/Singleton.h
@@ -49,6 +49,18 @@ private:
static TYPE* sInstance;
};
+/*
+ * use ANDROID_SINGLETON_STATIC_INSTANCE(TYPE) in your implementation file
+ * (eg: <TYPE>.cpp) to create the static instance of Singleton<>'s attributes,
+ * and avoid to have a copy of them in each compilation units Singleton<TYPE>
+ * is used.
+ */
+
+#define ANDROID_SINGLETON_STATIC_INSTANCE(TYPE) \
+ template< class TYPE > Mutex Singleton< TYPE >::sLock; \
+ template<> TYPE* Singleton< TYPE >::sInstance(0);
+
+
// ---------------------------------------------------------------------------
}; // namespace android
diff --git a/libs/surfaceflinger/BufferAllocator.cpp b/libs/surfaceflinger/BufferAllocator.cpp
index 28fe81002f9e..fec7c8770584 100644
--- a/libs/surfaceflinger/BufferAllocator.cpp
+++ b/libs/surfaceflinger/BufferAllocator.cpp
@@ -34,8 +34,7 @@
namespace android {
// ---------------------------------------------------------------------------
-template<class BufferAllocator> Mutex Singleton<BufferAllocator>::sLock;
-template<> BufferAllocator* Singleton<BufferAllocator>::sInstance(0);
+ANDROID_SINGLETON_STATIC_INSTANCE( BufferAllocator )
Mutex BufferAllocator::sLock;
KeyedVector<buffer_handle_t, BufferAllocator::alloc_rec_t> BufferAllocator::sAllocList;
diff --git a/libs/ui/BufferMapper.cpp b/libs/ui/BufferMapper.cpp
index e6ca239831fa..85a029bcc0d2 100644
--- a/libs/ui/BufferMapper.cpp
+++ b/libs/ui/BufferMapper.cpp
@@ -44,8 +44,7 @@
namespace android {
// ---------------------------------------------------------------------------
-template<class BufferMapper> Mutex Singleton<BufferMapper>::sLock;
-template<> BufferMapper* Singleton<BufferMapper>::sInstance(0);
+ANDROID_SINGLETON_STATIC_INSTANCE( BufferMapper )
BufferMapper::BufferMapper()
: mAllocMod(0)
diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp
index 47880f55151d..fb105b346c7e 100644
--- a/libs/ui/Surface.cpp
+++ b/libs/ui/Surface.cpp
@@ -50,8 +50,7 @@ namespace android {
// SurfaceBuffer
// ============================================================================
-template<class SurfaceBuffer> Mutex Singleton<SurfaceBuffer>::sLock;
-template<> SurfaceBuffer* Singleton<SurfaceBuffer>::sInstance(0);
+ANDROID_SINGLETON_STATIC_INSTANCE( SurfaceBuffer )
SurfaceBuffer::SurfaceBuffer()
: BASE(), handle(0), mOwner(false)