mirror of
https://git.yoctoproject.org/poky
synced 2026-06-03 01:40:07 +00:00
cooker: no cached in progressbar and add ETA
Rather than updating the progress bar based on the recipe being processed (whether cached or parsed), consider only parsed recipes. This reduces the instability in progress rate introduced by the cached entries, and allows the ETA to be resurrected and be a bit more useful. (Bitbake rev: 618480f7739f6ae846f67a57bee5a78efb37839d) Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
committed by
Richard Purdie
parent
b890c19a33
commit
b8aedaa6b5
@@ -993,12 +993,10 @@ class CookerParser(object):
|
|||||||
self.total = len(filelist)
|
self.total = len(filelist)
|
||||||
|
|
||||||
self.current = 0
|
self.current = 0
|
||||||
self.started = False
|
|
||||||
self.bb_cache = None
|
self.bb_cache = None
|
||||||
self.task_queue = None
|
self.task_queue = None
|
||||||
self.result_queue = None
|
self.result_queue = None
|
||||||
self.fromcache = None
|
self.fromcache = None
|
||||||
self.progress_chunk = self.total / 100
|
|
||||||
self.num_processes = int(self.cfgdata.getVar("BB_NUMBER_PARSE_THREADS", True) or
|
self.num_processes = int(self.cfgdata.getVar("BB_NUMBER_PARSE_THREADS", True) or
|
||||||
multiprocessing.cpu_count())
|
multiprocessing.cpu_count())
|
||||||
|
|
||||||
@@ -1013,6 +1011,8 @@ class CookerParser(object):
|
|||||||
self.task_queue.put((filename, appends))
|
self.task_queue.put((filename, appends))
|
||||||
else:
|
else:
|
||||||
self.fromcache.append((filename, appends))
|
self.fromcache.append((filename, appends))
|
||||||
|
self.toparse = self.total - len(self.fromcache)
|
||||||
|
self.progress_chunk = self.toparse / 100
|
||||||
|
|
||||||
def worker(input, output, cfgdata):
|
def worker(input, output, cfgdata):
|
||||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||||
@@ -1061,14 +1061,10 @@ class CookerParser(object):
|
|||||||
bb.event.fire(event, self.cfgdata)
|
bb.event.fire(event, self.cfgdata)
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
return False
|
return False
|
||||||
elif not self.started:
|
|
||||||
self.started = True
|
|
||||||
bb.event.fire(bb.event.ParseStarted(self.total, self.skipped, self.masked),
|
|
||||||
self.cfgdata)
|
|
||||||
return True
|
|
||||||
elif not self.bb_cache:
|
elif not self.bb_cache:
|
||||||
self.bb_cache = bb.cache.Cache(self.cfgdata)
|
self.bb_cache = bb.cache.Cache(self.cfgdata)
|
||||||
self.launch_processes()
|
self.launch_processes()
|
||||||
|
bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1076,11 +1072,17 @@ class CookerParser(object):
|
|||||||
filename, appends = self.fromcache.pop()
|
filename, appends = self.fromcache.pop()
|
||||||
_, result = self.bb_cache.load(filename, appends, self.cfgdata)
|
_, result = self.bb_cache.load(filename, appends, self.cfgdata)
|
||||||
parsed = False
|
parsed = False
|
||||||
|
self.cached += 1
|
||||||
else:
|
else:
|
||||||
result = self.result_queue.get()
|
result = self.result_queue.get()
|
||||||
if isinstance(result, Exception):
|
if isinstance(result, Exception):
|
||||||
raise result
|
raise result
|
||||||
|
|
||||||
parsed = True
|
parsed = True
|
||||||
|
self.parsed += 1
|
||||||
|
if self.parsed % self.progress_chunk == 0:
|
||||||
|
bb.event.fire(bb.event.ParseProgress(self.parsed),
|
||||||
|
self.cfgdata)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
self.shutdown(clean=False)
|
self.shutdown(clean=False)
|
||||||
raise
|
raise
|
||||||
@@ -1088,10 +1090,6 @@ class CookerParser(object):
|
|||||||
self.error += 1
|
self.error += 1
|
||||||
parselog.critical(str(e))
|
parselog.critical(str(e))
|
||||||
else:
|
else:
|
||||||
if parsed:
|
|
||||||
self.parsed += 1
|
|
||||||
else:
|
|
||||||
self.cached += 1
|
|
||||||
self.virtuals += len(result)
|
self.virtuals += len(result)
|
||||||
|
|
||||||
for virtualfn, info in result:
|
for virtualfn, info in result:
|
||||||
@@ -1100,10 +1098,6 @@ class CookerParser(object):
|
|||||||
else:
|
else:
|
||||||
self.bb_cache.add_info(virtualfn, info, self.cooker.status,
|
self.bb_cache.add_info(virtualfn, info, self.cooker.status,
|
||||||
parsed=parsed)
|
parsed=parsed)
|
||||||
finally:
|
|
||||||
# only fire events on percentage boundaries
|
|
||||||
if self.current % self.progress_chunk == 0:
|
|
||||||
bb.event.fire(bb.event.ParseProgress(self.current), self.cfgdata)
|
|
||||||
|
|
||||||
self.current += 1
|
self.current += 1
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -298,11 +298,9 @@ class MultipleProviders(Event):
|
|||||||
|
|
||||||
class ParseStarted(Event):
|
class ParseStarted(Event):
|
||||||
"""Recipe parsing for the runqueue has begun"""
|
"""Recipe parsing for the runqueue has begun"""
|
||||||
def __init__(self, total, skipped, masked):
|
def __init__(self, total):
|
||||||
Event.__init__(self)
|
Event.__init__(self)
|
||||||
self.total = total
|
self.total = total
|
||||||
self.skipped = skipped
|
|
||||||
self.masked = masked
|
|
||||||
|
|
||||||
class ParseCompleted(Event):
|
class ParseCompleted(Event):
|
||||||
"""Recipe parsing for the runqueue has completed"""
|
"""Recipe parsing for the runqueue has completed"""
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from bb.ui import uihelper
|
|||||||
|
|
||||||
logger = logging.getLogger("BitBake")
|
logger = logging.getLogger("BitBake")
|
||||||
widgets = ['Parsing recipes: ', progressbar.Percentage(), ' ',
|
widgets = ['Parsing recipes: ', progressbar.Percentage(), ' ',
|
||||||
progressbar.Bar()]
|
progressbar.Bar(), ' ', progressbar.ETA()]
|
||||||
|
|
||||||
class BBLogFormatter(logging.Formatter):
|
class BBLogFormatter(logging.Formatter):
|
||||||
"""Formatter which ensures that our 'plain' messages (logging.INFO + 1) are used as is"""
|
"""Formatter which ensures that our 'plain' messages (logging.INFO + 1) are used as is"""
|
||||||
@@ -147,7 +147,7 @@ def init(server, eventHandler):
|
|||||||
continue
|
continue
|
||||||
if isinstance(event, bb.event.ParseCompleted):
|
if isinstance(event, bb.event.ParseCompleted):
|
||||||
if interactive:
|
if interactive:
|
||||||
pbar.update(event.total)
|
pbar.update(pbar.maxval)
|
||||||
else:
|
else:
|
||||||
sys.stdout.write("done.\n")
|
sys.stdout.write("done.\n")
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|||||||
Reference in New Issue
Block a user