summaryrefslogtreecommitdiff
path: root/lib/python2.7/hotshot/__init__.py
diff options
context:
space:
mode:
authorrahulp132020-03-17 14:55:41 +0530
committerrahulp132020-03-17 14:55:41 +0530
commit296443137f4288cb030e92859ccfbe3204bc1088 (patch)
treeca4798c2da1e7244edc3bc108d81b462b537aea2 /lib/python2.7/hotshot/__init__.py
parent0db48f6533517ecebfd9f0693f89deca28408b76 (diff)
downloadKiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.tar.gz
KiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.tar.bz2
KiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.zip
initial commit
Diffstat (limited to 'lib/python2.7/hotshot/__init__.py')
-rw-r--r--lib/python2.7/hotshot/__init__.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/python2.7/hotshot/__init__.py b/lib/python2.7/hotshot/__init__.py
new file mode 100644
index 0000000..3692f93
--- /dev/null
+++ b/lib/python2.7/hotshot/__init__.py
@@ -0,0 +1,78 @@
+"""High-perfomance logging profiler, mostly written in C."""
+
+import _hotshot
+from _hotshot import ProfilerError
+
+from warnings import warnpy3k as _warnpy3k
+_warnpy3k("The 'hotshot' module is not supported in 3.x, "
+ "use the 'profile' module instead.", stacklevel=2)
+
+class Profile:
+ def __init__(self, logfn, lineevents=0, linetimings=1):
+ self.lineevents = lineevents and 1 or 0
+ self.linetimings = (linetimings and lineevents) and 1 or 0
+ self._prof = p = _hotshot.profiler(
+ logfn, self.lineevents, self.linetimings)
+
+ # Attempt to avoid confusing results caused by the presence of
+ # Python wrappers around these functions, but only if we can
+ # be sure the methods have not been overridden or extended.
+ if self.__class__ is Profile:
+ self.close = p.close
+ self.start = p.start
+ self.stop = p.stop
+ self.addinfo = p.addinfo
+
+ def close(self):
+ """Close the logfile and terminate the profiler."""
+ self._prof.close()
+
+ def fileno(self):
+ """Return the file descriptor of the profiler's log file."""
+ return self._prof.fileno()
+
+ def start(self):
+ """Start the profiler."""
+ self._prof.start()
+
+ def stop(self):
+ """Stop the profiler."""
+ self._prof.stop()
+
+ def addinfo(self, key, value):
+ """Add an arbitrary labelled value to the profile log."""
+ self._prof.addinfo(key, value)
+
+ # These methods offer the same interface as the profile.Profile class,
+ # but delegate most of the work to the C implementation underneath.
+
+ def run(self, cmd):
+ """Profile an exec-compatible string in the script
+ environment.
+
+ The globals from the __main__ module are used as both the
+ globals and locals for the script.
+ """
+ import __main__
+ dict = __main__.__dict__
+ return self.runctx(cmd, dict, dict)
+
+ def runctx(self, cmd, globals, locals):
+ """Evaluate an exec-compatible string in a specific
+ environment.
+
+ The string is compiled before profiling begins.
+ """
+ code = compile(cmd, "<string>", "exec")
+ self._prof.runcode(code, globals, locals)
+ return self
+
+ def runcall(self, func, *args, **kw):
+ """Profile a single call of a callable.
+
+ Additional positional and keyword arguments may be passed
+ along; the result of the call is returned, and exceptions are
+ allowed to propagate cleanly, while ensuring that profiling is
+ disabled on the way out.
+ """
+ return self._prof.runcall(func, args, kw)