Changeset b38433b for src/Common/Stats
- Timestamp:
- Mar 5, 2019, 6:17:55 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- b830e046, c101756
- Parents:
- 34737de (diff), 972540e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src/Common/Stats
- Files:
-
- 4 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/Stats/Counter.cc
r34737de rb38433b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Heap.h--7 // Counter.cc -- 8 8 // 9 9 // Author : Thierry Delisle … … 18 18 #include <algorithm> 19 19 #include <cstring> 20 #include <functional> 20 21 #include <iomanip> 21 22 22 23 namespace Stats { 23 24 namespace Counters { 24 25 template<typename T>26 void ForAllCounters(BaseCounter::list_t & range, size_t level, T func) {27 auto it = range.head;28 while(it) {29 auto next = it->next;30 func(it, level);31 ForAllCounters(it->children, level + 1, func);32 it = next;33 }34 }35 36 25 void print() { 37 if(! BaseCounter::top.head) return;26 if(!top.head) return; 38 27 size_t nc = 0; 39 ForAllCounters(BaseCounter::top, 0, [&](BaseCounter* node, size_t level) {28 Base::ForAll(top, 0, [&](Base::TreeImpl * node, size_t level) { 40 29 nc = std::max(nc, (4 * level) + std::strlen(node->name)); 41 30 }); … … 49 38 50 39 51 ForAllCounters(BaseCounter::top, 0, [&](BaseCounter* node, size_t level) {40 Base::ForAll(top, 0, [&](Base::TreeImpl * node, size_t level) { 52 41 std::cerr << std::string(level * 4, ' '); 53 42 std::cerr << node->name; … … 58 47 std::cerr << " |"; 59 48 std::cerr << '\n'; 60 delete node; 61 }); 49 }, true); 62 50 63 51 std::cerr << std::string(nct, '-') << std::endl; 64 52 } 65 53 66 BaseCounter::list_t BaseCounter::top; 54 Base::TreeTop top; 55 56 extern bool enabled; 67 57 } 68 58 } -
src/Common/Stats/Counter.h
r34737de rb38433b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Heap.h --7 // Counter.h -- 8 8 // 9 9 // Author : Thierry Delisle … … 19 19 #include <iostream> 20 20 21 #include "Common/Stats/Base.h" 22 23 #if defined( NO_STATISTICS ) 24 #define NO_COUNTER_STATISTICS 25 #endif 26 21 27 namespace Stats { 22 28 namespace Counters { 23 void print(); 29 # if defined(NO_COUNTERS_STATISTICS) 24 30 25 class BaseCounter { 26 public: 27 BaseCounter(const char * const name) : name(name) { 28 top.append(this); 31 static inline void print() {} 32 33 class CounterGroup { 34 public: 35 }; 36 37 class SimpleCounter { 38 public: 39 inline void operator++(int) {} 40 inline void operator+=(size_t) {} 41 }; 42 43 template<typename T> 44 class AverageCounter { 45 public: 46 inline void push(T value) {} 47 }; 48 49 template<typename T> 50 class MaxCounter { 51 public: 52 inline void push(T value) {} 53 }; 54 55 template<typename counter_t> 56 counter_t * build(const char * const name) { 57 return nullptr; 29 58 } 30 59 31 BaseCounter(const char * const name, BaseCounter * parent) : name(name) { 32 parent->children.append(this); 60 template<typename counter_t> 61 counter_t * build(const char * const name, Base::Tree<top> * parent) { 62 return nullptr; 33 63 } 34 protected: 35 virtual ~BaseCounter() = default;64 # else 65 extern bool enabled; 36 66 37 struct list_t { 38 BaseCounter * head = nullptr; 39 BaseCounter * tail = nullptr; 67 extern Base::TreeTop top; 40 68 41 void append(BaseCounter * node) { 42 if(!head) { head = node; } 43 else { tail->next = node;} 44 tail = node; 45 } 69 class CounterGroup : public Base::Tree<top> { 70 public: 71 CounterGroup(const char * const name ) : Base::Tree<top>(name) {} 72 CounterGroup(const char * const name, Base::Tree<top> * parent) : Base::Tree<top>(name, parent) {} 73 74 virtual void print(std::ostream & os) override { os << ""; } 75 protected: 76 virtual ~CounterGroup() = default; 46 77 }; 47 78 48 private: 49 virtual void print(std::ostream &) = 0; 79 class SimpleCounter : public Base::Tree<top> { 80 public: 81 SimpleCounter(const char * const name ) : Base::Tree<top>(name) {} 82 SimpleCounter(const char * const name, Base::Tree<top> * parent) : Base::Tree<top>(name, parent) {} 83 84 virtual void print(std::ostream & os) override { os << count; } 85 86 inline void operator++(int) { if(!enabled) return; count++; } 87 inline void operator+=(size_t value) { if(!enabled) return; count += value; } 88 89 protected: 90 virtual ~SimpleCounter() = default; 91 92 private: 93 size_t count = 0; 94 }; 95 50 96 template<typename T> 51 friend void ForAllCounters(BaseCounter::list_t &, size_t, T ); 52 friend void print(); 97 class AverageCounter : public Base::Tree<top> { 98 public: 99 AverageCounter(const char * const name ) : Base::Tree<top>(name), sum{} {} 100 AverageCounter(const char * const name, Base::Tree<top> * parent) : Base::Tree<top>(name, parent), sum{} {} 53 101 54 private: 55 const char * const name; 102 virtual void print(std::ostream & os) { os << sum / count; } 56 103 57 BaseCounter * next = nullptr; 58 list_t children; 104 inline void push(T value) { if(!enabled) return; sum += value; count++; } 59 105 60 static list_t top;61 };106 protected: 107 virtual ~AverageCounter() = default; 62 108 63 class CounterGroup : public BaseCounter {64 public:65 CounterGroup(const char * const name ) : BaseCounter(name) {}66 CounterGroup(const char * const name, BaseCounter * parent) : BaseCounter(name, parent) {}109 private: 110 T sum; 111 size_t count = 1; 112 }; 67 113 68 protected: 69 virtual ~CounterGroup() = default; 114 template<typename T> 115 class MaxCounter : public Base::Tree<top> { 116 public: 117 MaxCounter(const char * const name ) : Base::Tree<top>(name), max{} {} 118 MaxCounter(const char * const name, Base::Tree<top> * parent) : Base::Tree<top>(name, parent), max{} {} 70 119 71 private: 72 virtual void print(std::ostream & os) { 73 os << ""; 74 } 75 template<typename T> 76 friend void ForAllCounters(BaseCounter::list_t &, size_t, T ); 77 friend void print(); 78 }; 120 virtual void print(std::ostream & os) { os << max; } 79 121 80 class SimpleCounter : public BaseCounter { 81 public: 82 SimpleCounter(const char * const name ) : BaseCounter(name) {} 83 SimpleCounter(const char * const name, BaseCounter * parent) : BaseCounter(name, parent) {} 122 inline void push(T value) { if(!enabled) return; max = std::max(max, value); } 84 123 85 inline void operator++(int) { count++; } 86 inline void operator+=(size_t value) { count += value; } 87 protected: 88 virtual ~SimpleCounter() = default; 124 protected: 125 virtual ~MaxCounter() = default; 89 126 90 private: 91 virtual void print(std::ostream & os) { 92 os << count; 93 } 94 template<typename T> 95 friend void ForAllCounters(BaseCounter::list_t &, size_t, T ); 96 friend void print(); 127 private: 128 T max; 129 }; 97 130 98 size_t count = 0; 99 100 }; 101 102 template<typename T> 103 class AverageCounter : public BaseCounter { 104 public: 105 AverageCounter(const char * const name ) : BaseCounter(name), sum{} {} 106 AverageCounter(const char * const name, BaseCounter * parent) : BaseCounter(name, parent), sum{} {} 107 108 inline void push(T value) { 109 sum += value; 110 count++; 131 template<typename counter_t> 132 counter_t * build(const char * const name) { 133 if(!enabled) return nullptr; 134 return new counter_t(name); 111 135 } 112 136 113 protected: 114 virtual ~AverageCounter() = default; 115 116 private: 117 virtual void print(std::ostream & os) { 118 os << sum / count; 137 template<typename counter_t> 138 counter_t * build(const char * const name, Base::Tree<top> * parent) { 139 if(!enabled) return nullptr; 140 return new counter_t(name, parent); 119 141 } 120 template<typename F> 121 friend void ForAllCounters(BaseCounter::list_t &, size_t, F ); 122 friend void print(); 123 124 T sum; 125 size_t count = 1; 126 }; 127 128 template<typename T> 129 class MaxCounter : public BaseCounter { 130 public: 131 MaxCounter(const char * const name ) : BaseCounter(name), max{} {} 132 MaxCounter(const char * const name, BaseCounter * parent) : BaseCounter(name, parent), max{} {} 133 134 inline void push(T value) { 135 max = std::max(max, value); 136 } 137 138 protected: 139 virtual ~MaxCounter() = default; 140 141 private: 142 virtual void print(std::ostream & os) { 143 os << max; 144 } 145 template<typename F> 146 friend void ForAllCounters(BaseCounter::list_t &, size_t, F ); 147 friend void print(); 148 149 T max; 150 }; 142 # endif 151 143 } 152 144 } -
src/Common/Stats/Heap.cc
r34737de rb38433b 21 21 #include <iostream> 22 22 23 #if defined( NO_STATISTICS ) 24 #define NO_HEAP_STATISTICS 25 #endif 26 23 27 namespace Stats { 24 28 namespace Heap { … … 28 32 void print() {} 29 33 #else 34 extern bool enabled; 35 30 36 struct StatBlock { 31 37 const char * name = nullptr; ///< Name of this pass … … 77 83 78 84 void print() { 85 if(!enabled) return; 86 79 87 size_t nc = 0; 80 88 size_t total_mallocs = 0; … … 166 174 void * malloc( size_t size ) { 167 175 static auto __malloc = reinterpret_cast<void * (*)(size_t)>(interpose_symbol( "malloc", nullptr )); 168 if( passes_cnt > 0 ) {176 if( enabled && passes_cnt > 0 ) { 169 177 passes[passes_cnt - 1].mallocs++; 170 178 passes[passes_cnt - 1].n_allocs++; … … 177 185 void free( void * ptr ) { 178 186 static auto __free = reinterpret_cast<void (*)(void *)>(interpose_symbol( "free", nullptr )); 179 if( passes_cnt > 0 ) {187 if( enabled && passes_cnt > 0 ) { 180 188 passes[passes_cnt - 1].frees++; 181 189 passes[passes_cnt - 1].n_allocs--; … … 186 194 void * calloc( size_t nelem, size_t size ) { 187 195 static auto __calloc = reinterpret_cast<void * (*)(size_t, size_t)>(interpose_symbol( "calloc", nullptr )); 188 if( passes_cnt > 0 ) {196 if( enabled && passes_cnt > 0 ) { 189 197 passes[passes_cnt - 1].mallocs++; 190 198 passes[passes_cnt - 1].n_allocs++; … … 198 206 static auto __realloc = reinterpret_cast<void * (*)(void *, size_t)>(interpose_symbol( "realloc", nullptr )); 199 207 void * s = __realloc( ptr, size ); 200 if ( s != ptr && passes_cnt > 0 ) { // did realloc get new storage ?208 if ( enabled && s != ptr && passes_cnt > 0 ) { // did realloc get new storage ? 201 209 passes[passes_cnt - 1].mallocs++; 202 210 passes[passes_cnt - 1].frees++;
Note:
See TracChangeset
for help on using the changeset viewer.