From 8fa33800efa530c765d85a520110285467ff29c2 Mon Sep 17 00:00:00 2001 From: Shane Wang Date: Thu, 23 Feb 2012 21:47:16 +0800 Subject: bitbake: change for adding progress bar in Hob2. The changes include: - Clean some events in event.py - Fire essential events for Hob2 to handle with more information. - knotty changes (Bitbake rev: 9ede881620c501574f014e600cea6947ea908ac2) Signed-off-by: Shane Wang Signed-off-by: Dongxiao Xu Signed-off-by: Richard Purdie --- bitbake/lib/bb/cache.py | 2 +- bitbake/lib/bb/cooker.py | 12 ++++--- bitbake/lib/bb/event.py | 83 ++++++++++++++++++++++++++++++++------------- bitbake/lib/bb/ui/knotty.py | 5 ++- 4 files changed, 73 insertions(+), 29 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 3d89435211..47e814b577 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py @@ -336,7 +336,7 @@ class Cache(object): current_percent = 100 * current_progress / cachesize if current_percent > previous_percent: previous_percent = current_percent - bb.event.fire(bb.event.CacheLoadProgress(current_progress), + bb.event.fire(bb.event.CacheLoadProgress(current_progress, cachesize), self.data) previous_progress += current_progress diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 91fdc96b8a..d645454c7c 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -334,6 +334,7 @@ class BBCooker: """ Prepare a runqueue and taskdata object for iteration over pkgs_to_build """ + bb.event.fire(bb.event.TreeDataPreparationStarted(), self.configuration.data) # Need files parsed self.updateCache() # If we are told to do the None task then query the default task @@ -350,11 +351,14 @@ class BBCooker: taskdata = bb.taskdata.TaskData(False, skiplist=self.skiplist) runlist = [] + current = 0 for k in pkgs_to_build: taskdata.add_provider(localdata, self.status, k) runlist.append([k, "do_%s" % task]) + current += 1 + bb.event.fire(bb.event.TreeDataPreparationProgress(current, len(pkgs_to_build)), self.configuration.data) taskdata.add_unresolved(localdata, self.status) - + bb.event.fire(bb.event.TreeDataPreparationCompleted(len(pkgs_to_build)), self.configuration.data) return runlist, taskdata def generateTaskDepTreeData(self, pkgs_to_build, task): @@ -1100,7 +1104,7 @@ class BBCooker: return False if not retval: - bb.event.fire(bb.event.BuildCompleted(buildname, item, failures), self.configuration.event_data) + bb.event.fire(bb.event.BuildCompleted(len(rq.rqdata.runq_fnid), buildname, item, failures), self.configuration.event_data) self.command.finishAsyncCommand() return False if retval is True: @@ -1140,7 +1144,7 @@ class BBCooker: return False if not retval: - bb.event.fire(bb.event.BuildCompleted(buildname, targets, failures), self.configuration.data) + bb.event.fire(bb.event.BuildCompleted(len(rq.rqdata.runq_fnid), buildname, targets, failures), self.configuration.data) self.command.finishAsyncCommand() return False if retval is True: @@ -1663,7 +1667,7 @@ class CookerParser(object): if parsed: self.parsed += 1 if self.parsed % self.progress_chunk == 0: - bb.event.fire(bb.event.ParseProgress(self.parsed), + bb.event.fire(bb.event.ParseProgress(self.parsed, self.toparse), self.cfgdata) else: self.cached += 1 diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 10036c05c9..bbece583d1 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -204,6 +204,27 @@ def getName(e): else: return e.__name__ +class OperationStarted(Event): + """An operation has begun""" + def __init__(self, msg = "Operation Started"): + Event.__init__(self) + self.msg = msg + +class OperationCompleted(Event): + """An operation has completed""" + def __init__(self, total, msg = "Operation Completed"): + Event.__init__(self) + self.total = total + self.msg = msg + +class OperationProgress(Event): + """An operation is in progress""" + def __init__(self, current, total, msg = "Operation in Progress"): + Event.__init__(self) + self.current = current + self.total = total + self.msg = msg + ": %s/%s" % (current, total); + class ConfigParsed(Event): """Configuration Parsing Complete""" @@ -276,14 +297,20 @@ class BuildBase(Event): -class BuildStarted(BuildBase): +class BuildStarted(BuildBase, OperationStarted): """bbmake build run started""" + def __init__(self, n, p, failures = 0): + OperationStarted.__init__(self, "Building Started") + BuildBase.__init__(self, n, p, failures) - -class BuildCompleted(BuildBase): +class BuildCompleted(BuildBase, OperationCompleted): """bbmake build run completed""" - - + def __init__(self, total, n, p, failures = 0): + if not failures: + OperationCompleted.__init__(self, total, "Building Succeeded") + else: + OperationCompleted.__init__(self, total, "Building Failed") + BuildBase.__init__(self, n, p, failures) class NoProvider(Event): @@ -329,17 +356,16 @@ class MultipleProviders(Event): """ return self._candidates -class ParseStarted(Event): +class ParseStarted(OperationStarted): """Recipe parsing for the runqueue has begun""" def __init__(self, total): - Event.__init__(self) + OperationStarted.__init__(self, "Recipe parsing Started") self.total = total -class ParseCompleted(Event): +class ParseCompleted(OperationCompleted): """Recipe parsing for the runqueue has completed""" - def __init__(self, cached, parsed, skipped, masked, virtuals, errors, total): - Event.__init__(self) + OperationCompleted.__init__(self, total, "Recipe parsing Completed") self.cached = cached self.parsed = parsed self.skipped = skipped @@ -347,33 +373,44 @@ class ParseCompleted(Event): self.masked = masked self.errors = errors self.sofar = cached + parsed - self.total = total -class ParseProgress(Event): +class ParseProgress(OperationProgress): """Recipe parsing progress""" + def __init__(self, current, total): + OperationProgress.__init__(self, current, total, "Recipe parsing") - def __init__(self, current): - self.current = current -class CacheLoadStarted(Event): +class CacheLoadStarted(OperationStarted): """Loading of the dependency cache has begun""" def __init__(self, total): - Event.__init__(self) + OperationStarted.__init__(self, "Loading cache Started") self.total = total -class CacheLoadProgress(Event): +class CacheLoadProgress(OperationProgress): """Cache loading progress""" - def __init__(self, current): - Event.__init__(self) - self.current = current + def __init__(self, current, total): + OperationProgress.__init__(self, current, total, "Loading cache") -class CacheLoadCompleted(Event): +class CacheLoadCompleted(OperationCompleted): """Cache loading is complete""" def __init__(self, total, num_entries): - Event.__init__(self) - self.total = total + OperationCompleted.__init__(self, total, "Loading cache Completed") self.num_entries = num_entries +class TreeDataPreparationStarted(OperationStarted): + """Tree data preparation started""" + def __init__(self): + OperationStarted.__init__(self, "Preparing tree data Started") + +class TreeDataPreparationProgress(OperationProgress): + """Tree data preparation is in progress""" + def __init__(self, current, total): + OperationProgress.__init__(self, current, total, "Preparing tree data") + +class TreeDataPreparationCompleted(OperationCompleted): + """Tree data preparation completed""" + def __init__(self, total): + OperationCompleted.__init__(self, total, "Preparing tree data Completed") class DepTreeGenerated(Event): """ diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 158a132726..e2e6ac3d65 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -263,7 +263,10 @@ def main(server, eventHandler): bb.event.RecipeParsed, bb.event.RecipePreFinalise, bb.runqueue.runQueueEvent, - bb.runqueue.runQueueExitWait)): + bb.runqueue.runQueueExitWait, + bb.event.OperationStarted, + bb.event.OperationCompleted, + bb.event.OperationProgress)): continue logger.error("Unknown event: %s", event) -- cgit v1.2.3-54-g00ecf