summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2020-06-05 22:15:34 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-06-10 12:30:01 +0100
commit59fb65f74293c5b2dba811b41f8e254d601f359b (patch)
treecfd6d208a660fb80cfef1f9344588cb301622465 /bitbake
parent3ec9d5774c56eec42ee6aa5395838a82d3a88bf0 (diff)
downloadpoky-59fb65f74293c5b2dba811b41f8e254d601f359b.tar.gz
bitbake: 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. (Bitbake rev: 3c5c7346adf4ca7ec761c08738f12401ba75b7c8) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cache.py22
-rw-r--r--bitbake/lib/bb/cooker.py8
2 files changed, 19 insertions, 11 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index b34bfa9b5a..df78d5b701 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -328,7 +328,7 @@ class NoCache(object):
328 bb_data = self.load_bbfile(virtualfn, appends, virtonly=True) 328 bb_data = self.load_bbfile(virtualfn, appends, virtonly=True)
329 return bb_data[virtual] 329 return bb_data[virtual]
330 330
331 def load_bbfile(self, bbfile, appends, virtonly = False): 331 def load_bbfile(self, bbfile, appends, virtonly = False, mc=None):
332 """ 332 """
333 Load and parse one .bb build file 333 Load and parse one .bb build file
334 Return the data and whether parsing resulted in the file being skipped 334 Return the data and whether parsing resulted in the file being skipped
@@ -341,6 +341,10 @@ class NoCache(object):
341 datastores = parse_recipe(bb_data, bbfile, appends, mc) 341 datastores = parse_recipe(bb_data, bbfile, appends, mc)
342 return datastores 342 return datastores
343 343
344 if mc is not None:
345 bb_data = self.databuilder.mcdata[mc].createCopy()
346 return parse_recipe(bb_data, bbfile, appends, mc)
347
344 bb_data = self.data.createCopy() 348 bb_data = self.data.createCopy()
345 datastores = parse_recipe(bb_data, bbfile, appends) 349 datastores = parse_recipe(bb_data, bbfile, appends)
346 350
@@ -500,7 +504,7 @@ class Cache(NoCache):
500 """Parse the specified filename, returning the recipe information""" 504 """Parse the specified filename, returning the recipe information"""
501 self.logger.debug(1, "Parsing %s", filename) 505 self.logger.debug(1, "Parsing %s", filename)
502 infos = [] 506 infos = []
503 datastores = self.load_bbfile(filename, appends) 507 datastores = self.load_bbfile(filename, appends, mc=self.mc)
504 depends = [] 508 depends = []
505 variants = [] 509 variants = []
506 # Process the "real" fn last so we can store variants list 510 # Process the "real" fn last so we can store variants list
@@ -720,8 +724,18 @@ class Cache(NoCache):
720 return bb.parse.cached_mtime_noerror(cachefile) 724 return bb.parse.cached_mtime_noerror(cachefile)
721 725
722 def add_info(self, filename, info_array, cacheData, parsed=None, watcher=None): 726 def add_info(self, filename, info_array, cacheData, parsed=None, watcher=None):
723 if cacheData is not None and isinstance(info_array[0], CoreRecipeInfo) and (not info_array[0].skipped): 727 if self.mc is not None:
724 cacheData.add_from_recipeinfo(filename, info_array) 728 (fn, cls, mc) = virtualfn2realfn(filename)
729 if mc:
730 self.logger.error("Unexpected multiconfig %s", virtualfn)
731 return
732
733 vfn = realfn2virtual(fn, cls, self.mc)
734 else:
735 vfn = filename
736
737 if isinstance(info_array[0], CoreRecipeInfo) and (not info_array[0].skipped):
738 cacheData.add_from_recipeinfo(vfn, info_array)
725 739
726 if watcher: 740 if watcher:
727 watcher(info_array[0].file_depends) 741 watcher(info_array[0].file_depends)
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 50526d52b2..effd02442c 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -2199,13 +2199,7 @@ class CookerParser(object):
2199 if info_array[0].skipped: 2199 if info_array[0].skipped:
2200 self.skipped += 1 2200 self.skipped += 1
2201 self.cooker.skiplist[virtualfn] = SkippedPackage(info_array[0]) 2201 self.cooker.skiplist[virtualfn] = SkippedPackage(info_array[0])
2202 (fn, cls, fnmc) = bb.cache.virtualfn2realfn(virtualfn) 2202 self.bb_caches[mc].add_info(virtualfn, info_array, self.cooker.recipecaches[mc],
2203
2204 if fnmc == mc:
2205 cache = self.cooker.recipecaches[mc]
2206 else:
2207 cache = None
2208 self.bb_caches[mc].add_info(virtualfn, info_array, cache,
2209 parsed=parsed, watcher = self.cooker.add_filewatch) 2203 parsed=parsed, watcher = self.cooker.add_filewatch)
2210 return True 2204 return True
2211 2205