summaryrefslogtreecommitdiffstats
path: root/Lib/profile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/profile.py')
-rwxr-xr-xLib/profile.py65
1 files changed, 5 insertions, 60 deletions
diff --git a/Lib/profile.py b/Lib/profile.py
index 476d598..4991d87 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -41,15 +41,6 @@ import string
import marshal
-# Global variables
-func_norm_dict = {}
-func_norm_counter = 0
-if hasattr(os, 'getpid'):
- pid_string = `os.getpid()`
-else:
- pid_string = ''
-
-
# Sample timer for use with
#i_count = 0
#def integer_timer():
@@ -126,15 +117,6 @@ def help():
# [5] = A dictionary indicating for each function name, the number of times
# it was called by us.
#**************************************************************************
-# We produce function names via a repr() call on the f_code object during
-# profiling. This save a *lot* of CPU time. This results in a string that
-# always looks like:
-# <code object main at 87090, file "/a/lib/python-local/myfib.py", line 76>
-# After we "normalize it, it is a tuple of filename, line, function-name.
-# We wait till we are done profiling to do the normalization.
-# *IF* this repr format changes, then only the normalization routine should
-# need to be fixed.
-#**************************************************************************
class Profile:
def __init__(self, timer=None):
@@ -350,44 +332,11 @@ class Profile:
self.stats = {}
for func in self.timings.keys():
cc, ns, tt, ct, callers = self.timings[func]
- nor_func = self.func_normalize(func)
- nor_callers = {}
+ callers = callers.copy()
nc = 0
for func_caller in callers.keys():
- nor_callers[self.func_normalize(func_caller)]=\
- callers[func_caller]
nc = nc + callers[func_caller]
- self.stats[nor_func] = cc, nc, tt, ct, nor_callers
-
-
- # Override the following function if you can figure out
- # a better name for the binary f_code entries. I just normalize
- # them sequentially in a dictionary. It would be nice if we could
- # *really* see the name of the underlying C code :-). Sometimes
- # you can figure out what-is-what by looking at caller and callee
- # lists (and knowing what your python code does).
-
- def func_normalize(self, func_name):
- global func_norm_dict
- global func_norm_counter
- global func_sequence_num
-
- if func_norm_dict.has_key(func_name):
- return func_norm_dict[func_name]
- if type(func_name) == type(""):
- long_name = string.split(func_name)
- file_name = long_name[-3][1:-2]
- func = long_name[2]
- lineno = long_name[-1][:-1]
- if '?' == func: # Until I find out how to may 'em...
- file_name = 'python'
- func_norm_counter = func_norm_counter + 1
- func = pid_string + ".C." + `func_norm_counter`
- result = file_name , string.atoi(lineno) , func
- else:
- result = func_name
- func_norm_dict[func_name] = result
- return result
+ self.stats[func] = cc, nc, tt, ct, callers
# The following two methods can be called by clients to use
@@ -553,14 +502,11 @@ class OldProfile(Profile):
self.stats = {}
for func in self.timings.keys():
tt, ct, callers = self.timings[func]
- nor_func = self.func_normalize(func)
- nor_callers = {}
+ callers = callers.copy()
nc = 0
for func_caller in callers.keys():
- nor_callers[self.func_normalize(func_caller)]=\
- callers[func_caller]
nc = nc + callers[func_caller]
- self.stats[nor_func] = nc, nc, tt, ct, nor_callers
+ self.stats[func] = nc, nc, tt, ct, callers
@@ -605,8 +551,7 @@ class HotProfile(Profile):
self.stats = {}
for func in self.timings.keys():
nc, tt = self.timings[func]
- nor_func = self.func_normalize(func)
- self.stats[nor_func] = nc, nc, tt, 0, {}
+ self.stats[func] = nc, nc, tt, 0, {}