Changeset 6d611fb


Ignore:
Timestamp:
May 3, 2018, 5:02:05 PM (3 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, with_gc
Children:
01690b7
Parents:
c9d5c4f
Message:

Implemented heap stats backend

Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/FixNames.cc

    rc9d5c4f r6d611fb  
    5656                auto && name = SymTab::Mangler::mangle( mainDecl.get() );
    5757                // std::cerr << name << std::endl;
    58                 return name;
     58                return std::move(name);
    5959        }
    6060        std::string mangle_main_args() {
     
    7979                auto&& name = SymTab::Mangler::mangle( mainDecl.get() );
    8080                // std::cerr << name << std::endl;
    81                 return name;
     81                return std::move(name);
    8282        }
    8383
  • src/Common/Heap.cc

    rc9d5c4f r6d611fb  
    1414//
    1515
    16 namespace HeapStats{
    17   void newPass( const char * const name ) {}
    18   void printStats() {}
     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
    1956}
    2057
  • src/Common/Heap.h

    rc9d5c4f r6d611fb  
    1717
    1818namespace HeapStats {
    19   void newPass( const char * const name );
    20   void printStats();
     19        void newPass( const char * const name );
     20        void printStats();
    2121}
  • src/main.cc

    rc9d5c4f r6d611fb  
    390390
    391391        deleteAll( translationUnit );
    392         HeapStats::printStats();
     392        if(!libcfap && !treep) HeapStats::printStats();
    393393        return 0;
    394394} // main
Note: See TracChangeset for help on using the changeset viewer.