From bf9ff3de5f24ffabbf7093f0664730f22d31f191 Mon Sep 17 00:00:00 2001 From: David Reyna Date: Wed, 21 May 2014 15:15:09 +0100 Subject: bitbake: 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] (Bitbake rev: a68a6dc50c11cc59e7c873414e3e22ac2644dea7) Signed-off-by: David Reyna Signed-off-by: Alexandru DAMIAN Conflicts: bitbake/lib/toaster/toastergui/views.py Signed-off-by: Richard Purdie --- .../lib/toaster/toastergui/templates/recipes.html | 20 ++++++++++++++------ bitbake/lib/toaster/toastergui/views.py | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) mode change 100644 => 100755 bitbake/lib/toaster/toastergui/views.py diff --git a/bitbake/lib/toaster/toastergui/templates/recipes.html b/bitbake/lib/toaster/toastergui/templates/recipes.html index 907b83d269..791a487a81 100755 --- a/bitbake/lib/toaster/toastergui/templates/recipes.html +++ b/bitbake/lib/toaster/toastergui/templates/recipes.html @@ -45,31 +45,39 @@ {{recipe.version}} - {% if recipe.r_dependencies_recipe.all.count %} + {% with deps=recipe_deps|get_dict_value:recipe.pk %} + {% with count=deps|length %} + {% if count %} {{recipe.name}} dependencies" data-content="
    - {% for i in recipe.r_dependencies_recipe.all|dictsort:"depends_on.name"%} + {% for i in deps|dictsort:"depends_on.name"%}
  • {{i.depends_on.name}}
  • {% endfor %}
"> - {{recipe.r_dependencies_recipe.all.count}} + {{count}} {% endif %} + {% endwith %} + {% endwith %} - {% if recipe.r_dependencies_depends.all.count %} + {% with revs=recipe_revs|get_dict_value:recipe.pk %} + {% with count=revs|length %} + {% if count %} {{recipe.name}} reverse dependencies" data-content="
    - {% for i in recipe.r_dependencies_depends.all|dictsort:"recipe.name"%} + {% for i in revs|dictsort:"recipe.name" %}
  • {{i.recipe.name}}
  • {% endfor %}
"> - {{recipe.r_dependencies_depends.all.count}} + {{count}} {% endif %} + {% endwith %} + {% endwith %} {{recipe.file_path}} diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py old mode 100644 new mode 100755 index 4622810cf9..686cd5c8ce --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/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', -- cgit v1.2.3-54-g00ecf