summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorAlexandru Damian <alexandru.damian@intel.com>2015-02-24 17:20:58 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-02-24 23:35:45 +0000
commitf120b7822ea09fd234a51000c979ad97c9f26722 (patch)
treeb4eb124eeabb1aa5fb599a37688201e868cdb32a /bitbake
parentcb23e3043bf5c07f111787287a321df0ece647dd (diff)
downloadast2050-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.py2
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py40
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):
OpenPOWER on IntegriCloud