summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-05-26 08:27:15 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-12 22:50:45 +0100
commit2dbb067eba4efe3216fd4dbc0103c63f883d8ef4 (patch)
tree5612cd116971b6e3628bcf0fe5d14787242b4f22
parentd8ebb4708b31dc74a61880cad977cd80a7c8bb08 (diff)
downloadpoky-2dbb067eba4efe3216fd4dbc0103c63f883d8ef4.tar.gz
bitbake: data_smart: Tweak OVERRIDES value cache for performance
Updating the value of OVERRIDES whenever it changes turns out to be extremely expensve/pointless. Instead, clear its value and re-establish the value when we're going to use it. This gives significant speed back. (Bitbake rev: 41cf8d0c92d2d8a33fdad0921e424a0024914be1) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/data_smart.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index 4ccbedbfab..c800a9a106 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -311,8 +311,7 @@ class DataSmart(MutableMapping):
311 311
312 # cookie monster tribute 312 # cookie monster tribute
313 self.overridedata = {} 313 self.overridedata = {}
314 314 self.overrides = None
315 self.overrides = []
316 self.overridevars = set(["OVERRIDES", "FILE"]) 315 self.overridevars = set(["OVERRIDES", "FILE"])
317 316
318 def enableTracking(self): 317 def enableTracking(self):
@@ -360,8 +359,13 @@ class DataSmart(MutableMapping):
360 359
361 def internal_finalize(self, parent = False): 360 def internal_finalize(self, parent = False):
362 """Performs final steps upon the datastore, including application of overrides""" 361 """Performs final steps upon the datastore, including application of overrides"""
362 self.overrides = None
363 363
364 self.overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] 364 def need_overrides(self):
365 if self.overrides is None:
366 self.overrides = []
367 self.overrides = (self.getVar("OVERRIDES", True) or "").split(":") or []
368 self.expand_cache = {}
365 369
366 def initVar(self, var): 370 def initVar(self, var):
367 self.expand_cache = {} 371 self.expand_cache = {}
@@ -587,6 +591,7 @@ class DataSmart(MutableMapping):
587 if flag == "_content" and var in self.overridedata and not parsing: 591 if flag == "_content" and var in self.overridedata and not parsing:
588 match = False 592 match = False
589 active = {} 593 active = {}
594 self.need_overrides()
590 for (r, o) in self.overridedata[var]: 595 for (r, o) in self.overridedata[var]:
591 # What about double overrides both with "_" in the name? 596 # What about double overrides both with "_" in the name?
592 if o in self.overrides: 597 if o in self.overrides:
@@ -619,6 +624,7 @@ class DataSmart(MutableMapping):
619 if flag == "_content" and local_var is not None and "_append" in local_var and not parsing: 624 if flag == "_content" and local_var is not None and "_append" in local_var and not parsing:
620 if not value: 625 if not value:
621 value = "" 626 value = ""
627 self.need_overrides()
622 for (r, o) in local_var["_append"]: 628 for (r, o) in local_var["_append"]:
623 match = True 629 match = True
624 if o: 630 if o:
@@ -631,6 +637,7 @@ class DataSmart(MutableMapping):
631 if flag == "_content" and local_var is not None and "_prepend" in local_var and not parsing: 637 if flag == "_content" and local_var is not None and "_prepend" in local_var and not parsing:
632 if not value: 638 if not value:
633 value = "" 639 value = ""
640 self.need_overrides()
634 for (r, o) in local_var["_prepend"]: 641 for (r, o) in local_var["_prepend"]:
635 642
636 match = True 643 match = True
@@ -652,6 +659,7 @@ class DataSmart(MutableMapping):
652 659
653 if value and flag == "_content" and local_var is not None and "_remove" in local_var: 660 if value and flag == "_content" and local_var is not None and "_remove" in local_var:
654 removes = [] 661 removes = []
662 self.need_overrides()
655 for (r, o) in local_var["_remove"]: 663 for (r, o) in local_var["_remove"]:
656 match = True 664 match = True
657 if o: 665 if o:
@@ -762,7 +770,7 @@ class DataSmart(MutableMapping):
762 770
763 data._tracking = self._tracking 771 data._tracking = self._tracking
764 772
765 data.overrides = copy.copy(self.overrides) 773 data.overrides = None
766 data.overridevars = copy.copy(self.overridevars) 774 data.overridevars = copy.copy(self.overridevars)
767 data.overridedata = copy.copy(self.overridedata) 775 data.overridedata = copy.copy(self.overridedata)
768 776