Added instance counting system for SkRefCnt-derived objects
http://codereview.appspot.com/6242070/ git-svn-id: http://skia.googlecode.com/svn/trunk@4162 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
492093951a
commit
3227ab5f64
@ -21,6 +21,7 @@
|
||||
#include "SkImageEncoder.h"
|
||||
#include "SkPicture.h"
|
||||
#include "SkStream.h"
|
||||
#include "SkRefCnt.h"
|
||||
|
||||
static bool gForceBWtext;
|
||||
|
||||
@ -804,7 +805,7 @@ private:
|
||||
}
|
||||
|
||||
int main(int argc, char * const argv[]) {
|
||||
SkAutoGraphics ag;
|
||||
SkGraphics::Init();
|
||||
// we don't need to see this during a run
|
||||
gSkSuppressFontCachePurgeSpew = true;
|
||||
|
||||
@ -892,7 +893,7 @@ int main(int argc, char * const argv[]) {
|
||||
|
||||
GM::SetResourcePath(resourcePath);
|
||||
|
||||
GrContextFactory grFactory;
|
||||
GrContextFactory* grFactory = new GrContextFactory;
|
||||
|
||||
if (readPath) {
|
||||
fprintf(stderr, "reading from %s\n", readPath);
|
||||
@ -935,7 +936,7 @@ int main(int argc, char * const argv[]) {
|
||||
SkAutoTUnref<GrRenderTarget> rt;
|
||||
AutoResetGr autogr;
|
||||
if (kGPU_Backend == gRec[i].fBackend) {
|
||||
GrContext* gr = grFactory.get(gRec[i].fGLContextType);
|
||||
GrContext* gr = grFactory->get(gRec[i].fGLContextType);
|
||||
if (!gr) {
|
||||
continue;
|
||||
}
|
||||
@ -1036,5 +1037,11 @@ int main(int argc, char * const argv[]) {
|
||||
printf("Ran %d tests: %d passed, %d failed, %d missing reference images\n",
|
||||
testsRun, testsPassed, testsFailed, testsMissingReferenceImages);
|
||||
|
||||
delete grFactory;
|
||||
SkGraphics::Term();
|
||||
|
||||
PRINT_INST_COUNT(SkRefCnt);
|
||||
PRINT_INST_COUNT(GrResource);
|
||||
|
||||
return (0 == testsFailed) ? 0 : -1;
|
||||
}
|
||||
|
@ -112,6 +112,7 @@
|
||||
'../src/core/SkRasterClip.cpp',
|
||||
'../src/core/SkRasterizer.cpp',
|
||||
'../src/core/SkRect.cpp',
|
||||
'../src/core/SkRefCnt.cpp',
|
||||
'../src/core/SkRefDict.cpp',
|
||||
'../src/core/SkRegion.cpp',
|
||||
'../src/core/SkRegionPriv.h',
|
||||
@ -185,6 +186,7 @@
|
||||
'../include/core/SkFontHost.h',
|
||||
'../include/core/SkGeometry.h',
|
||||
'../include/core/SkGraphics.h',
|
||||
'../include/core/SkInstCnt.h',
|
||||
'../include/core/SkMallocPixelRef.h',
|
||||
'../include/core/SkMask.h',
|
||||
'../include/core/SkMaskFilter.h',
|
||||
|
51
include/core/SkInstCnt.h
Normal file
51
include/core/SkInstCnt.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SkInstCnt_DEFINED
|
||||
#define SkInstCnt_DEFINED
|
||||
|
||||
/*
|
||||
* The instance counting system consists of three macros that create the
|
||||
* instance counting machinery. A class is added to the system by adding:
|
||||
* DECLARE_INST_COUNT at the top of its declaration
|
||||
* DEFINE_INST_COUNT at the top of its .cpp file
|
||||
* and a PRINT_INST_COUNT line at the application's end point
|
||||
*/
|
||||
#ifdef SK_DEBUG
|
||||
#define DECLARE_INST_COUNT \
|
||||
class SkInstanceCountHelper { \
|
||||
public: \
|
||||
SkInstanceCountHelper() { \
|
||||
gInstanceCount++; \
|
||||
} \
|
||||
\
|
||||
~SkInstanceCountHelper() { \
|
||||
gInstanceCount--; \
|
||||
} \
|
||||
\
|
||||
static int32_t gInstanceCount; \
|
||||
} fInstanceCountHelper; \
|
||||
\
|
||||
static int32_t GetInstanceCount() { \
|
||||
return SkInstanceCountHelper::gInstanceCount; \
|
||||
}
|
||||
|
||||
#define DEFINE_INST_COUNT(className) \
|
||||
int32_t className::SkInstanceCountHelper::gInstanceCount = 0;
|
||||
|
||||
#define PRINT_INST_COUNT(className) \
|
||||
SkDebugf("Leaked %s objects: %d\n", \
|
||||
#className, \
|
||||
className::GetInstanceCount());
|
||||
#else
|
||||
#define DECLARE_INST_COUNT
|
||||
#define DEFINE_INST_COUNT(className)
|
||||
#define PRINT_INST_COUNT(className)
|
||||
#endif
|
||||
|
||||
#endif // SkInstCnt_DEFINED
|
@ -11,6 +11,7 @@
|
||||
#define SkRefCnt_DEFINED
|
||||
|
||||
#include "SkThread.h"
|
||||
#include "SkInstCnt.h"
|
||||
|
||||
/** \class SkRefCnt
|
||||
|
||||
@ -24,6 +25,8 @@
|
||||
*/
|
||||
class SK_API SkRefCnt : SkNoncopyable {
|
||||
public:
|
||||
DECLARE_INST_COUNT
|
||||
|
||||
/** Default construct, initializing the reference count to 1.
|
||||
*/
|
||||
SkRefCnt() : fRefCnt(1) {}
|
||||
|
@ -20,6 +20,8 @@ class GrContext;
|
||||
*/
|
||||
class GrResource : public GrRefCnt {
|
||||
public:
|
||||
DECLARE_INST_COUNT
|
||||
|
||||
/**
|
||||
* Frees the resource in the underlying 3D API. It must be safe to call this
|
||||
* when the resource has been previously abandoned.
|
||||
|
12
src/core/SkRefCnt.cpp
Normal file
12
src/core/SkRefCnt.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
|
||||
#include "SkRefCnt.h"
|
||||
|
||||
DEFINE_INST_COUNT(SkRefCnt)
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include "GrResource.h"
|
||||
#include "GrGpu.h"
|
||||
|
||||
DEFINE_INST_COUNT(GrResource)
|
||||
|
||||
GrResource::GrResource(GrGpu* gpu) {
|
||||
fGpu = gpu;
|
||||
fNext = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user