mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-01 13:58:04 +00:00
Starting with python 3.12, profiling now stays enabled over threads yet you can't extract the profile data in the threads themselves, which makes it difficult to use for our use case. Our main loop starts the idle loop which starts the parsing threads and this means we can't profile in the main loop and the parsing threads or the idle loop at the same time due to this. Add options to the commandline so you can specify which piece of bitbake you want to enable profiling for. This allows some profiling with python 3.12 onwards rather than crashing. (Bitbake rev: 09f29a4968841ee5070f70277ba8c253bb14f017) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
57 lines
1.6 KiB
Python
Executable File
57 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Copyright (C) 2020 Richard Purdie
|
|
#
|
|
|
|
import os
|
|
import sys
|
|
import warnings
|
|
warnings.simplefilter("default")
|
|
warnings.filterwarnings("ignore", category=DeprecationWarning, message=".*use.of.fork.*may.lead.to.deadlocks.in.the.child.*")
|
|
import logging
|
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib'))
|
|
|
|
import bb
|
|
|
|
bb.utils.check_system_locale()
|
|
|
|
# Users shouldn't be running this code directly
|
|
if len(sys.argv) != 11 or not sys.argv[1].startswith("decafbad"):
|
|
print("bitbake-server is meant for internal execution by bitbake itself, please don't use it standalone.")
|
|
sys.exit(1)
|
|
|
|
import bb.server.process
|
|
|
|
lockfd = int(sys.argv[2])
|
|
readypipeinfd = int(sys.argv[3])
|
|
logfile = sys.argv[4]
|
|
lockname = sys.argv[5]
|
|
sockname = sys.argv[6]
|
|
timeout = float(sys.argv[7])
|
|
profile = sys.argv[8]
|
|
xmlrpcinterface = (sys.argv[9], int(sys.argv[10]))
|
|
if xmlrpcinterface[0] == "None":
|
|
xmlrpcinterface = (None, xmlrpcinterface[1])
|
|
|
|
# Replace standard fds with our own
|
|
with open('/dev/null', 'r') as si:
|
|
os.dup2(si.fileno(), sys.stdin.fileno())
|
|
|
|
with open(logfile, 'a+') as so:
|
|
os.dup2(so.fileno(), sys.stdout.fileno())
|
|
os.dup2(so.fileno(), sys.stderr.fileno())
|
|
|
|
# Have stdout and stderr be the same so log output matches chronologically
|
|
# and there aren't two seperate buffers
|
|
sys.stderr = sys.stdout
|
|
|
|
logger = logging.getLogger("BitBake")
|
|
# Ensure logging messages get sent to the UI as events
|
|
handler = bb.event.LogHandler()
|
|
logger.addHandler(handler)
|
|
|
|
bb.server.process.execServer(lockfd, readypipeinfd, lockname, sockname, timeout, xmlrpcinterface, profile)
|
|
|