SkInstCnt.h revision f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2
1f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2robertphillips@google.com/* 2f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2robertphillips@google.com * Copyright 2012 Google Inc. 3f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2robertphillips@google.com * 4f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2robertphillips@google.com * Use of this source code is governed by a BSD-style license that can be 5f6747b0b90b3a270ec7b7bdfdc211cf5c19f28c2robertphillips@google.com * found in the LICENSE file. 6977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com */ 7977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 8977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 9977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#ifndef SkInstCnt_DEFINED 10977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define SkInstCnt_DEFINED 11977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 12977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com/* 13977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com * The instance counting system consists of three macros that create the 14977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com * instance counting machinery. A class is added to the system by adding: 15977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com * DECLARE_INST_COUNT at the top of its declaration 16977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com * DEFINE_INST_COUNT at the top of its .cpp file 17977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com * and a PRINT_INST_COUNT line at the application's end point 18977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com */ 19977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#ifdef SK_DEBUG 20977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define DECLARE_INST_COUNT \ 21977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com class SkInstanceCountHelper { \ 22977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com public: \ 23977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com SkInstanceCountHelper() { \ 24977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com gInstanceCount++; \ 25977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com } \ 26977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com \ 27977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com ~SkInstanceCountHelper() { \ 28977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com gInstanceCount--; \ 29977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com } \ 30977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com \ 31977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com static int32_t gInstanceCount; \ 32977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com } fInstanceCountHelper; \ 33977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com \ 34977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com static int32_t GetInstanceCount() { \ 35977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com return SkInstanceCountHelper::gInstanceCount; \ 36977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com } 37977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 38977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define DEFINE_INST_COUNT(className) \ 39977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com int32_t className::SkInstanceCountHelper::gInstanceCount = 0; 40977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 41977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define PRINT_INST_COUNT(className) \ 42977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com SkDebugf("Leaked %s objects: %d\n", \ 43977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com #className, \ 44977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com className::GetInstanceCount()); 45977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#else 46977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define DECLARE_INST_COUNT 47977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define DEFINE_INST_COUNT(className) 48977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#define PRINT_INST_COUNT(className) 49977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#endif 50977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com 51977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com#endif // SkInstCnt_DEFINED 52