diff options
author | David Reyna <david.reyna@windriver.com> | 2014-05-21 15:15:09 +0100 |
---|---|---|
committer | Alexandru DAMIAN <alexandru.damian@intel.com> | 2014-06-20 14:46:36 +0100 |
commit | e068727de686cd6c43cebacdac5b898c134705ef (patch) | |
tree | 94326aea7fadd9fedeb82522a14fd8140170071b /lib | |
parent | 23908ecddb908d8238be0c1bdbcf2ecf6a9a088f (diff) | |
download | bitbake-e068727de686cd6c43cebacdac5b898c134705ef.tar.gz |
toaster: reduce redundant foreign key lookups
Replace redundant foreign key lookups with "with" to improve all
recipes page load time. Do depends pre-lookup in the view class,
and use python itertation instead of filter() all to achieve x16
processing speedup.
[YOCTO #6137]
Signed-off-by: David Reyna <David.Reyna@windriver.com>
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Conflicts:
bitbake/lib/toaster/toastergui/views.py
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/toaster/toastergui/templates/recipes.html | 20 | ||||
-rwxr-xr-x[-rw-r--r--] | lib/toaster/toastergui/views.py | 15 |
2 files changed, 29 insertions, 6 deletions
diff --git a/lib/toaster/toastergui/templates/recipes.html b/lib/toaster/toastergui/templates/recipes.html index 907b83d26..791a487a8 100755 --- a/lib/toaster/toastergui/templates/recipes.html +++ b/lib/toaster/toastergui/templates/recipes.html @@ -45,31 +45,39 @@ <td><a href="{% url "recipe" build.pk recipe.pk %}">{{recipe.version}}</a></td> <!-- Depends --> <td class="depends_on"> - {% if recipe.r_dependencies_recipe.all.count %} + {% with deps=recipe_deps|get_dict_value:recipe.pk %} + {% with count=deps|length %} + {% if count %} <a class="btn" title="<a href='{% url "recipe" build.pk recipe.pk %}#dependencies'>{{recipe.name}}</a> dependencies" data-content="<ul class='unstyled'> - {% for i in recipe.r_dependencies_recipe.all|dictsort:"depends_on.name"%} + {% for i in deps|dictsort:"depends_on.name"%} <li><a href='{% url "recipe" build.pk i.depends_on.pk %}'>{{i.depends_on.name}}</a></li> {% endfor %} </ul>"> - {{recipe.r_dependencies_recipe.all.count}} + {{count}} </a> {% endif %} + {% endwith %} + {% endwith %} </td> <!-- Brought in by --> <td class="depends_by"> - {% if recipe.r_dependencies_depends.all.count %} + {% with revs=recipe_revs|get_dict_value:recipe.pk %} + {% with count=revs|length %} + {% if count %} <a class="btn" title="<a href='{% url "recipe" build.pk recipe.pk %}#brought-in-by'>{{recipe.name}}</a> reverse dependencies" data-content="<ul class='unstyled'> - {% for i in recipe.r_dependencies_depends.all|dictsort:"recipe.name"%} + {% for i in revs|dictsort:"recipe.name" %} <li><a href='{% url "recipe" build.pk i.recipe.pk %}'>{{i.recipe.name}}</a></li> {% endfor %} </ul>"> - {{recipe.r_dependencies_depends.all.count}} + {{count}} </a> {% endif %} + {% endwith %} + {% endwith %} </td> <!-- Recipe file --> <td class="recipe_file">{{recipe.file_path}}</td> diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py index 4622810cf..686cd5c8c 100644..100755 --- a/lib/toaster/toastergui/views.py +++ b/lib/toaster/toastergui/views.py @@ -1074,11 +1074,26 @@ def recipes(request, build_id): recipes = _build_page_range(Paginator(queryset, request.GET.get('count', 100)),request.GET.get('page', 1)) + # prefetch the forward and reverse recipe dependencies + deps = { }; revs = { } + queryset_dependency=Recipe_Dependency.objects.filter(recipe__layer_version__build_id = build_id) + for recipe in recipes: + deplist = [ ] + for recipe_dep in [x for x in queryset_dependency if x.recipe_id == recipe.id]: + deplist.append(recipe_dep) + deps[recipe.id] = deplist + revlist = [ ] + for recipe_dep in [x for x in queryset_dependency if x.depends_on_id == recipe.id]: + revlist.append(recipe_dep) + revs[recipe.id] = revlist + context = { 'objectname': 'recipes', 'build': Build.objects.filter(pk=build_id)[0], 'objects': recipes, 'default_orderby' : 'name:+', + 'recipe_deps' : deps, + 'recipe_revs' : revs, 'tablecols':[ { 'name':'Recipe', |