summaryrefslogtreecommitdiffstats
path: root/Lib/hotshot
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-10-29 20:57:23 (GMT)
committerFred Drake <fdrake@acm.org>2001-10-29 20:57:23 (GMT)
commit8e26b52a5c97135cfbedb3e046a01d4bbc49cb3a (patch)
tree00ebca093e5de9eb6b9feeba32bc4ff5b66bb9eb /Lib/hotshot
parentf3c54d6fc7b59cbb28c0a74171cd18ae453461bb (diff)
downloadcpython-8e26b52a5c97135cfbedb3e046a01d4bbc49cb3a.zip
cpython-8e26b52a5c97135cfbedb3e046a01d4bbc49cb3a.tar.gz
cpython-8e26b52a5c97135cfbedb3e046a01d4bbc49cb3a.tar.bz2
Update to reflect changes to the low-level logreader: share the info
dictionary instead of building a new one, and provide an overridable method to allow subclasses to catch ADD_INFO records that are not part of the initial block of ADD_INFO records created by the profiler itself.
Diffstat (limited to 'Lib/hotshot')
-rw-r--r--Lib/hotshot/log.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/Lib/hotshot/log.py b/Lib/hotshot/log.py
index df07ddd..55dda21 100644
--- a/Lib/hotshot/log.py
+++ b/Lib/hotshot/log.py
@@ -34,11 +34,25 @@ class LogReader:
# (fileno, lineno) -> filename, funcname
self._funcmap = {}
- self._info = {}
self._reader = _hotshot.logreader(logfn)
self._nextitem = self._reader.next
+ self._info = self._reader.info
self._stack = []
+ def addinfo(self, key, value):
+ """This method is called for each additional ADD_INFO record.
+
+ This can be overridden by applications that want to receive
+ these events. The default implementation does not need to be
+ called by alternate implementations.
+
+ The initial set of ADD_INFO records do not pass through this
+ mechanism; this is only needed to receive notification when
+ new values are added. Subclasses can inspect self._info after
+ calling LogReader.__init__().
+ """
+ pass
+
# Iteration support:
# This adds an optional (& ignored) parameter to next() so that the
# same bound method can be used as the __getitem__() method -- this
@@ -60,15 +74,10 @@ class LogReader:
self._funcmap[(fileno, lineno)] = (filename, tdelta)
continue
if what == WHAT_ADD_INFO:
- key = tdelta.lower()
- try:
- L = self._info[key]
- except KeyError:
- L = []
- self._info[key] = L
- L.append(lineno)
- if key == "current-directory":
- self.cwd = lineno
+ # value already loaded into self.info; call the
+ # overridable addinfo() handler so higher-level code
+ # can pick up the new value
+ self.addinfo(tdelta, lineno)
continue
if what == WHAT_ENTER:
t = self._decode_location(fileno, lineno)