Changes in / [58e822a:8dbedfc]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/Heap.cc

    r58e822a r8dbedfc  
    2121#include <iostream>
    2222
    23 #define WITH_HEAP_STATISTICS
     23//#define WITH_HEAP_STATISTICS
    2424
    2525namespace HeapStats {
     
    3030#else
    3131        struct StatBlock {
    32                 const char * name  = nullptr;   ///< Name of this pass
    33                 size_t mallocs     = 0;                 ///< Allocations in this pass
    34                 size_t frees       = 0;                 ///< Frees in this pass
    35                 size_t n_allocs    = 0;                 ///< Current number of live allocations
    36                 size_t peak_allocs = 0;                 ///< Peak number of live allocations this pass
     32                const char * name = nullptr;
     33                size_t mallocs    = 0;
     34                size_t frees      = 0;
    3735        };
    3836
    39         StatBlock    passes[100] = {{ "Pre-Parse", 0, 0, 0, 0 }};
     37        StatBlock    passes[100] = {{ "Pre-Parse", 0, 0 }};
    4038        const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
    4139        size_t       passes_cnt = 1;
     
    4543                passes[passes_cnt].mallocs = 0;
    4644                passes[passes_cnt].frees   = 0;
    47                 passes[passes_cnt].n_allocs
    48                         = passes[passes_cnt].peak_allocs
    49                         = passes[passes_cnt-1].n_allocs;
    5045                passes_cnt++;
    5146
     
    6055        }
    6156
    62         void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees, size_t overall_peak) {
     57        void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees) {
    6358                std::cerr << std::setw(nc) << stat.name;
    6459                std::cerr << " | ";
    6560
    66                 print(stat.mallocs,     total_mallocs);
    67                 print(stat.frees,       total_frees  );
    68                 print(stat.peak_allocs, overall_peak );
     61                print(stat.mallocs, total_mallocs);
     62                print(stat.frees  , total_frees  );
    6963                std::cerr << "\n";
    7064        }
     
    8175                size_t total_mallocs = 0;
    8276                size_t total_frees   = 0;
    83                 size_t overall_peak  = 0;
    8477                for(size_t i = 0; i < passes_cnt; i++) {
    8578                        nc = std::max(nc, std::strlen(passes[i].name));
    8679                        total_mallocs += passes[i].mallocs;
    8780                        total_frees   += passes[i].frees;
    88                         overall_peak = std::max(overall_peak, passes[i].peak_allocs);
    8981                }
    90                 size_t nct = nc + 65;
     82                size_t nct = nc + 44;
    9183
    9284                const char * const title = "Heap Usage Statistic";
     
    9688                print('-', nct);
    9789                std::cerr << std::setw(nc) << "Pass";
    98                 std::cerr << " |       Malloc Count |         Free Count |        Peak Allocs |" << std::endl;
     90                std::cerr << " |       Malloc Count |         Free Count |" << std::endl;
    9991
    10092                print('-', nct);
    10193                for(size_t i = 0; i < passes_cnt; i++) {
    102                         print(passes[i], nc, total_mallocs, total_frees, overall_peak);
     94                        print(passes[i], nc, total_mallocs, total_frees);
    10395                }
    10496                print('-', nct);
    105                 print({"Sum", total_mallocs, total_frees, 0, overall_peak},
    106                         nc, total_mallocs, total_frees, overall_peak);
     97                print({"Sum", total_mallocs, total_frees}, nc, total_mallocs, total_frees);
    10798
    10899        }
     
    167158                void * malloc( size_t size ) {
    168159                        static auto __malloc = reinterpret_cast<void * (*)(size_t)>(interpose_symbol( "malloc", nullptr ));
    169                         if( passes_cnt > 0 ) {
    170                                 passes[passes_cnt - 1].mallocs++;
    171                                 passes[passes_cnt - 1].n_allocs++;
    172                                 passes[passes_cnt - 1].peak_allocs
    173                                         = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
    174                         }
     160                        if( passes_cnt > 0 ) passes[passes_cnt - 1].mallocs++;
    175161                        return __malloc( size );
    176162                }
     
    178164                void free( void * ptr ) {
    179165                        static auto __free = reinterpret_cast<void   (*)(void *)>(interpose_symbol( "free", nullptr ));
    180                         if( passes_cnt > 0 ) {
    181                                 passes[passes_cnt - 1].frees++;
    182                                 passes[passes_cnt - 1].n_allocs--;
    183                         }
     166                        if( passes_cnt > 0 ) passes[passes_cnt - 1].frees++;
    184167                        return __free( ptr );
    185168                }
     
    187170                void * calloc( size_t nelem, size_t size ) {
    188171                        static auto __calloc = reinterpret_cast<void * (*)(size_t, size_t)>(interpose_symbol( "calloc", nullptr ));
    189                         if( passes_cnt > 0 ) {
    190                                 passes[passes_cnt - 1].mallocs++;
    191                                 passes[passes_cnt - 1].n_allocs++;
    192                                 passes[passes_cnt - 1].peak_allocs
    193                                         = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs);
    194                         }
     172                        if( passes_cnt > 0 ) passes[passes_cnt - 1].mallocs++;
    195173                        return __calloc( nelem, size );
    196174                }
Note: See TracChangeset for help on using the changeset viewer.