SkInstCnt.h revision 3227ab5f6454b3b553284abd5c9894a8d1c7e845
182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner/*
282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner * Copyright 2012 Google Inc.
382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner *
482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner * Use of this source code is governed by a BSD-style license that can be
582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner * found in the LICENSE file.
682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner */
782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#ifndef SkInstCnt_DEFINED
1082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#define SkInstCnt_DEFINED
1182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
1282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner/*
1382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner * The instance counting system consists of three macros that create the
1482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner * instance counting machinery. A class is added to the system by adding:
15af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner *   DECLARE_INST_COUNT at the top of its declaration
16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak *   DEFINE_INST_COUNT at the top of its .cpp file
17674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak *   and a PRINT_INST_COUNT line at the application's end point
18af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner */
19152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner#ifdef SK_DEBUG
204a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindola#define DECLARE_INST_COUNT                  \
21255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth    class SkInstanceCountHelper {           \
2282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    public:                                 \
232d28617de2b0b731c08d1af9e830f31e14ac75b4Evan Cheng        SkInstanceCountHelper() {           \
2482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner            gInstanceCount++;               \
2582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner        }                                   \
26cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                                            \
27cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines        ~SkInstanceCountHelper() {          \
28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines            gInstanceCount--;               \
29cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines        }                                   \
30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                                            \
31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines        static int32_t gInstanceCount;      \
32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    } fInstanceCountHelper;                 \
33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                                            \
34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    static int32_t GetInstanceCount() {     \
35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines        return SkInstanceCountHelper::gInstanceCount;   \
36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    }
37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define DEFINE_INST_COUNT(className)        \
39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    int32_t className::SkInstanceCountHelper::gInstanceCount = 0;
40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRINT_INST_COUNT(className)         \
42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    SkDebugf("Leaked %s objects: %d\n",     \
43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                  #className,               \
44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                  className::GetInstanceCount());
45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#else
46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define DECLARE_INST_COUNT
47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define DEFINE_INST_COUNT(className)
48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PRINT_INST_COUNT(className)
49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif
50cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif // SkInstCnt_DEFINED
52cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines