>From 4340ef7867eec865b41594a0a23b01d2162809d0 Mon Sep 17 00:00:00 2001 From: Bertram Felgenhauer Date: Thu, 11 Dec 2008 17:05:40 +0100 Subject: [PATCH 2/4] Filter out unused instance counters in debug This makes the output more predictable (see misc_debug unit test) --- nel/include/nel/misc/debug.h | 3 +++ nel/src/misc/debug.cpp | 6 +++++- nel/tools/nel_unit_test/ut_misc_debug.h | 17 ++--------------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/nel/include/nel/misc/debug.h b/nel/include/nel/misc/debug.h index fdfd64e..f2aebad 100644 --- a/nel/include/nel/misc/debug.h +++ b/nel/include/nel/misc/debug.h @@ -675,6 +675,7 @@ struct TInstanceCounterData sint32 _InstanceCounter; sint32 _DeltaCounter; const char *_ClassName; + bool _Touched; TInstanceCounterData(const char *className); @@ -819,10 +820,12 @@ public: \ className##InstanceCounter() \ { \ _InstanceCounterData._InstanceCounter++; \ + _InstanceCounterData._Touched = true; \ } \ className##InstanceCounter(const className##InstanceCounter &/* other */) \ { \ _InstanceCounterData._InstanceCounter++; \ + _InstanceCounterData._Touched = true; \ } \ \ ~className##InstanceCounter()\ diff --git a/nel/src/misc/debug.cpp b/nel/src/misc/debug.cpp index 460268f..319eaa8 100644 --- a/nel/src/misc/debug.cpp +++ b/nel/src/misc/debug.cpp @@ -1246,7 +1246,8 @@ CInstanceCounterLocalManager *CInstanceCounterLocalManager::_Instance = NULL; TInstanceCounterData::TInstanceCounterData(const char *className) : _InstanceCounter(0), _DeltaCounter(0), - _ClassName(className) + _ClassName(className), + _Touched(false) { CInstanceCounterLocalManager::getInstance().registerInstanceCounter(this); } @@ -1285,6 +1286,9 @@ std::string CInstanceCounterManager::displayCounters() const { const TInstanceCounterData *icd = *first; + if (!icd->_Touched) + break; + if( counters.find(icd->_ClassName) == counters.end()) { // insert a new item diff --git a/nel/tools/nel_unit_test/ut_misc_debug.h b/nel/tools/nel_unit_test/ut_misc_debug.h index 22a1156..080b290 100644 --- a/nel/tools/nel_unit_test/ut_misc_debug.h +++ b/nel/tools/nel_unit_test/ut_misc_debug.h @@ -202,23 +202,10 @@ private: } - // FIXME: This is brittle - the precise list of counters depends on how much of - // NeL gets linked with the unit tests. The order is also mostly unpredictable - // with Unix shared objects. -#ifdef NL_OS_UNIX - string ref = "Listing 6 Instance counters :\n" -#else - string ref = "Listing 5 Instance counters :\n" -#endif // NL_OS_UNIX + string ref = "Listing 3 Instance counters :\n" " Class 'CFoo1 ', \t 10 instances, \t 10 delta\n" " Class 'CFoo2 ', \t 20 instances, \t 20 delta\n" - " Class 'CFoo3 ', \t 10 instances, \t 10 delta\n" - " Class 'CSafeSingleton ', \t 0 instances, \t 0 delta\n" - " Class 'CUnsafeSingleton ', \t 0 instances, \t 0 delta\n" -#ifdef NL_OS_UNIX - " Class 'CWordsDictionary ', \t 0 instances, \t 0 delta\n" -#endif // NL_OS_UNIX - ""; + " Class 'CFoo3 ', \t 10 instances, \t 10 delta\n"; string ret = NLMISC::CInstanceCounterManager::getInstance().displayCounters(); -- 1.6.1.3