parse/ast: Optimise data finalisation
PATCH 1/1 parse/ast: Optimise data finalisation
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 <[email protected]>
---
bitbake/lib/bb/parse/ast.py +7 -4
@@ -337,8 +337,10 @@ def finalize(fn, d, variant = None): bb.event.fire(bb.event.RecipeParsed(fn), 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 = bb.data.createCopy(orig_d) function(arg or name, new_d) datastores[name] = new_d
@@ -383,7 +385,8 @@ def multi_finalize(fn, d): safe_d = d d = bb.data.createCopy(safe_d) try: - 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: