source: src/Common/Heap.cc @ ecaeac6e

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumwith_gc
Last change on this file since ecaeac6e was ecaeac6e, checked in by Thierry Delisle <tdelisle@…>, 6 years ago

Better statistics formatting

  • Property mode set to 100644
File size: 2.0 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// Heap.cc --
8//
9// Author           : Peter A. Buhr
10// Created On       :
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Thu May  3 16:16:10 2018
13// Update Count     : 2
14//
15
16#include <cassert>
17#include <cmath>
18#include <cstddef>
19#include <cstring>
20#include <iomanip>
21#include <iostream>
22
23namespace HeapStats {
24        #if !defined( WITH_HEAP_STATISTICS )
25                void newPass( const char * const ) {}
26
27                void printStats() {}
28        #else
29                struct StatBlock {
30                        const char * name = nullptr;
31                        size_t mallocs    = 0;
32                        size_t frees      = 0;
33                };
34
35                StatBlock    passes[100];
36                const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
37                size_t       passes_cnt = 0;
38
39                void newPass( const char * const name ) {
40                        passes[passes_cnt].name    = name;
41                        passes[passes_cnt].mallocs = 0;
42                        passes[passes_cnt].frees   = 0;
43                        passes_cnt++;
44
45                        assertf(passes_cnt < passes_size, "Too many passes for HeapStats, increase the size of the array in Heap.h");
46                }
47
48                void printStats() {
49                        size_t nc = 0;
50                        for(size_t i = 0; i < passes_cnt; i++) {
51                                nc = std::max(nc, std::strlen(passes[i].name));
52                        }
53
54                        const char * const title = "Heap Usage Statistic";
55                        for(size_t i = 0; i < (nc + 30); i++) std::cerr << '='; std::cerr << '\n';
56                        for(size_t i = 0; i < (nc + 30 - std::strlen(title)) / 2; i++) std::cerr << ' ';
57                        std::cerr << title << std::endl;
58                        for(size_t i = 0; i < (nc + 30); i++) std::cerr << '-'; std::cerr << '\n';
59                        std::cerr << std::setw(nc) << "Pass";
60                        std::cerr << " | Malloc Count |   Free Count" << std::endl;
61                        for(size_t i = 0; i < (nc + 30); i++) std::cerr << '-'; std::cerr << '\n';
62                        for(size_t i = 0; i < passes_cnt; i++) {
63                                std::cerr << std::setw(nc) << passes[i].name    << " | ";
64                                std::cerr << std::setw(12) << passes[i].mallocs << " | ";
65                                std::cerr << std::setw(12) << passes[i].frees   << "\n";
66                        }
67                }
68        #endif
69}
70
Note: See TracBrowser for help on using the repository browser.