summary refs log tree commit diff
path: root/synapse/app/homeserver.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/app/homeserver.py')
-rwxr-xr-xsynapse/app/homeserver.py32
1 files changed, 21 insertions, 11 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index f3513abb55..beb9366268 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -516,26 +516,36 @@ class SynapseSite(Site):
 
 
 def run(hs):
-    PROFILE_SYNAPSE = False
+    PROFILE_SYNAPSE = True
     if PROFILE_SYNAPSE:
         def profile(func):
             from cProfile import Profile
             from threading import current_thread
 
+            from theseus import Tracer
+
             def profiled(*args, **kargs):
-                profile = Profile()
-                profile.enable()
-                func(*args, **kargs)
-                profile.disable()
-                ident = current_thread().ident
-                profile.dump_stats("/tmp/%s.%s.%i.pstat" % (
-                    hs.hostname, func.__name__, ident
-                ))
+                try:
+                    t = Tracer()
+                    t.install()
+
+                    func(*args, **kargs)
+
+                    ident = current_thread().ident
+                    name = "/tmp/%s.%s.%i.callgrind" % (
+                        hs.hostname, func.__name__, ident
+                    )
+
+                    with open(name, 'wb') as outfile:
+                        t.write_data(outfile)
+                except:
+                    logger.exception("WIBBLE")
+                    raise
 
             return profiled
 
-        from twisted.python.threadpool import ThreadPool
-        ThreadPool._worker = profile(ThreadPool._worker)
+        # from twisted.python.threadpool import ThreadPool
+        # ThreadPool._worker = profile(ThreadPool._worker)
         reactor.run = profile(reactor.run)
 
     def in_thread():