summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-11-17 15:19:48 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-11-20 08:31:28 +0000
commit16bc168084cc7b9a092385dfb02d5efc012bed5b (patch)
treeabd75154e3670b7536b7e7103854bbfbeb01e511
parent82b5cdad0f8f5a511545b613410895e1a93840a1 (diff)
downloadpoky-16bc168084cc7b9a092385dfb02d5efc012bed5b.tar.gz
bitbake: server: Ensure cooker profiling works
The previous cleanups meant that when the cooker was started, profiling was always disabled as configuration was sent to the server later and this was too late to profile the main loop. Pass the "profile" option over the server commandline so that we can profile cooker itself again, the setting can now take effect early enough. (Bitbake rev: c97c1f1c127ef3f8fbbd1b4e187ab58bfb0a73e5) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xbitbake/bin/bitbake-server7
-rwxr-xr-xbitbake/lib/bb/main.py2
-rw-r--r--bitbake/lib/bb/server/process.py8
3 files changed, 10 insertions, 7 deletions
diff --git a/bitbake/bin/bitbake-server b/bitbake/bin/bitbake-server
index f53f88b6b0..825e9d56af 100755
--- a/bitbake/bin/bitbake-server
+++ b/bitbake/bin/bitbake-server
@@ -16,7 +16,7 @@ if sys.getfilesystemencoding() != "utf-8":
16 sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.") 16 sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.")
17 17
18# Users shouldn't be running this code directly 18# Users shouldn't be running this code directly
19if len(sys.argv) != 10 or not sys.argv[1].startswith("decafbad"): 19if len(sys.argv) != 11 or not sys.argv[1].startswith("decafbad"):
20 print("bitbake-server is meant for internal execution by bitbake itself, please don't use it standalone.") 20 print("bitbake-server is meant for internal execution by bitbake itself, please don't use it standalone.")
21 sys.exit(1) 21 sys.exit(1)
22 22
@@ -28,7 +28,8 @@ logfile = sys.argv[4]
28lockname = sys.argv[5] 28lockname = sys.argv[5]
29sockname = sys.argv[6] 29sockname = sys.argv[6]
30timeout = float(sys.argv[7]) 30timeout = float(sys.argv[7])
31xmlrpcinterface = (sys.argv[8], int(sys.argv[9])) 31profile = bool(int(sys.argv[8]))
32xmlrpcinterface = (sys.argv[9], int(sys.argv[10]))
32if xmlrpcinterface[0] == "None": 33if xmlrpcinterface[0] == "None":
33 xmlrpcinterface = (None, xmlrpcinterface[1]) 34 xmlrpcinterface = (None, xmlrpcinterface[1])
34 35
@@ -49,5 +50,5 @@ logger = logging.getLogger("BitBake")
49handler = bb.event.LogHandler() 50handler = bb.event.LogHandler()
50logger.addHandler(handler) 51logger.addHandler(handler)
51 52
52bb.server.process.execServer(lockfd, readypipeinfd, lockname, sockname, timeout, xmlrpcinterface) 53bb.server.process.execServer(lockfd, readypipeinfd, lockname, sockname, timeout, xmlrpcinterface, profile)
53 54
diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py
index 93eda3632e..f56c3d46a2 100755
--- a/bitbake/lib/bb/main.py
+++ b/bitbake/lib/bb/main.py
@@ -429,7 +429,7 @@ def setup_bitbake(configParams, extrafeatures=None):
429 logger.info("Starting bitbake server...") 429 logger.info("Starting bitbake server...")
430 # Clear the event queue since we already displayed messages 430 # Clear the event queue since we already displayed messages
431 bb.event.ui_queue = [] 431 bb.event.ui_queue = []
432 server = bb.server.process.BitBakeServer(lock, sockname, featureset, configParams.server_timeout, configParams.xmlrpcinterface) 432 server = bb.server.process.BitBakeServer(lock, sockname, featureset, configParams.server_timeout, configParams.xmlrpcinterface, configParams.profile)
433 433
434 else: 434 else:
435 logger.info("Reconnecting to bitbake server...") 435 logger.info("Reconnecting to bitbake server...")
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 5d02c0b9f5..afd77ac0a5 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -448,13 +448,14 @@ start_log_datetime_format = '%Y-%m-%d %H:%M:%S.%f'
448 448
449class BitBakeServer(object): 449class BitBakeServer(object):
450 450
451 def __init__(self, lock, sockname, featureset, server_timeout, xmlrpcinterface): 451 def __init__(self, lock, sockname, featureset, server_timeout, xmlrpcinterface, profile):
452 452
453 self.server_timeout = server_timeout 453 self.server_timeout = server_timeout
454 self.xmlrpcinterface = xmlrpcinterface 454 self.xmlrpcinterface = xmlrpcinterface
455 self.featureset = featureset 455 self.featureset = featureset
456 self.sockname = sockname 456 self.sockname = sockname
457 self.bitbake_lock = lock 457 self.bitbake_lock = lock
458 self.profile = profile
458 self.readypipe, self.readypipein = os.pipe() 459 self.readypipe, self.readypipein = os.pipe()
459 460
460 # Place the log in the builddirectory alongside the lock file 461 # Place the log in the builddirectory alongside the lock file
@@ -518,9 +519,9 @@ class BitBakeServer(object):
518 os.set_inheritable(self.bitbake_lock.fileno(), True) 519 os.set_inheritable(self.bitbake_lock.fileno(), True)
519 os.set_inheritable(self.readypipein, True) 520 os.set_inheritable(self.readypipein, True)
520 serverscript = os.path.realpath(os.path.dirname(__file__) + "/../../../bin/bitbake-server") 521 serverscript = os.path.realpath(os.path.dirname(__file__) + "/../../../bin/bitbake-server")
521 os.execl(sys.executable, "bitbake-server", serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname, str(self.server_timeout or 0), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1])) 522 os.execl(sys.executable, "bitbake-server", serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname, str(self.server_timeout or 0), str(int(self.profile)), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1]))
522 523
523def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpcinterface): 524def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpcinterface, profile):
524 525
525 import bb.cookerdata 526 import bb.cookerdata
526 import bb.cooker 527 import bb.cooker
@@ -549,6 +550,7 @@ def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpc
549 try: 550 try:
550 featureset = [] 551 featureset = []
551 cooker = bb.cooker.BBCooker(featureset, server.register_idle_function) 552 cooker = bb.cooker.BBCooker(featureset, server.register_idle_function)
553 cooker.configuration.profile = profile
552 except bb.BBHandledException: 554 except bb.BBHandledException:
553 return None 555 return None
554 writer.send("r") 556 writer.send("r")