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
This commit is contained in:
bsalomon@google.com 2012-06-15 14:10:09 +00:00
parent f69a11b5c5
commit c0af317331
2 changed files with 27 additions and 0 deletions

View File

@ -42,6 +42,11 @@ public:
static GrContext* Create(GrEngine engine, static GrContext* Create(GrEngine engine,
GrPlatform3DContext context3D); GrPlatform3DContext context3D);
/**
* Returns the number of GrContext instances for the current thread.
*/
static int GetThreadInstanceCount();
virtual ~GrContext(); virtual ~GrContext();
/** /**

View File

@ -24,6 +24,7 @@
#include "GrStencilBuffer.h" #include "GrStencilBuffer.h"
#include "GrTextStrike.h" #include "GrTextStrike.h"
#include "SkTLazy.h" #include "SkTLazy.h"
#include "SkTLS.h"
#include "SkTrace.h" #include "SkTrace.h"
#define DEFER_TEXT_RENDERING 1 #define DEFER_TEXT_RENDERING 1
@ -68,6 +69,23 @@ GrContext* GrContext::Create(GrEngine engine,
return ctx; 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() { GrContext::~GrContext() {
this->flush(); this->flush();
@ -87,6 +105,8 @@ GrContext::~GrContext() {
GrSafeUnref(fPathRendererChain); GrSafeUnref(fPathRendererChain);
GrSafeUnref(fSoftwarePathRenderer); GrSafeUnref(fSoftwarePathRenderer);
fDrawState->unref(); fDrawState->unref();
--THREAD_INSTANCE_COUNT;
} }
void GrContext::contextLost() { void GrContext::contextLost() {
@ -1699,6 +1719,8 @@ static inline intptr_t setOrClear(intptr_t bits, int shift, intptr_t pred) {
} }
GrContext::GrContext(GrGpu* gpu) { GrContext::GrContext(GrGpu* gpu) {
++THREAD_INSTANCE_COUNT;
fGpu = gpu; fGpu = gpu;
fGpu->ref(); fGpu->ref();
fGpu->setContext(this); fGpu->setContext(this);