]> code.ossystems Code Review - openembedded-core.git/commitdiff
cooker: no cached in progressbar and add ETA
authorChris Larson <chris_larson@mentor.com>
Tue, 30 Nov 2010 15:25:13 +0000 (08:25 -0700)
committerRichard Purdie <rpurdie@linux.intel.com>
Tue, 4 Jan 2011 14:46:45 +0000 (14:46 +0000)
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>
bitbake/lib/bb/cooker.py
bitbake/lib/bb/event.py
bitbake/lib/bb/ui/knotty.py

index f5a7b02921fa33458dca1da2b5c32a684d8a1433..e7fdb5a692b90e7c0cc50c42ce104fbcd0e4b43d 100644 (file)
@@ -993,12 +993,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())
 
@@ -1013,6 +1011,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)
@@ -1061,14 +1061,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:
@@ -1076,11 +1072,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
@@ -1088,10 +1090,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:
@@ -1100,10 +1098,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
index 5b0a183acdf87b1f4ebedc78cf6a35cb4a65fab4..009cbf93ba2732913a03ec070c3001b5afe482d4 100644 (file)
@@ -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"""
index 8e5249bb6284d04d32980650e791971215ebb17c..0c0cdf1fe74b9f3b85c20fa1f06adf6206edd06b 100644 (file)
@@ -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"""
@@ -147,7 +147,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()