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