From 648aafc178d5ba8ea096d9e2868125626627c93c Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Thu, 28 May 2015 11:51:08 +0100 Subject: [PATCH] Use theseus to profile --- synapse/app/homeserver.py | 32 +++++++++++++++++++++----------- 1 file 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():