1
0
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:
Chris Larson
2010-11-30 08:25:13 -07:00
committed by Richard Purdie
parent b890c19a33
commit b8aedaa6b5
3 changed files with 12 additions and 20 deletions
+9 -15
View File
@@ -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
+1 -3
View File
@@ -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"""
+2 -2
View File
@@ -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()