Merge lp:~mvo/software-center/workaround-gtk-regression-lp986186 into lp:software-center

Proposed by Michael Vogt
Status: Merged
Merged at revision: 2994
Proposed branch: lp:~mvo/software-center/workaround-gtk-regression-lp986186
Merge into: lp:software-center
Diff against target: 103 lines (+37/-26)
1 file modified
softwarecenter/ui/gtk3/widgets/apptreeview.py (+37/-26)
To merge this branch: bzr merge lp:~mvo/software-center/workaround-gtk-regression-lp986186
Reviewer Review Type Date Requested Status
Gary Lasker (community) Approve
Review via email: mp+103314@code.launchpad.net

Description of the change

This is a workaround for bug #986186. To test:
1. open s-c and click on system
2. watch the system freeze for more than 10s

with this branch the delay is in the range of 1s now, not great but better than before.

To post a comment you must log in.
Revision history for this message
Gary Lasker (gary-lasker) wrote :

Hello Michael! So, hmm, on my system it seems I don't see nearly as dramatic a delay when clicking System as you are seeing. For me, it's about 3-4 seconds. That's about the same time as I'm seeing in my Oneiric VM, fully updated. With your branch, it does seem a slight amount faster, maybe about 1/2 second or so. Based on this, I'm not sure that I can say with any confidence that I'm able to reproduce the issue.

The other thing that I'm finding a bit confusing is that the report, bug 986186, appears to be against Software Center 3.0.6 in Oneiric, but this shouldn't be a bug in Oneiric.

However, looking at your code, it looks just fine, and so I will mark this as approved, with the caveat that I appear to be unable to reproduce the actual issue on my own machine, and so cannot verify the fix directly.

And please let me know if I am misunderstanding something! Thanks! :)

review: Approve
Revision history for this message
Michael Vogt (mvo) wrote :

Thanks Gary, that is interessting, maybe its releated to something like theme/a11y or something like this. If you run the testcase attached to the bug (https://bugs.launchpad.net/ubuntu/+source/software-center/+bug/986186/+attachment/3101578/+files/lala.py) what numbers do you get?

Revision history for this message
Gary Lasker (gary-lasker) wrote :

Here's the output of lala:

$ python lala.py
not visible set_model is fast
set_model takes: 0.0163969993591
nr of nr_cell_data_func_calls 0

delayed set_model is not so fast anymore
set_model takes: 0.0361030101776
nr of nr_cell_data_func_calls 91

Hmm, does this make sense? Very different to your result, it seems??

Revision history for this message
Gary Lasker (gary-lasker) wrote :

P.S. My these is Ambience and I have a11y turned off.

Revision history for this message
Gary Lasker (gary-lasker) wrote :

Sorry, my *theme* is Ambience.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'softwarecenter/ui/gtk3/widgets/apptreeview.py'
--- softwarecenter/ui/gtk3/widgets/apptreeview.py 2012-04-16 09:38:51 +0000
+++ softwarecenter/ui/gtk3/widgets/apptreeview.py 2012-04-24 16:06:20 +0000
@@ -63,17 +63,13 @@
6363
64 self.set_headers_visible(False)64 self.set_headers_visible(False)
6565
66 # a11y: this is a cell renderer that only displays a icon, but still66 # our custom renderer
67 # has a markup property for orca and friends67 self._renderer = CellRendererAppView(icons,
68 # we use it so that orca and other a11y tools get proper text to read
69 # it needs to be the first one, because that is what the tools look
70 # at by default
71 tr = CellRendererAppView(icons,
72 self.create_pango_layout(''),68 self.create_pango_layout(''),
73 show_ratings,69 show_ratings,
74 Icons.INSTALLED_OVERLAY)70 Icons.INSTALLED_OVERLAY)
75 tr.set_pixbuf_width(32)71 self._renderer.set_pixbuf_width(32)
76 tr.set_button_spacing(em(0.3))72 self._renderer.set_button_spacing(em(0.3))
7773
78 # create buttons and set initial strings74 # create buttons and set initial strings
79 info = CellButtonRenderer(self,75 info = CellButtonRenderer(self,
@@ -89,37 +85,43 @@
89 self.VARIANT_REMOVE: _('Remove'),85 self.VARIANT_REMOVE: _('Remove'),
90 self.VARIANT_PURCHASE: _(u'Buy\u2026')})86 self.VARIANT_PURCHASE: _(u'Buy\u2026')})
9187
92 tr.button_pack_start(info)88 self._renderer.button_pack_start(info)
93 tr.button_pack_end(action)89 self._renderer.button_pack_end(action)
9490
95 column = Gtk.TreeViewColumn("Applications", tr,91 self._column = Gtk.TreeViewColumn(
96 application=AppGenericStore.COL_ROW_DATA)92 "Applications", self._renderer,
97 column.set_cell_data_func(tr, self._cell_data_func_cb)93 application=AppGenericStore.COL_ROW_DATA)
98 column.set_fixed_width(200)94 self._column.set_cell_data_func(
99 column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)95 self._renderer, self._cell_data_func_cb)
100 self.append_column(column)96 self._column.set_fixed_width(200)
97 self._column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
98 self.append_column(self._column)
10199
102 # network status watcher100 # network status watcher
103 watcher = get_network_watcher()101 watcher = get_network_watcher()
104 watcher.connect("changed", self._on_net_state_changed, tr)102 watcher.connect("changed", self._on_net_state_changed, self._renderer)
105103
106 # custom cursor104 # custom cursor
107 self._cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2)105 self._cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2)
108106
109 self.connect("style-updated", self._on_style_updated, tr)107 self.connect("style-updated", self._on_style_updated, self._renderer)
110 # button and motion are "special"108 # button and motion are "special"
111 self.connect("button-press-event", self._on_button_press_event, tr)109 self.connect("button-press-event", self._on_button_press_event,
112 self.connect("button-release-event", self._on_button_release_event, tr)110 self._renderer)
113 self.connect("key-press-event", self._on_key_press_event, tr)111 self.connect("button-release-event", self._on_button_release_event,
114 self.connect("key-release-event", self._on_key_release_event, tr)112 self._renderer)
115 self.connect("motion-notify-event", self._on_motion, tr)113 self.connect("key-press-event", self._on_key_press_event,
116 self.connect("cursor-changed", self._on_cursor_changed, tr)114 self._renderer)
115 self.connect("key-release-event", self._on_key_release_event,
116 self._renderer)
117 self.connect("motion-notify-event", self._on_motion, self._renderer)
118 self.connect("cursor-changed", self._on_cursor_changed, self._renderer)
117 # our own "activate" handler119 # our own "activate" handler
118 self.connect("row-activated", self._on_row_activated, tr)120 self.connect("row-activated", self._on_row_activated, self._renderer)
119121
120 self.backend = get_install_backend()122 self.backend = get_install_backend()
121 self._transactions_connected = False123 self._transactions_connected = False
122 self.connect('realize', self._on_realize, tr)124 self.connect('realize', self._on_realize, self._renderer)
123125
124 @property126 @property
125 def appmodel(self):127 def appmodel(self):
@@ -144,6 +146,15 @@
144 model.clear()146 model.clear()
145 self.set_model(model)147 self.set_model(model)
146148
149 def set_model(self, model):
150 # the set_cell_data_func() calls here are a workaround for bug
151 # LP: #986186 - once that is fixed upstream we can revert this
152 # and remove the entire "set_model" again
153 self._column.set_cell_data_func(self._renderer, None)
154 Gtk.TreeView.set_model(self, model)
155 self._column.set_cell_data_func(
156 self._renderer, self._cell_data_func_cb)
157
147 def expand_path(self, path):158 def expand_path(self, path):
148 if path is not None and not isinstance(path, Gtk.TreePath):159 if path is not None and not isinstance(path, Gtk.TreePath):
149 raise TypeError("Expects Gtk.TreePath or None, got %s" %160 raise TypeError("Expects Gtk.TreePath or None, got %s" %

Subscribers

People subscribed via source and target branches