Skip to content
Snippets Groups Projects
Select Git revision
  • 341c1fda5e17156619fb71acfc7082b2669b4b72
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

lsm.c

Blame
  • bloat-o-meter 2.20 KiB
    #!/usr/bin/python
    #
    # Copyright 2004 Matt Mackall <mpm@selenic.com>
    #
    # inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen
    #
    # This software may be used and distributed according to the terms
    # of the GNU General Public License, incorporated herein by reference.
    
    import sys, os, re
    from signal import signal, SIGPIPE, SIG_DFL
    
    signal(SIGPIPE, SIG_DFL)
    
    if len(sys.argv) != 3:
        sys.stderr.write("usage: %s file1 file2\n" % sys.argv[0])
        sys.exit(-1)
    
    re_NUMBER = re.compile(r'\.[0-9]+')
    
    def getsizes(file):
        sym = {}
        with os.popen("nm --size-sort " + file) as f:
            for line in f:
                size, type, name = line.split()
                if type in "tTdDbBrR":
                    # strip generated symbols
                    if name.startswith("__mod_"): continue
                    if name.startswith("SyS_"): continue
                    if name.startswith("compat_SyS_"): continue
                    if name == "linux_banner": continue
                    # statics and some other optimizations adds random .NUMBER
                    name = re_NUMBER.sub('', name)
                    sym[name] = sym.get(name, 0) + int(size, 16)
        return sym
    
    old = getsizes(sys.argv[1])
    new = getsizes(sys.argv[2])
    grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0
    delta, common = [], {}
    otot, ntot = 0, 0
    
    for a in old:
        if a in new:
            common[a] = 1
    
    for name in old:
        otot += old[name]
        if name not in common:
            remove += 1
            down += old[name]
            delta.append((-old[name], name))
    
    for name in new:
        ntot += new[name]
        if name not in common:
            add += 1
            up += new[name]
            delta.append((new[name], name))
    
    for name in common:
            d = new.get(name, 0) - old.get(name, 0)
            if d>0: grow, up = grow+1, up+d
            if d<0: shrink, down = shrink+1, down-d
            delta.append((d, name))
    
    delta.sort()
    delta.reverse()
    
    print("add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s (%s)" % \
          (add, remove, grow, shrink, up, -down, up-down))
    print("%-40s %7s %7s %+7s" % ("function", "old", "new", "delta"))
    for d, n in delta:
        if d: print("%-40s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d))
    
    print("Total: Before=%d, After=%d, chg %+.2f%%" % \
        (otot, ntot, (ntot - otot)*100.0/otot))