48 bkg_libs = loaded_libs()
50 vmem0,vmem1,libs = load_lib (libname)
51 dVmemOffset = vmem1-vmem0
53 linked_libs = [os.path.basename(lib)
55 if (
not (lib
in bkg_libs)
and
56 os.path.basename(lib) != os.path.basename(libname)
57 and os.access(lib, os.R_OK))]
61 def load_linked_in_libs(linked_libs):
67 except Exception
as err:
68 print (
"** problem loading [%s]\n%s" % (l,err))
74 for _
in range(NRETRY):
75 ok = load_linked_in_libs(linked_libs)
79 print (
"** err: could not reliably load all libs (after %s retries)"%NRETRY)
83 vmem0,vmem1,libs = load_lib (libname)
85 dVmemLib = vmem1-vmem0
86 return (dVmemLib, dVmemOffset, len(linked_libs), len(bkg_libs))
91 _print = display.append
93 for libname
in libnames:
95 bname = os.path.basename(libname)
96 _print(
":: inspecting library: %s" % bname)
97 stats = analyze (libname)
98 _print(
":: nbr linked: %s" % stats[2])
99 _print(
":: dVmem-self: %8.3f Mb" % stats[0])
100 _print(
":: dVmem-all : %8.3f Mb" % stats[1])
102 lib_stats[bname] = dict(
105 nbr_linked= stats[2],
108 import operator
as _op
110 dep_stats = dict((d,
analyze(d)[:2])
for d
in deps)
111 dep_vmem = dep_stats.items()
112 dep_vmem.sort(key=_op.itemgetter(1), reverse=
True)
113 _print(
":: deps: lib-self | lib-all:")
115 _print(
":: --> [%8.3f |%8.3f Mb] (%s)" % (v[0], v[1], k))
117 return display,lib_stats
136 parser = argparse.ArgumentParser(
137 description=
'get the inclusive and exclusive vmem sizes of a library'
139 _add = parser.add_argument
143 help=
'list of library names to be inspected')
147 help=
'enable detailed output')
148 args = parser.parse_args()
150 libnames = args.libnames
151 doDetailed = args.detailed
153 print (
":: inspecting libraries: %s" % libnames)
154 display,lib_stats = analyze_libraries (libnames, doDetailed)
158 save_stats (lib_stats)