Message ID | 20221205151817.1769536-1-richard.purdie@linuxfoundation.org |
---|---|
State | Accepted, archived |
Commit | e621093a1bf37cd75ede3fb77ab6845556870fc7 |
Headers | show |
Series | [v2] cache/siggen: Simplify passing basehash data into the cache | expand |
On 12/5/22 09:18, Richard Purdie wrote: > The basehash data is really internal bitbake data and passing an object > directly is more efficient than creating and then extracting variables. > > This will match the format of other data we may optionally wish to > store in the cache so more to the more efficient method. Nothing I > can see is using this data today (and nothing should be). > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > --- > lib/bb/cache.py | 4 ++-- > lib/bb/siggen.py | 5 ++++- > 2 files changed, 6 insertions(+), 3 deletions(-) > > v2: Add default for the cache entry so selftest works > > diff --git a/lib/bb/cache.py b/lib/bb/cache.py > index cb6cf21727..e117fe56cb 100644 > --- a/lib/bb/cache.py > +++ b/lib/bb/cache.py > @@ -28,7 +28,7 @@ import shutil > > logger = logging.getLogger("BitBake.Cache") > > -__cache_version__ = "154" > +__cache_version__ = "155" > > def getCacheFile(path, filename, mc, data_hash): > mcspec = '' > @@ -105,7 +105,7 @@ class CoreRecipeInfo(RecipeInfoCommon): > > self.tasks = metadata.getVar('__BBTASKS', False) > > - self.basetaskhashes = self.taskvar('BB_BASEHASH', self.tasks, metadata) > + self.basetaskhashes = metadata.getVar('__siggen_basehashes', False) or {} > self.hashfilename = self.getvar('BB_HASHFILENAME', metadata) > > self.task_deps = metadata.getVar('_task_deps', False) or {'tasks': [], 'parents': {}} > diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py > index 72b906c153..34b71d596a 100644 > --- a/lib/bb/siggen.py > +++ b/lib/bb/siggen.py > @@ -247,8 +247,11 @@ class SignatureGeneratorBasic(SignatureGenerator): > #for task in self.taskdeps[fn]: > # self.dump_sigtask(fn, task, d.getVar("STAMP"), False) > > + basehashes = {} > for task in taskdeps: > - d.setVar("BB_BASEHASH:task-%s" % task, self.basehash[fn + ":" + task]) > + basehashes[task] = self.basehash[fn + ":" + task] In my testing, dictionary comprehension is the fastest method to populate a dictionary, so if this is a critical path, you could optimize it as: basehash = {task: self.basehash["%s:%s" % (fn, task)] for task in taskdeps} I can't remember if that level of micro optimization helps here though; if not feel free to ignore me :) > + > + d.setVar("__siggen_basehashes", basehashes) > > def postparsing_clean_cache(self): > # > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#14134): https://lists.openembedded.org/g/bitbake-devel/message/14134 > Mute This Topic: https://lists.openembedded.org/mt/95394525/3616693 > Group Owner: bitbake-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [JPEWhacker@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
diff --git a/lib/bb/cache.py b/lib/bb/cache.py index cb6cf21727..e117fe56cb 100644 --- a/lib/bb/cache.py +++ b/lib/bb/cache.py @@ -28,7 +28,7 @@ import shutil logger = logging.getLogger("BitBake.Cache") -__cache_version__ = "154" +__cache_version__ = "155" def getCacheFile(path, filename, mc, data_hash): mcspec = '' @@ -105,7 +105,7 @@ class CoreRecipeInfo(RecipeInfoCommon): self.tasks = metadata.getVar('__BBTASKS', False) - self.basetaskhashes = self.taskvar('BB_BASEHASH', self.tasks, metadata) + self.basetaskhashes = metadata.getVar('__siggen_basehashes', False) or {} self.hashfilename = self.getvar('BB_HASHFILENAME', metadata) self.task_deps = metadata.getVar('_task_deps', False) or {'tasks': [], 'parents': {}} diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py index 72b906c153..34b71d596a 100644 --- a/lib/bb/siggen.py +++ b/lib/bb/siggen.py @@ -247,8 +247,11 @@ class SignatureGeneratorBasic(SignatureGenerator): #for task in self.taskdeps[fn]: # self.dump_sigtask(fn, task, d.getVar("STAMP"), False) + basehashes = {} for task in taskdeps: - d.setVar("BB_BASEHASH:task-%s" % task, self.basehash[fn + ":" + task]) + basehashes[task] = self.basehash[fn + ":" + task] + + d.setVar("__siggen_basehashes", basehashes) def postparsing_clean_cache(self): #
The basehash data is really internal bitbake data and passing an object directly is more efficient than creating and then extracting variables. This will match the format of other data we may optionally wish to store in the cache so more to the more efficient method. Nothing I can see is using this data today (and nothing should be). Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- lib/bb/cache.py | 4 ++-- lib/bb/siggen.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) v2: Add default for the cache entry so selftest works