Patchwork [bitbake-devel] parse/ast: Optimise data finalisation

mail settings
Submitter Richard Purdie
Date April 13, 2014, 10:48 a.m.
Message ID <1397386133.15843.50.camel@ted>
Download mbox | patch
Permalink /patch/70555/
State New
Headers show


Richard Purdie - April 13, 2014, 10:48 a.m.
The optimisation where only the data we're interested in was finalised
was good but it turns out we can do better. In the case where a 
class-extension is to be targeted, we can skip the other targets.

This change does that and speeds up parsing at the bitbake-worker 
execution time. Specifically, you can see an improvement in the speed
of bitbake X -n.

Signed-off-by: Richard Purdie <>


diff --git a/bitbake/lib/bb/parse/ b/bitbake/lib/bb/parse/
index d8c141b..b930370 100644
--- a/bitbake/lib/bb/parse/
+++ b/bitbake/lib/bb/parse/
@@ -337,8 +337,10 @@  def finalize(fn, d, variant = None):, d)
-def _create_variants(datastores, names, function):
+def _create_variants(datastores, names, function, onlyfinalise):
     def create_variant(name, orig_d, arg = None):
+        if onlyfinalise and name not in onlyfinalise:
+            return
         new_d =
         function(arg or name, new_d)
         datastores[name] = new_d
@@ -383,7 +385,8 @@  def multi_finalize(fn, d):
     safe_d = d
     d =
-        finalize(fn, d)
+        if not onlyfinalise or "default" in onlyfinalise:
+            finalize(fn, d)
     except bb.parse.SkipPackage as e:
         d.setVar("__SKIPPED", e.args[0])
     datastores = {"": safe_d}
@@ -430,7 +433,7 @@  def multi_finalize(fn, d):
             except bb.parse.SkipPackage as e:
                 d.setVar("__SKIPPED", e.args[0])
-        _create_variants(datastores, versions, verfunc)
+        _create_variants(datastores, versions, verfunc, onlyfinalise)
     extended = d.getVar("BBCLASSEXTEND", True) or ""
     if extended:
@@ -460,7 +463,7 @@  def multi_finalize(fn, d):
             bb.parse.BBHandler.inherit(extendedmap[name], fn, 0, d)
         safe_d.setVar("BBCLASSEXTEND", extended)
-        _create_variants(datastores, extendedmap.keys(), extendfunc)
+        _create_variants(datastores, extendedmap.keys(), extendfunc, onlyfinalise)
     for variant, variant_d in datastores.iteritems():
         if variant: