diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-09-15 08:57:02 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-09-17 14:11:03 +0100 |
commit | 602bb695cfa4b90f3c35800ffacbf50e71db4cd0 (patch) | |
tree | cf738d42d59b30fcffdd62af823f2c3865eee6c0 /bitbake | |
parent | eb4854f903e31706d2d395d05521424bfa303c0d (diff) | |
download | openembedded-core-contrib-602bb695cfa4b90f3c35800ffacbf50e71db4cd0.tar.gz |
bitbake: cooker: Allow profiling of the parser in profile mode
(Bitbake rev: f8a6e4caed4dc3dcf207aecc4ea5f438027da8be)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 988f2cad07..a0e282b854 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -1467,7 +1467,7 @@ class Feeder(multiprocessing.Process): continue class Parser(multiprocessing.Process): - def __init__(self, jobs, results, quit, init): + def __init__(self, jobs, results, quit, init, profile): self.jobs = jobs self.results = results self.quit = quit @@ -1475,8 +1475,28 @@ class Parser(multiprocessing.Process): multiprocessing.Process.__init__(self) self.context = bb.utils.get_context().copy() self.handlers = bb.event.get_class_handlers().copy() + self.profile = profile def run(self): + + if not self.profile: + self.realrun() + return + + try: + import cProfile as profile + except: + import profile + prof = profile.Profile() + try: + profile.Profile.runcall(prof, self.realrun) + finally: + logfile = "profile-parse-%s.log" % multiprocessing.current_process().name + prof.dump_stats(logfile) + bb.utils.process_profilelog(logfile) + print("Raw profiling information saved to %s and processed statistics to %s.processed" % (logfile, logfile)) + + def realrun(self): if self.init: self.init() @@ -1577,7 +1597,7 @@ class CookerParser(object): self.feeder = Feeder(self.willparse, self.jobs, self.feeder_quit) self.feeder.start() for i in range(0, self.num_processes): - parser = Parser(self.jobs, self.result_queue, self.parser_quit, init) + parser = Parser(self.jobs, self.result_queue, self.parser_quit, init, self.cooker.configuration.profile) parser.start() self.processes.append(parser) |