diff options
| author | Steven Knight <knight@baldmt.com> | 2005-03-04 21:27:30 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2005-03-04 21:27:30 (GMT) |
| commit | 213996506374ad40fc7ee4949e2be3790ead99d9 (patch) | |
| tree | e994d5104a10b6dd448afee90cd411931cf6670a /src/engine/SCons/Debug.py | |
| parent | 3bf4475522d2a24910b147a607dcd9f0d980097f (diff) | |
| download | SCons-213996506374ad40fc7ee4949e2be3790ead99d9.zip SCons-213996506374ad40fc7ee4949e2be3790ead99d9.tar.gz SCons-213996506374ad40fc7ee4949e2be3790ead99d9.tar.bz2 | |
Optimize out N*M suffix matching in Builder.py.
Diffstat (limited to 'src/engine/SCons/Debug.py')
| -rw-r--r-- | src/engine/SCons/Debug.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/engine/SCons/Debug.py b/src/engine/SCons/Debug.py index 0d2d85d..bf7ed43 100644 --- a/src/engine/SCons/Debug.py +++ b/src/engine/SCons/Debug.py @@ -104,3 +104,51 @@ else: def memory(): res = resource.getrusage(resource.RUSAGE_SELF) return res[4] + + + +caller_dicts = {} + +def caller(back=0): + import traceback + tb = traceback.extract_stack(limit=3+back) + key = tb[1][:3] + try: + entry = caller_dicts[key] + except KeyError: + entry = caller_dicts[key] = {} + key = tb[0][:3] + try: + entry[key] = entry[key] + 1 + except KeyError: + entry[key] = 1 + +def dump_caller_counts(file=sys.stdout): + keys = caller_dicts.keys() + keys.sort() + for k in keys: + file.write("Callers of %s:%d(%s):\n" % func_shorten(k)) + counts = caller_dicts[k] + callers = counts.keys() + callers.sort() + for c in callers: + #file.write(" counts[%s] = %s\n" % (c, counts[c])) + t = ((counts[c],) + func_shorten(c)) + file.write(" %6d %s:%d(%s)\n" % t) + +shorten_list = [ + ( '/scons/SCons/', 1), + ( '/src/engine/SCons/', 1), + ( '/usr/lib/python', 0), +] + +def func_shorten(func_tuple): + f = func_tuple[0] + for t in shorten_list: + i = string.find(f, t[0]) + if i >= 0: + if t[1]: + i = i + len(t[0]) + f = f[i:] + break + return (f,)+func_tuple[1:] |
