From 05ba6fc7cb5a389737a238f312f4148e6b837d71 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 13 Nov 2010 21:23:54 +0800 Subject: bitbake: Rewrite profiling code so its functional for both none and xmlrpc backends Signed-off-by: Richard Purdie --- bitbake/lib/bb/server/none.py | 16 +++++++++++++--- bitbake/lib/bb/server/xmlrpc.py | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) (limited to 'bitbake/lib/bb/server') diff --git a/bitbake/lib/bb/server/none.py b/bitbake/lib/bb/server/none.py index 14915d973..38f713c51 100644 --- a/bitbake/lib/bb/server/none.py +++ b/bitbake/lib/bb/server/none.py @@ -109,9 +109,11 @@ class BitBakeServer(): # remove this when you're done with debugging # allow_reuse_address = True - def __init__(self, cooker): + def __init__(self, cooker, pre_serve, post_serve): self._idlefuns = {} self.commands = BitBakeServerCommands(self, cooker) + self.pre_serve = pre_serve + self.post_serve = post_serve def register_idle_function(self, function, data): """Register a function to be called while the server is idle""" @@ -160,9 +162,17 @@ class BitbakeServerInfo(): self.commands = server.commands class BitBakeServerFork(): - def __init__(self, serverinfo, command, logfile): - serverinfo.forkCommand = command + def __init__(self, cooker, server, serverinfo, logfile): serverinfo.logfile = logfile + serverinfo.cooker = cooker + serverinfo.server = server + +class BitbakeUILauch(): + def launch(self, serverinfo, uifunc, *args): + serverinfo.server.pre_serve() + ret = bb.cooker.server_main(serverinfo.cooker, uifunc, *args) + serverinfo.server.post_serve() + return ret class BitBakeServerConnection(): def __init__(self, serverinfo): diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index cb2949fb9..30b83d2b1 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py @@ -87,7 +87,7 @@ class BitBakeServer(SimpleXMLRPCServer): # remove this when you're done with debugging # allow_reuse_address = True - def __init__(self, cooker, interface = ("localhost", 0)): + def __init__(self, cooker, pre_serve, post_serve, interface = ("localhost", 0)): """ Constructor """ @@ -99,6 +99,9 @@ class BitBakeServer(SimpleXMLRPCServer): #self.register_introspection_functions() commands = BitBakeServerCommands(self, cooker) self.autoregister_all_functions(commands, "") + self.cooker = cooker + self.pre_serve = pre_serve + self.post_serve = post_serve def autoregister_all_functions(self, context, prefix): """ @@ -116,9 +119,14 @@ class BitBakeServer(SimpleXMLRPCServer): self._idlefuns[function] = data def serve_forever(self): + bb.cooker.server_main(self.cooker, self._serve_forever) + + def _serve_forever(self): """ Serve Requests. Overloaded to honor a quit command """ + self.pre_serve() + self.quit = False self.timeout = 0 # Run Idle calls for our first callback while not self.quit: @@ -155,6 +163,7 @@ class BitBakeServer(SimpleXMLRPCServer): except: pass + self.post_serve() self.server_close() return @@ -164,8 +173,12 @@ class BitbakeServerInfo(): self.port = server.port class BitBakeServerFork(): - def __init__(self, serverinfo, command, logfile): - daemonize.createDaemon(command, logfile) + def __init__(self, cooker, server, serverinfo, logfile): + daemonize.createDaemon(server.serve_forever, logfile) + +class BitbakeUILauch(): + def launch(self, serverinfo, uifunc, *args): + return uifunc(*args) class BitBakeServerConnection(): def __init__(self, serverinfo): -- cgit v1.2.3