source: src/Common/Heap.cc @ 6d611fb

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 6d611fb was 6d611fb, checked in by Thierry Delisle <tdelisle@…>, 6 years ago

Implemented heap stats backend

  • Property mode set to 100644
File size: 1.5 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 <cstddef>
17#include <cassert>
18#include <iomanip>
19#include <iostream>
20
21namespace HeapStats {
22        #if !defined( WITH_HEAP_STATISTICS )
23                void newPass( const char * const ) {}
24
25                void printStats() {}
26        #else
27                struct StatBlock {
28                        const char * name = nullptr;
29                        size_t mallocs    = 0;
30                        size_t frees      = 0;
31                };
32
33                StatBlock    passes[100];
34                const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
35                size_t       passes_cnt = 0;
36
37                void newPass( const char * const name ) {
38                        passes[passes_cnt].name    = name;
39                        passes[passes_cnt].mallocs = 0;
40                        passes[passes_cnt].frees   = 0;
41                        passes_cnt++;
42
43                        assertf(passes_cnt < passes_size, "Too many passes for HeapStats, increase the size of the array in Heap.h");
44                }
45
46                void printStats() {
47                        std::cerr << "Heap usage statistic:" << std::endl;
48                        std::cerr << "Pass                 | Malloc Count |   Free Count" << std::endl;
49                        for(size_t i = 0; i < passes_cnt; i++) {
50                                std::cerr << std::setw(20) << passes[i].name    << " | ";
51                                std::cerr << std::setw(12) << passes[i].mallocs << " | ";
52                                std::cerr << std::setw(12) << passes[i].frees   << "\n";
53                        }
54                }
55        #endif
56}
57
Note: See TracBrowser for help on using the repository browser.