bitbake: process: Add profile logging for main loop

When the idle/main loop was added, we didn't include profiling information
for it. There is a performance issue in there, add logging for it.

(Bitbake rev: d8d5cd43a60560f67e86f4f625113b0f73b944c0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2024-02-09 23:55:40 +00:00
parent 38657590e7
commit 0f50f21151

View File

@ -402,6 +402,22 @@ class ProcessServer():
serverlog("".join(msg)) serverlog("".join(msg))
def idle_thread(self): def idle_thread(self):
if self.cooker.configuration.profile:
try:
import cProfile as profile
except:
import profile
prof = profile.Profile()
ret = profile.Profile.runcall(prof, self.idle_thread_internal)
prof.dump_stats("profile-mainloop.log")
bb.utils.process_profilelog("profile-mainloop.log")
serverlog("Raw profiling information saved to profilemainloop.log and processed statistics to profilemainloop.log.processed")
else:
self.idle_thread_internal()
def idle_thread_internal(self):
def remove_idle_func(function): def remove_idle_func(function):
with bb.utils.lock_timeout(self._idlefuncsLock): with bb.utils.lock_timeout(self._idlefuncsLock):
del self._idlefuns[function] del self._idlefuns[function]