summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThais Siqueira <thais.siqueira@gmail.com>2016-08-22 17:33:21 -0300
committerThais Siqueira <thais.siqueira@gmail.com>2016-08-22 17:33:21 -0300
commit7efd62e8775589efc068a8b9b06585d3cd3b4b2d (patch)
tree183d9a6300dbbf005cc981fe6e4b4e790eff0551
parent9cdd52be577fff75830c854bd7738ee1649e7083 (diff)
Adds a patch to measure function running in twisted
The README explains how to apply the patch so you can get information about long running methods (longer than 100ms) on the main thread
-rw-r--r--service/test/reactor/README.md7
-rw-r--r--service/test/reactor/defer.patch47
2 files changed, 54 insertions, 0 deletions
diff --git a/service/test/reactor/README.md b/service/test/reactor/README.md
new file mode 100644
index 00000000..8cbae687
--- /dev/null
+++ b/service/test/reactor/README.md
@@ -0,0 +1,7 @@
+To test the run times of functions in the main reactor thread:
+
+- Apply the patch defer.patch
+```
+patch <venv>/local/lib/python2.7/twisted/internet/defer.py service/test/reactor/defer.patch
+```
+- Run the user agent, preferrably out of debug mode, the timing of all the functions that take more than 100ms will be printed on the log
diff --git a/service/test/reactor/defer.patch b/service/test/reactor/defer.patch
new file mode 100644
index 00000000..de2f7d82
--- /dev/null
+++ b/service/test/reactor/defer.patch
@@ -0,0 +1,47 @@
+33a34,46
+> from datetime import datetime
+>
+> class Clock():
+> def __init__(self, label):
+> self.start = datetime.now()
+> self.label = label
+>
+> def stop(self):
+> end = datetime.now()
+> total = (end - self.start).total_seconds()
+> if total > 0.1:
+> print('EXECUTING {} {:.5f}'.format(self.label, total))
+>
+195c208,221
+<
+---
+> import threading
+> import inspect
+> def identifyItem(i):
+> if i is None:
+> return "(None)"
+> else:
+> if inspect.isbuiltin(i):
+> return str(i)
+> else:
+> if 'gotResult' == i.__name__:
+> return str(i.__closure__[1].cell_contents)
+> f = inspect.getsourcefile(i)
+> ln = inspect.getsourcelines(i)[1]
+> return "%s (%s:%d)" % (str(i), f, ln)
+300a327,329
+>
+> # print "addCallbacks(%s, %s)" % (identifyItem(callback), identifyItem(errback))
+>
+588c617,625
+< current.result = callback(current.result, *args, **kw)
+---
+> currentItem = identifyItem(callback)
+> currentThreadId = threading.current_thread().ident
+>
+> clock = Clock("%s in thread %d" % (currentItem, currentThreadId))
+> try:
+> current.result = callback(current.result, *args, **kw)
+> finally:
+> clock.stop()
+>