summaryrefslogtreecommitdiff
path: root/Lib/hotshot/log.py
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-10-29 20:57:23 +0000
committerFred Drake <fdrake@acm.org>2001-10-29 20:57:23 +0000
commitb5cb45d42676bfed4df518f35146636a3d373595 (patch)
tree55b504b75f8f24fff8beefad28a07a1cf1a0762a /Lib/hotshot/log.py
parent97500b7e127439e57fe961bd4d5553edc90178af (diff)
downloadcpython-b5cb45d42676bfed4df518f35146636a3d373595.tar.gz
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/log.py')
-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 df07ddddbb..55dda217f2 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)