| Submitter | Dongxiao Xu |
|---|---|
| Date | March 14, 2012, 9:26 a.m. |
| Message ID | <b2f277bf2d1de5aff3f9ef5be9cd3a9c81897852.1331716896.git.dongxiao.xu@intel.com> |
| Download | mbox | patch |
| Permalink | /patch/23305/ |
| State | Accepted |
| Commit | 5ad7c54f4b8739b9ae097c68978093a53f950ed7 |
| Headers | show |
Comments
On 14/03/12 02:26, Dongxiao Xu wrote: > Originally we will send selection chagned notification in each > include_item and exclude_item, which is time cost since these are > recursive functions and we may select hundreds of recipes/packages. > > The improvement is to move the notification from include_item and > exclude_item to the place where the two functions are called. > This could greatly improve the selection/deselection speed for recipe > and package lists. Awesome! So instead of sending the change notification for each included/excluded item with this change the signal will be sent once when a set of changes are made. Right? > > Signed-off-by: Dongxiao Xu<dongxiao.xu@intel.com> Signed-off-by: Joshua Lock <josh@linux.intel.com> > --- > lib/bb/ui/crumbs/hoblistmodel.py | 10 +++------- > lib/bb/ui/crumbs/packageselectionpage.py | 1 + > lib/bb/ui/crumbs/recipeselectionpage.py | 1 + > 3 files changed, 5 insertions(+), 7 deletions(-) > > diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py > index edd61b5..caf31bc 100644 > --- a/lib/bb/ui/crumbs/hoblistmodel.py > +++ b/lib/bb/ui/crumbs/hoblistmodel.py > @@ -216,8 +216,6 @@ class PackageListModel(gtk.TreeStore): > > self[item_path][self.COL_INC] = True > > - self.selection_change_notification() > - > it = self.get_iter(item_path) > > # If user explicitly selects a recipe, all its providing packages are selected. > @@ -276,8 +274,6 @@ class PackageListModel(gtk.TreeStore): > > self[item_path][self.COL_INC] = False > > - self.selection_change_notification() > - > item_name = self[item_path][self.COL_NAME] > item_rdep = self[item_path][self.COL_RDEP] > it = self.get_iter(item_path) > @@ -343,6 +339,7 @@ class PackageListModel(gtk.TreeStore): > else: > left.append(pn) > > + self.selection_change_notification() > return left > > def get_selected_packages(self): > @@ -604,7 +601,6 @@ class RecipeListModel(gtk.ListStore): > item_deps = self[item_path][self.COL_DEPS] > > self[item_path][self.COL_INC] = True > - self.selection_change_notification() > > item_bin = self[item_path][self.COL_BINB].split(', ') > if binb and not binb in item_bin: > @@ -642,8 +638,6 @@ class RecipeListModel(gtk.ListStore): > > self[item_path][self.COL_INC] = False > > - self.selection_change_notification() > - > item_name = self[item_path][self.COL_NAME] > item_deps = self[item_path][self.COL_DEPS] > if item_deps: > @@ -703,6 +697,7 @@ class RecipeListModel(gtk.ListStore): > path = self.pn_path[pn] > self.include_item(item_path=path, > binb="User Selected") > + self.selection_change_notification() > > def get_selected_image(self): > it = self.get_iter_first() > @@ -724,3 +719,4 @@ class RecipeListModel(gtk.ListStore): > self.include_item(item_path=path, > binb="User Selected", > image_contents=True) > + self.selection_change_notification() > diff --git a/lib/bb/ui/crumbs/packageselectionpage.py b/lib/bb/ui/crumbs/packageselectionpage.py > index 0427fe2..4fb199e 100755 > --- a/lib/bb/ui/crumbs/packageselectionpage.py > +++ b/lib/bb/ui/crumbs/packageselectionpage.py > @@ -206,6 +206,7 @@ class PackageSelectionPage (HobPage): > else: > self.package_model.exclude_item(item_path=path) > > + self.refresh_selection() > self.builder.window_sensitive(True) > > def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree): > diff --git a/lib/bb/ui/crumbs/recipeselectionpage.py b/lib/bb/ui/crumbs/recipeselectionpage.py > index 234734c..50d4363 100755 > --- a/lib/bb/ui/crumbs/recipeselectionpage.py > +++ b/lib/bb/ui/crumbs/recipeselectionpage.py > @@ -202,6 +202,7 @@ class RecipeSelectionPage (HobPage): > else: > self.recipe_model.exclude_item(item_path=path) > > + self.refresh_selection() > self.builder.window_sensitive(True) > > def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree):
On Wed, 2012-03-14 at 12:37 -0700, Joshua Lock wrote: > > On 14/03/12 02:26, Dongxiao Xu wrote: > > Originally we will send selection chagned notification in each > > include_item and exclude_item, which is time cost since these are > > recursive functions and we may select hundreds of recipes/packages. > > > > The improvement is to move the notification from include_item and > > exclude_item to the place where the two functions are called. > > This could greatly improve the selection/deselection speed for recipe > > and package lists. > > Awesome! So instead of sending the change notification for each > included/excluded item with this change the signal will be sent once > when a set of changes are made. Right? Yes, you are right. Now the signal only emits once where a bunch of changes happen. Thanks, Dongxiao > > > > > Signed-off-by: Dongxiao Xu<dongxiao.xu@intel.com> > > Signed-off-by: Joshua Lock <josh@linux.intel.com> > > > --- > > lib/bb/ui/crumbs/hoblistmodel.py | 10 +++------- > > lib/bb/ui/crumbs/packageselectionpage.py | 1 + > > lib/bb/ui/crumbs/recipeselectionpage.py | 1 + > > 3 files changed, 5 insertions(+), 7 deletions(-) > > > > diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py > > index edd61b5..caf31bc 100644 > > --- a/lib/bb/ui/crumbs/hoblistmodel.py > > +++ b/lib/bb/ui/crumbs/hoblistmodel.py > > @@ -216,8 +216,6 @@ class PackageListModel(gtk.TreeStore): > > > > self[item_path][self.COL_INC] = True > > > > - self.selection_change_notification() > > - > > it = self.get_iter(item_path) > > > > # If user explicitly selects a recipe, all its providing packages are selected. > > @@ -276,8 +274,6 @@ class PackageListModel(gtk.TreeStore): > > > > self[item_path][self.COL_INC] = False > > > > - self.selection_change_notification() > > - > > item_name = self[item_path][self.COL_NAME] > > item_rdep = self[item_path][self.COL_RDEP] > > it = self.get_iter(item_path) > > @@ -343,6 +339,7 @@ class PackageListModel(gtk.TreeStore): > > else: > > left.append(pn) > > > > + self.selection_change_notification() > > return left > > > > def get_selected_packages(self): > > @@ -604,7 +601,6 @@ class RecipeListModel(gtk.ListStore): > > item_deps = self[item_path][self.COL_DEPS] > > > > self[item_path][self.COL_INC] = True > > - self.selection_change_notification() > > > > item_bin = self[item_path][self.COL_BINB].split(', ') > > if binb and not binb in item_bin: > > @@ -642,8 +638,6 @@ class RecipeListModel(gtk.ListStore): > > > > self[item_path][self.COL_INC] = False > > > > - self.selection_change_notification() > > - > > item_name = self[item_path][self.COL_NAME] > > item_deps = self[item_path][self.COL_DEPS] > > if item_deps: > > @@ -703,6 +697,7 @@ class RecipeListModel(gtk.ListStore): > > path = self.pn_path[pn] > > self.include_item(item_path=path, > > binb="User Selected") > > + self.selection_change_notification() > > > > def get_selected_image(self): > > it = self.get_iter_first() > > @@ -724,3 +719,4 @@ class RecipeListModel(gtk.ListStore): > > self.include_item(item_path=path, > > binb="User Selected", > > image_contents=True) > > + self.selection_change_notification() > > diff --git a/lib/bb/ui/crumbs/packageselectionpage.py b/lib/bb/ui/crumbs/packageselectionpage.py > > index 0427fe2..4fb199e 100755 > > --- a/lib/bb/ui/crumbs/packageselectionpage.py > > +++ b/lib/bb/ui/crumbs/packageselectionpage.py > > @@ -206,6 +206,7 @@ class PackageSelectionPage (HobPage): > > else: > > self.package_model.exclude_item(item_path=path) > > > > + self.refresh_selection() > > self.builder.window_sensitive(True) > > > > def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree): > > diff --git a/lib/bb/ui/crumbs/recipeselectionpage.py b/lib/bb/ui/crumbs/recipeselectionpage.py > > index 234734c..50d4363 100755 > > --- a/lib/bb/ui/crumbs/recipeselectionpage.py > > +++ b/lib/bb/ui/crumbs/recipeselectionpage.py > > @@ -202,6 +202,7 @@ class RecipeSelectionPage (HobPage): > > else: > > self.recipe_model.exclude_item(item_path=path) > > > > + self.refresh_selection() > > self.builder.window_sensitive(True) > > > > def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree): >
Patch
diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py index edd61b5..caf31bc 100644 --- a/lib/bb/ui/crumbs/hoblistmodel.py +++ b/lib/bb/ui/crumbs/hoblistmodel.py @@ -216,8 +216,6 @@ class PackageListModel(gtk.TreeStore): self[item_path][self.COL_INC] = True - self.selection_change_notification() - it = self.get_iter(item_path) # If user explicitly selects a recipe, all its providing packages are selected. @@ -276,8 +274,6 @@ class PackageListModel(gtk.TreeStore): self[item_path][self.COL_INC] = False - self.selection_change_notification() - item_name = self[item_path][self.COL_NAME] item_rdep = self[item_path][self.COL_RDEP] it = self.get_iter(item_path) @@ -343,6 +339,7 @@ class PackageListModel(gtk.TreeStore): else: left.append(pn) + self.selection_change_notification() return left def get_selected_packages(self): @@ -604,7 +601,6 @@ class RecipeListModel(gtk.ListStore): item_deps = self[item_path][self.COL_DEPS] self[item_path][self.COL_INC] = True - self.selection_change_notification() item_bin = self[item_path][self.COL_BINB].split(', ') if binb and not binb in item_bin: @@ -642,8 +638,6 @@ class RecipeListModel(gtk.ListStore): self[item_path][self.COL_INC] = False - self.selection_change_notification() - item_name = self[item_path][self.COL_NAME] item_deps = self[item_path][self.COL_DEPS] if item_deps: @@ -703,6 +697,7 @@ class RecipeListModel(gtk.ListStore): path = self.pn_path[pn] self.include_item(item_path=path, binb="User Selected") + self.selection_change_notification() def get_selected_image(self): it = self.get_iter_first() @@ -724,3 +719,4 @@ class RecipeListModel(gtk.ListStore): self.include_item(item_path=path, binb="User Selected", image_contents=True) + self.selection_change_notification() diff --git a/lib/bb/ui/crumbs/packageselectionpage.py b/lib/bb/ui/crumbs/packageselectionpage.py index 0427fe2..4fb199e 100755 --- a/lib/bb/ui/crumbs/packageselectionpage.py +++ b/lib/bb/ui/crumbs/packageselectionpage.py @@ -206,6 +206,7 @@ class PackageSelectionPage (HobPage): else: self.package_model.exclude_item(item_path=path) + self.refresh_selection() self.builder.window_sensitive(True) def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree): diff --git a/lib/bb/ui/crumbs/recipeselectionpage.py b/lib/bb/ui/crumbs/recipeselectionpage.py index 234734c..50d4363 100755 --- a/lib/bb/ui/crumbs/recipeselectionpage.py +++ b/lib/bb/ui/crumbs/recipeselectionpage.py @@ -202,6 +202,7 @@ class RecipeSelectionPage (HobPage): else: self.recipe_model.exclude_item(item_path=path) + self.refresh_selection() self.builder.window_sensitive(True) def table_toggled_cb(self, table, cell, view_path, toggled_columnid, view_tree):
Originally we will send selection chagned notification in each include_item and exclude_item, which is time cost since these are recursive functions and we may select hundreds of recipes/packages. The improvement is to move the notification from include_item and exclude_item to the place where the two functions are called. This could greatly improve the selection/deselection speed for recipe and package lists. Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com> --- lib/bb/ui/crumbs/hoblistmodel.py | 10 +++------- lib/bb/ui/crumbs/packageselectionpage.py | 1 + lib/bb/ui/crumbs/recipeselectionpage.py | 1 + 3 files changed, 5 insertions(+), 7 deletions(-)