From: Joshua Lock <josh@linux.intel.com>
To: bitbake-devel@lists.openembedded.org
Subject: Re: [PATCH 1/1][Image Creator] Remove unused target tree data for Hob
Date: Thu, 21 Jul 2011 12:03:37 -0700 [thread overview]
Message-ID: <1311275017.2172.5.camel@vorpal.jf.intel.com> (raw)
In-Reply-To: <6ac3109c3cf221687a96606685fb209cb5d68556.1310696828.git.liping.ke@intel.com>
On Thu, 2011-07-21 at 13:50 +0800, Ke Liping wrote:
> From: Liping Ke <liping.ke@intel.com>
>
> Since Hob only needes package dependency information, we can
> create a new version of package information retrieving methods,
> remove task dependency information, so that we can greatly
> reduce data loading time for Hob
Liping, this patch looks reasonable and works as advertised however as
alluded to when I reviewed this patch on the yocto mailing list I don't
like the idea of a functions return type depending on an optional
parameter.
Therefore I've taken the liberty of changing the patch myself to prevent
you having to interpret my review and submit again. I hope you don't
mind?
I'm going to send another pull request with my modified patch and my
SoB.
Cheers,
Joshua
>
> Signed-off-by: Liping Ke <liping.ke@intel.com>
> ---
> bitbake/lib/bb/cooker.py | 96 +++++++++++++++++++++++++++++++++++++---------
> 1 files changed, 77 insertions(+), 19 deletions(-)
>
> diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
> index 8badd2d..26ed2ae 100644
> --- a/bitbake/lib/bb/cooker.py
> +++ b/bitbake/lib/bb/cooker.py
> @@ -296,13 +296,12 @@ class BBCooker:
> if data.getVarFlag( e, 'python', envdata ):
> logger.plain("\npython %s () {\n%s}\n", e, data.getVar(e, envdata, 1))
>
> - def prepareTreeData(self, pkgs_to_build, task):
> + def prepareTreeData(self, pkgs_to_build, task, runqueue=True):
See above.
> """
> Prepare a runqueue and taskdata object for iteration over pkgs_to_build
> """
> # Need files parsed
> self.updateCache()
> -
> # If we are told to do the None task then query the default task
> if (task == None):
> task = self.configuration.cmd
> @@ -322,12 +321,22 @@ class BBCooker:
> runlist.append([k, "do_%s" % task])
> taskdata.add_unresolved(localdata, self.status)
>
> - rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
> - rq.rqdata.prepare()
> -
> - return taskdata, rq
> -
> - def generateDepTreeData(self, pkgs_to_build, task, more_meta=False):
> + # For some users, take Hob as example, we only need less dependency data
> + # mark this kind of user as "less_meta" data requesterG
This comment is now wrong...
> + if (runqueue):
> + rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
> + rq.rqdata.prepare()
> + return taskdata, rq
> + else:
> + tasks_fnid = []
> + if len(taskdata.tasks_name) == 0:
> + # Nothing to do
> + return
> + for task in xrange(len(taskdata.tasks_name)):
> + tasks_fnid.append(taskdata.tasks_fnid[task])
> + return taskdata, tasks_fnid
> +
> + def generateTaskDepTreeData(self, pkgs_to_build, task):
> """
> Create a dependency tree of pkgs_to_build, returning the data.
> When more_meta is set to True include summary, license and group
This comment is also wrong
> @@ -351,18 +360,10 @@ class BBCooker:
> fn = taskdata.fn_index[fnid]
> pn = self.status.pkg_fn[fn]
> version = "%s:%s-%s" % self.status.pkg_pepvpr[fn]
> - if more_meta:
> - summary = self.status.summary[fn]
> - lic = self.status.license[fn]
> - section = self.status.section[fn]
> if pn not in depend_tree["pn"]:
> depend_tree["pn"][pn] = {}
> depend_tree["pn"][pn]["filename"] = fn
> depend_tree["pn"][pn]["version"] = version
> - if more_meta:
> - depend_tree["pn"][pn]["summary"] = summary
> - depend_tree["pn"][pn]["license"] = lic
> - depend_tree["pn"][pn]["section"] = section
> for dep in rq.rqdata.runq_depends[task]:
> depfn = taskdata.fn_index[rq.rqdata.runq_fnid[dep]]
> deppn = self.status.pkg_fn[depfn]
> @@ -407,12 +408,69 @@ class BBCooker:
> return depend_tree
>
>
> + def generatePkgDepTreeData(self, pkgs_to_build, task):
> + """
> + Create a dependency tree of pkgs_to_build, returning the data.
> + When more_meta is set to True include summary, license and group
> + information in the returned tree.
> + """
> + taskdata, tasks_fnid = self.prepareTreeData(pkgs_to_build, task, False)
> +
> + seen_fnids = []
> + depend_tree = {}
> + depend_tree["depends"] = {}
> + depend_tree["pn"] = {}
> + depend_tree["rdepends-pn"] = {}
> + depend_tree["packages"] = {}
> + depend_tree["rdepends-pkg"] = {}
> +
> + for task in xrange(len(tasks_fnid)):
> + fnid = tasks_fnid[task]
> + fn = taskdata.fn_index[fnid]
> + pn = self.status.pkg_fn[fn]
> + version = "%s:%s-%s" % self.status.pkg_pepvpr[fn]
> + summary = self.status.summary[fn]
> + lic = self.status.license[fn]
> + section = self.status.section[fn]
> + if pn not in depend_tree["pn"]:
> + depend_tree["pn"][pn] = {}
> + depend_tree["pn"][pn]["filename"] = fn
> + depend_tree["pn"][pn]["version"] = version
> + depend_tree["pn"][pn]["summary"] = summary
> + depend_tree["pn"][pn]["license"] = lic
> + depend_tree["pn"][pn]["section"] = section
> +
> + if fnid not in seen_fnids:
> + seen_fnids.append(fnid)
> + packages = []
> +
> + depend_tree["depends"][pn] = []
> + for dep in taskdata.depids[fnid]:
> + depend_tree["depends"][pn].append(taskdata.build_names_index[dep])
> +
> + depend_tree["rdepends-pn"][pn] = []
> + for rdep in taskdata.rdepids[fnid]:
> + depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep])
> +
> + rdepends = self.status.rundeps[fn]
> + for package in rdepends:
> + packages.append(package)
> +
> + for package in packages:
> + if package not in depend_tree["packages"]:
> + depend_tree["packages"][package] = {}
> + depend_tree["packages"][package]["pn"] = pn
> + depend_tree["packages"][package]["filename"] = fn
> + depend_tree["packages"][package]["version"] = version
> +
> + return depend_tree
> +
> def generateDepTreeEvent(self, pkgs_to_build, task):
> """
> Create a task dependency graph of pkgs_to_build.
> Generate an event with the result
> """
> - depgraph = self.generateDepTreeData(pkgs_to_build, task)
> + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task)
> bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data)
>
> def generateDotGraphFiles(self, pkgs_to_build, task):
> @@ -421,7 +479,7 @@ class BBCooker:
> Save the result to a set of .dot files.
> """
>
> - depgraph = self.generateDepTreeData(pkgs_to_build, task)
> + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task)
>
> # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn
> depends_file = file('pn-depends.dot', 'w' )
> @@ -628,7 +686,7 @@ class BBCooker:
> pkgs = pkgs + extra_pkgs
>
> # generate a dependency tree for all our packages
> - tree = self.generateDepTreeData(pkgs, 'build', more_meta=True)
> + tree = self.generatePkgDepTreeData(pkgs, 'build')
> bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data)
>
> def buildWorldTargetList(self):
--
Joshua Lock
Yocto Project "Johannes Factotum"
Intel Open Source Technology Centre
prev parent reply other threads:[~2011-07-21 19:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-15 3:28 [PATCH 0/1][Image Creator] Remove unused target tree data for Hob Ke Liping
2011-07-21 5:50 ` Ke Liping
2011-07-15 3:28 ` [PATCH 1/1] " Ke Liping
2011-07-21 5:50 ` [PATCH 1/1][Image Creator] " Ke Liping
2011-07-20 0:39 ` Joshua Lock
2011-07-21 5:31 ` Ke, Liping
2011-07-21 9:04 ` [yocto] " Koen Kooi
2011-07-21 9:04 ` Koen Kooi
2011-07-21 18:38 ` [yocto] " Joshua Lock
2011-07-21 18:38 ` [bitbake-devel] " Joshua Lock
2011-07-21 19:03 ` Joshua Lock [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1311275017.2172.5.camel@vorpal.jf.intel.com \
--to=josh@linux.intel.com \
--cc=bitbake-devel@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.