diff options
author | Alexandru Damian <alexandru.damian@intel.com> | 2015-02-24 17:20:58 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-02-24 23:35:45 +0000 |
commit | f120b7822ea09fd234a51000c979ad97c9f26722 (patch) | |
tree | b4eb124eeabb1aa5fb599a37688201e868cdb32a /bitbake | |
parent | cb23e3043bf5c07f111787287a321df0ece647dd (diff) | |
download | ast2050-yocto-poky-f120b7822ea09fd234a51000c979ad97c9f26722.zip ast2050-yocto-poky-f120b7822ea09fd234a51000c979ad97c9f26722.tar.gz |
bitbake: toastergui: performance improvements in task details page
This patch brings better forward and reverse dependency computing in
tasks page (offloading python code to the database), as well as
replacing the recursive depth-first covered-by tree search with
breadth-first search.
(Bitbake rev: bc76da054570ae385c87d14c9f2337368e8311f3)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/toaster/orm/models.py | 2 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 40 |
2 files changed, 23 insertions, 19 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 9d4f4c9..15481e5 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py @@ -393,6 +393,8 @@ class Task(models.Model): outcome_text = property(get_outcome_text) sstate_text = property(get_sstate_text) + def __unicode__(self): + return "%d %s:%s" % (self.id, self.recipe.name, self.task_name) class Meta: ordering = ('order', 'recipe' ,) unique_together = ('build', 'recipe', 'task_name', ) diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 4960ba0..aabc3d0 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -352,15 +352,17 @@ def builddashboard( request, build_id ): return render( request, template, context ) -def generateCoveredList( task ): - revList = _find_task_revdep( task ); - list = { }; - for t in revList: - if ( t.outcome == Task.OUTCOME_COVERED ): - list.update( generateCoveredList( t )); - else: - list[ t.task_name ] = t; - return( list ); + +def generateCoveredList2( revlist = [] ): + covered_list = [ x for x in revlist if x.outcome == Task.OUTCOME_COVERED ] + while len(covered_list): + revlist = [ x for x in revlist if x.outcome != Task.OUTCOME_COVERED ] + + newlist = _find_task_revdep_list(covered_list) + + revlist = list(set(revlist + newlist)) + covered_list = [ x for x in revlist if x.outcome == Task.OUTCOME_COVERED ] + return revlist def task( request, build_id, task_id ): template = "task.html" @@ -376,9 +378,10 @@ def task( request, build_id, task_id ): key=lambda t:'%s_%s %s'%( t.recipe.name, t.recipe.version, t.task_name )) coveredBy = ''; if ( task.outcome == Task.OUTCOME_COVERED ): - dict = generateCoveredList( task ) +# _list = generateCoveredList( task ) + _list = generateCoveredList2( _find_task_revdep( task ) ) coveredBy = [ ] - for name, t in dict.items( ): + for t in _list: coveredBy.append( t ) log_head = '' log_body = '' @@ -737,18 +740,17 @@ def dirinfo(request, build_id, target_id, file_path=None): return render(request, template, context) def _find_task_dep(task): - tp = [] - for p in Task_Dependency.objects.filter(task=task): - if (p.depends_on.order > 0) and (p.depends_on.outcome != Task.OUTCOME_NA): - tp.append(p.depends_on); - return tp + return map(lambda x: x.depends_on, Task_Dependency.objects.filter(task=task).filter(depends_on__order__gt = 0).exclude(depends_on__outcome = Task.OUTCOME_NA).select_related("depends_on")) def _find_task_revdep(task): tp = [] - for p in Task_Dependency.objects.filter(depends_on=task): - if (p.task.order > 0) and (p.task.outcome != Task.OUTCOME_NA): - tp.append(p.task); + tp = map(lambda t: t.task, Task_Dependency.objects.filter(depends_on=task).filter(task__order__gt=0).exclude(task__outcome = Task.OUTCOME_NA).select_related("task", "task__recipe", "task__build")) + return tp + +def _find_task_revdep_list(tasklist): + tp = [] + tp = map(lambda t: t.task, Task_Dependency.objects.filter(depends_on__in=tasklist).filter(task__order__gt=0).exclude(task__outcome = Task.OUTCOME_NA).select_related("task", "task__recipe", "task__build")) return tp def _find_task_provider(task): |