summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xspeed-test27
-rw-r--r--tracing.py22
2 files changed, 41 insertions, 8 deletions
diff --git a/speed-test b/speed-test
new file mode 100755
index 0000000..76e6b9a
--- /dev/null
+++ b/speed-test
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+measure() {
+python -m timeit \
+ -s 'import logging, tracing' \
+ -s 'logging.basicConfig(filename="/dev/null")' \
+ -s "$1" \
+ -s '
+class Foo(object):
+ def foo(self):
+ tracing.trace("%s", "bar")
+f = Foo()
+' \
+ 'f.foo()'
+
+}
+
+echo Without patterns
+measure "pass"
+
+echo With unmatching pattern
+measure 'tracing.trace_add_pattern("yikes")'
+
+echo With matching pattern
+measure 'tracing.trace_add_pattern("timeit-src")'
diff --git a/tracing.py b/tracing.py
index 191564f..efef8e2 100644
--- a/tracing.py
+++ b/tracing.py
@@ -49,6 +49,7 @@ import traceback
trace_patterns = []
+trace_cache = set()
def trace_add_pattern(pattern):
@@ -57,16 +58,21 @@ def trace_add_pattern(pattern):
def trace_clear_patterns():
del trace_patterns[:]
+ trace_cache.clear()
-def trace(msg):
+def trace(msg, *args):
if trace_patterns:
frames = traceback.extract_stack(limit=2)
filename, lineno, funcname, text = frames[0]
- filename = os.path.basename(filename)
- for pattern in trace_patterns:
- if pattern in filename:
- logging.debug('%s:%s:%s: %s' %
- (filename, lineno, funcname, msg))
- break
-
+ log_it = filename in trace_cache
+ if not log_it:
+ for pattern in trace_patterns:
+ if pattern in filename:
+ log_it = True
+ trace_cache.add(filename)
+ break
+ if log_it:
+ filename = os.path.basename(filename)
+ msg = msg % args
+ logging.debug('%s:%s:%s: %s' % (filename, lineno, funcname, msg))