summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Larson <chris_larson@mentor.com>2010-11-30 08:25:13 -0700
committerChris Larson <chris_larson@mentor.com>2010-11-30 09:07:03 -0700
commit618480f7739f6ae846f67a57bee5a78efb37839d (patch)
treeeeb195355319baef1982c9a32321c7c9739b4a33 /lib
parentd5a3c78bd0dace12e8038fd19dfd8938b29fc72d (diff)
downloadbitbake-618480f7739f6ae846f67a57bee5a78efb37839d.tar.gz
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. Signed-off-by: Chris Larson <chris_larson@mentor.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/cooker.py24
-rw-r--r--lib/bb/event.py4
-rw-r--r--lib/bb/ui/knotty.py4
3 files changed, 12 insertions, 20 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 3bb75fd35..92f22fc62 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -958,12 +958,10 @@ class CookerParser(object):
self.total = len(filelist)
self.current = 0
- self.started = False
self.bb_cache = None
self.task_queue = None
self.result_queue = None
self.fromcache = None
- self.progress_chunk = self.total / 100
self.num_processes = int(self.cfgdata.getVar("BB_NUMBER_PARSE_THREADS", True) or
multiprocessing.cpu_count())
@@ -978,6 +976,8 @@ class CookerParser(object):
self.task_queue.put((filename, appends))
else:
self.fromcache.append((filename, appends))
+ self.toparse = self.total - len(self.fromcache)
+ self.progress_chunk = self.toparse / 100
def worker(input, output, cfgdata):
signal.signal(signal.SIGINT, signal.SIG_IGN)
@@ -1023,14 +1023,10 @@ class CookerParser(object):
bb.event.fire(event, self.cfgdata)
self.shutdown()
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:
self.bb_cache = bb.cache.Cache(self.cfgdata)
self.launch_processes()
+ bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata)
return True
try:
@@ -1038,11 +1034,17 @@ class CookerParser(object):
filename, appends = self.fromcache.pop()
_, result = self.bb_cache.load(filename, appends, self.cfgdata)
parsed = False
+ self.cached += 1
else:
result = self.result_queue.get()
if isinstance(result, Exception):
raise result
+
parsed = True
+ self.parsed += 1
+ if self.parsed % self.progress_chunk == 0:
+ bb.event.fire(bb.event.ParseProgress(self.parsed),
+ self.cfgdata)
except KeyboardInterrupt:
self.shutdown(clean=False)
raise
@@ -1050,10 +1052,6 @@ class CookerParser(object):
self.error += 1
parselog.critical(str(e))
else:
- if parsed:
- self.parsed += 1
- else:
- self.cached += 1
self.virtuals += len(result)
for virtualfn, info in result:
@@ -1062,10 +1060,6 @@ class CookerParser(object):
else:
self.bb_cache.add_info(virtualfn, info, self.cooker.status,
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
return True
diff --git a/lib/bb/event.py b/lib/bb/event.py
index 1fdec84b9..c0f183c8f 100644
--- a/lib/bb/event.py
+++ b/lib/bb/event.py
@@ -298,11 +298,9 @@ class MultipleProviders(Event):
class ParseStarted(Event):
"""Recipe parsing for the runqueue has begun"""
- def __init__(self, total, skipped, masked):
+ def __init__(self, total):
Event.__init__(self)
self.total = total
- self.skipped = skipped
- self.masked = masked
class ParseCompleted(Event):
"""Recipe parsing for the runqueue has completed"""
diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py
index fb76dc828..c7c7fdd73 100644
--- a/lib/bb/ui/knotty.py
+++ b/lib/bb/ui/knotty.py
@@ -31,7 +31,7 @@ from bb.ui import uihelper
logger = logging.getLogger("BitBake")
widgets = ['Parsing recipes: ', progressbar.Percentage(), ' ',
- progressbar.Bar()]
+ progressbar.Bar(), ' ', progressbar.ETA()]
class BBLogFormatter(logging.Formatter):
"""Formatter which ensures that our 'plain' messages (logging.INFO + 1) are used as is"""
@@ -144,7 +144,7 @@ def init(server, eventHandler):
continue
if isinstance(event, bb.event.ParseCompleted):
if interactive:
- pbar.update(event.total)
+ pbar.update(pbar.maxval)
else:
sys.stdout.write("done.\n")
sys.stdout.flush()