TLS GrContext count
Review URL: http://codereview.appspot.com/6298077/
git-svn-id: http://skia.googlecode.com/svn/trunk@4262 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 3cc2c89..5a0f689 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -24,6 +24,7 @@
#include "GrStencilBuffer.h"
#include "GrTextStrike.h"
#include "SkTLazy.h"
+#include "SkTLS.h"
#include "SkTrace.h"
#define DEFER_TEXT_RENDERING 1
@@ -68,6 +69,23 @@
return ctx;
}
+namespace {
+void* CreateThreadInstanceCount() {
+ return new int(0);
+}
+void DeleteThreadInstanceCount(void* v) {
+ delete reinterpret_cast<int*>(v);
+}
+#define THREAD_INSTANCE_COUNT \
+ (*reinterpret_cast<int*>(SkTLS::Get(CreateThreadInstanceCount, \
+ DeleteThreadInstanceCount)))
+
+}
+
+int GrContext::GetThreadInstanceCount() {
+ return THREAD_INSTANCE_COUNT;
+}
+
GrContext::~GrContext() {
this->flush();
@@ -87,6 +105,8 @@
GrSafeUnref(fPathRendererChain);
GrSafeUnref(fSoftwarePathRenderer);
fDrawState->unref();
+
+ --THREAD_INSTANCE_COUNT;
}
void GrContext::contextLost() {
@@ -1699,6 +1719,8 @@
}
GrContext::GrContext(GrGpu* gpu) {
+ ++THREAD_INSTANCE_COUNT;
+
fGpu = gpu;
fGpu->ref();
fGpu->setContext(this);