SkInstCnt.h revision 977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9
1528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org/* 2528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Copyright 2012 Google Inc. 3528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * 4528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Use of this source code is governed by a BSD-style license that can be 5528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * found in the LICENSE file. 6528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 7528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 8528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 9528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#ifndef SkInstCnt_DEFINED 10528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define SkInstCnt_DEFINED 11528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 12528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org/* 13528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * The instance counting system consists of three macros that create the 14528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * instance counting machinery. A class is added to the system by adding: 15528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * DECLARE_INST_COUNT at the top of its declaration 16528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * DEFINE_INST_COUNT at the top of its .cpp file 17528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * and a PRINT_INST_COUNT line at the application's end point 18528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 19528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#ifdef SK_DEBUG 20528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define DECLARE_INST_COUNT \ 21528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org class SkInstanceCountHelper { \ 22528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org public: \ 23528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org SkInstanceCountHelper() { \ 24528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org gInstanceCount++; \ 25528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } \ 26528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org \ 27528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org ~SkInstanceCountHelper() { \ 28528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org gInstanceCount--; \ 29528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } \ 30528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org \ 31528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static int32_t gInstanceCount; \ 32528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } fInstanceCountHelper; \ 33528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org \ 34528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static int32_t GetInstanceCount() { \ 35528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return SkInstanceCountHelper::gInstanceCount; \ 36528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } 37528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 38528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define DEFINE_INST_COUNT(className) \ 39528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org int32_t className::SkInstanceCountHelper::gInstanceCount = 0; 40528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 41528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define PRINT_INST_COUNT(className) \ 42528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org SkDebugf("Leaked %s objects: %d\n", \ 43528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org #className, \ 44528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org className::GetInstanceCount()); 45528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#else 46528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define DECLARE_INST_COUNT 47528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define DEFINE_INST_COUNT(className) 48528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#define PRINT_INST_COUNT(className) 49528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#endif 50528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 51528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org#endif // SkInstCnt_DEFINED 52528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org