diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2020-06-05 22:15:34 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-06-06 23:12:51 +0100 |
commit | 3c5c7346adf4ca7ec761c08738f12401ba75b7c8 (patch) | |
tree | 293e2cd181764397993f2bfa5483e6fbc318add8 /lib | |
parent | 74fd10b33c66f4142d6eff6531200f7620a06ae0 (diff) | |
download | bitbake-3c5c7346adf4ca7ec761c08738f12401ba75b7c8.tar.gz |
bitbake: cache: Cache size optimization
Now that there is a cache object per multiconfig, it is not necessary
for each cache object to parse all other multiconfigs. Instead, each
cache now only parses the files for it's multiconfig.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bb/cache.py | 22 | ||||
-rw-r--r-- | lib/bb/cooker.py | 8 |
2 files changed, 19 insertions, 11 deletions
diff --git a/lib/bb/cache.py b/lib/bb/cache.py index b34bfa9b5..df78d5b70 100644 --- a/lib/bb/cache.py +++ b/lib/bb/cache.py @@ -328,7 +328,7 @@ class NoCache(object): bb_data = self.load_bbfile(virtualfn, appends, virtonly=True) return bb_data[virtual] - def load_bbfile(self, bbfile, appends, virtonly = False): + def load_bbfile(self, bbfile, appends, virtonly = False, mc=None): """ Load and parse one .bb build file Return the data and whether parsing resulted in the file being skipped @@ -341,6 +341,10 @@ class NoCache(object): datastores = parse_recipe(bb_data, bbfile, appends, mc) return datastores + if mc is not None: + bb_data = self.databuilder.mcdata[mc].createCopy() + return parse_recipe(bb_data, bbfile, appends, mc) + bb_data = self.data.createCopy() datastores = parse_recipe(bb_data, bbfile, appends) @@ -500,7 +504,7 @@ class Cache(NoCache): """Parse the specified filename, returning the recipe information""" self.logger.debug(1, "Parsing %s", filename) infos = [] - datastores = self.load_bbfile(filename, appends) + datastores = self.load_bbfile(filename, appends, mc=self.mc) depends = [] variants = [] # Process the "real" fn last so we can store variants list @@ -720,8 +724,18 @@ class Cache(NoCache): return bb.parse.cached_mtime_noerror(cachefile) def add_info(self, filename, info_array, cacheData, parsed=None, watcher=None): - if cacheData is not None and isinstance(info_array[0], CoreRecipeInfo) and (not info_array[0].skipped): - cacheData.add_from_recipeinfo(filename, info_array) + if self.mc is not None: + (fn, cls, mc) = virtualfn2realfn(filename) + if mc: + self.logger.error("Unexpected multiconfig %s", virtualfn) + return + + vfn = realfn2virtual(fn, cls, self.mc) + else: + vfn = filename + + if isinstance(info_array[0], CoreRecipeInfo) and (not info_array[0].skipped): + cacheData.add_from_recipeinfo(vfn, info_array) if watcher: watcher(info_array[0].file_depends) diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index 50526d52b..effd02442 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -2199,13 +2199,7 @@ class CookerParser(object): if info_array[0].skipped: self.skipped += 1 self.cooker.skiplist[virtualfn] = SkippedPackage(info_array[0]) - (fn, cls, fnmc) = bb.cache.virtualfn2realfn(virtualfn) - - if fnmc == mc: - cache = self.cooker.recipecaches[mc] - else: - cache = None - self.bb_caches[mc].add_info(virtualfn, info_array, cache, + self.bb_caches[mc].add_info(virtualfn, info_array, self.cooker.recipecaches[mc], parsed=parsed, watcher = self.cooker.add_filewatch) return True |