Skip to content
  • Ömer Sinan Ağacan's avatar
    Show sources of cost centers in .prof · d7933cbc
    Ömer Sinan Ağacan authored
    This fixes the problem with duplicate cost-centre names that was
    reported a couple of times before. When a module implements a typeclass
    multiple times for different types, methods of different implementations
    get same cost-centre names and are reported like this:
    
        COST CENTRE MODULE            %time %alloc
    
        CAF         GHC.IO.Handle.FD    0.0   32.8
        CAF         GHC.Read            0.0    1.0
        CAF         GHC.IO.Encoding     0.0    1.8
        showsPrec   Main                0.0    1.2
        readPrec    Main                0.0   19.4
        readPrec    Main                0.0   20.5
        main        Main                0.0   20.2
    
                                                individual      inherited
        COST CENTRE  MODULE  no.     entries  %time %alloc   %time %alloc
    
        MAIN         MAIN     53          0    0.0    0.2     0.0  100.0
         CAF         Main    105          0    0.0    0.3     0.0   62.5
          readPrec   Main    109          1    0.0    0.6     0.0    0.6
          readPrec   Main    107          1    0.0    0.6     0.0    0.6
          main       Main    106          1    0.0   20.2     0.0   61.0
           ==        Main    114          1    0.0    0.0     0.0    0.0
           ==        Main    113          1    0.0    0.0     0.0    0.0
           showsPrec Main    112          2    0.0    1.2     0.0    1.2
           showsPrec Main    111          2    0.0    0.9     0.0    0.9
           readPrec  Main    110          0    0.0   18.8     0.0   18.8
           readPrec  Main    108          0    0.0   19.9     0.0   19.9
    
    It's not possible to tell from the report which `==` took how long. This
    patch adds one more column at the cost of making outputs wider. The
    report now looks like this:
    
        COST CENTRE MODULE           SRC                       %time %alloc
    
        CAF         GHC.IO.Handle.FD <entire-module>             0.0   32.9
        CAF         GHC.IO.Encoding  <entire-module>             0.0    1.8
        CAF         GHC.Read         <entire-module>             0.0    1.0
        showsPrec   Main             Main_1.hs:7:19-22           0.0    1.2
        readPrec    Main             Main_1.hs:7:13-16           0.0   19.5
        readPrec    Main             Main_1.hs:4:13-16           0.0   20.5
        main        Main             Main_1.hs:(10,1)-(20,20)    0.0   20.2
    
                                                                           individual      inherited
        COST CENTRE  MODULE        SRC                      no. entries  %time %alloc   %time %alloc
    
        MAIN         MAIN          <built-in>                53      0    0.0    0.2     0.0  100.0
         CAF         Main          <entire-module>          105      0    0.0    0.3     0.0   62.5
          readPrec   Main          Main_1.hs:7:13-16        109      1    0.0    0.6     0.0    0.6
          readPrec   Main          Main_1.hs:4:13-16        107      1    0.0    0.6     0.0    0.6
          main       Main          Main_1.hs:(10,1)-(20,20) 106      1    0.0   20.2     0.0   61.0
           ==        Main          Main_1.hs:7:25-26        114      1    0.0    0.0     0.0    0.0
           ==        Main          Main_1.hs:4:25-26        113      1    0.0    0.0     0.0    0.0
           showsPrec Main          Main_1.hs:7:19-22        112      2    0.0    1.2     0.0    1.2
           showsPrec Main          Main_1.hs:4:19-22        111      2    0.0    0.9     0.0    0.9
           readPrec  Main          Main_1.hs:7:13-16        110      0    0.0   18.8     0.0   18.8
           readPrec  Main          Main_1.hs:4:13-16        108      0    0.0   19.9     0.0   19.9
         CAF         Text.Read.Lex <entire-module>          102      0    0.0    0.5     0.0    0.5
    
    To fix failing test cases because of different orderings of cost centres
    (e.g. optimized and non-optimized build printing in different order),
    with this patch we also start sorting cost centres before printing. The
    order depends on 1) entries (more entered cost centres come first) 2)
    names (using strcmp() on cost centre names).
    
    Reviewers: simonmar, austin, erikd, bgamari
    
    Reviewed By: simonmar, bgamari
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D2282
    
    GHC Trac Issues: #11543, #8473, #7105
    d7933cbc