On (11/02/11 15:01), Nathan Bell wrote:
> I'm new to the list, so let me know if I'm completely crazy.
> 
> I noticed that the "Resolving any missing task queue dependencies"
> step takes quite a while, depending on the size of the environment
> (number of .bb files being processed). Stepping into the bitbake
> code for the first time I noticed the providers.py
> getRuntimeProviders() function calling re.compile() on the same data
> over and over again. Provided is a patch that moves this step into
> the cache.py Cache::handleData() function so it is ran once for each
> package rather than multiple times.
> 
> The patch is against the latest source release, 1.8.19.

Do you see this slow down on latest master of bitbake too?
could you try that out

> 
> -- 
> Nathan Bell
> /Software Engineer/
> Action Target Inc.
> 801-377-8033 x154
> [email protected] <mailto:[email protected]>
> www.actiontarget.com <http://www.actiontarget.com>
> "Better Equipped. Better Prepared"

> diff -ruN bitbake-1.8.19.orig/lib/bb/cache.py bitbake-1.8.19/lib/bb/cache.py
> --- bitbake-1.8.19.orig/lib/bb/cache.py       2010-12-23 13:26:03.000000000 
> -0700
> +++ bitbake-1.8.19/lib/bb/cache.py    2011-02-11 14:39:57.000000000 -0700
> @@ -405,6 +405,12 @@
>              if not package in cacheData.packages_dynamic:
>                  cacheData.packages_dynamic[package] = []
>              cacheData.packages_dynamic[package].append(file_name)
> +            if not package in cacheData.packages_dynamic_pattern:
> +                try:
> +                    cacheData.packages_dynamic_pattern[package] = 
> re.compile(package.replace('+', "\+"))
> +                except:
> +                    bb.msg.error(bb.msg.domain.Provider, "Error parsing re 
> expression: %s" % pattern)
> +                    raise
>  
>          for rprovide in rprovides:
>              if not rprovide in cacheData.rproviders:
> @@ -503,6 +509,7 @@
>          self.rproviders = {}
>          self.packages = {}
>          self.packages_dynamic = {}
> +        self.packages_dynamic_pattern = {}
>          self.possible_world = []
>          self.pkg_pn = {}
>          self.pkg_fn = {}
> diff -ruN bitbake-1.8.19.orig/lib/bb/providers.py 
> bitbake-1.8.19/lib/bb/providers.py
> --- bitbake-1.8.19.orig/lib/bb/providers.py   2010-12-23 13:26:03.000000000 
> -0700
> +++ bitbake-1.8.19/lib/bb/providers.py        2011-02-11 14:39:51.000000000 
> -0700
> @@ -297,11 +297,7 @@
>  
>      # Only search dynamic packages if we can't find anything in other 
> variables
>      for pattern in dataCache.packages_dynamic:
> -        try:
> -            regexp = re.compile(pattern.replace('+', "\+"))
> -        except:
> -            bb.msg.error(bb.msg.domain.Provider, "Error parsing re 
> expression: %s" % pattern)
> -            raise
> +        regexp = dataCache.packages_dynamic_pattern[pattern]
>          if regexp.match(rdepend):
>              rproviders += dataCache.packages_dynamic[pattern]
>  

> _______________________________________________
> Bitbake-dev mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/bitbake-dev

_______________________________________________
Bitbake-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bitbake-dev

Reply via email to