Features/Optimize TreeViews: Difference between revisions
m sort in Category view |
No edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
<noinclude> | <noinclude> | ||
[[Category: | [[Category:FeatureLanded|Optimize TreeViews]] | ||
</noinclude> | </noinclude> | ||
| Line 14: | Line 13: | ||
== Current status == | == Current status == | ||
* Targeted release: 0. | * Targeted release: 0.104 | ||
* Last updated: | * Last updated: Nov 17, 2014 | ||
* Percentage of completion: | * Percentage of completion: 90% | ||
== Detailed Description == | == Detailed Description == | ||
| Line 25: | Line 24: | ||
* Sugar CellRendererIcon has too much logic inside. It should only handle how to render itself. | * Sugar CellRendererIcon has too much logic inside. It should only handle how to render itself. | ||
In particular, a CellRenderer is not a Widget, then do not have event to know when the mouse interact, | |||
then needed attach to the events on the treeview [https://github.com/sugarlabs/sugar-toolkit-gtk3/blob/master/src/sugar3/graphics/icon.py#L826] | |||
* Sugar CellRendererIcon is connected to many signals. Just detaching them while scrolling provides a performance boost. | * Sugar CellRendererIcon is connected to many signals. Just detaching them while scrolling provides a performance boost. | ||
| Line 30: | Line 31: | ||
* Sugar CellRendererIcon could benefit from caching values instead of calculating them on each render. | * Sugar CellRendererIcon could benefit from caching values instead of calculating them on each render. | ||
* There are a additional block in the Journal. That is not addressed by this feature, we guess there is a DBus blocking call, | |||
but we could't confirm that. | |||
=== Implementation === | |||
* ScrollingDetector: A new class ScrollingDetector allow simplify slow operations while the treeview is scrolling. | |||
To use it, just do: | |||
scrolling_detector = ScrollingDetector(self._scrolled_window) | |||
scrolling_detector.connect_treeview(self._tree_view) | |||
* CellRendererIcon changes: | |||
The CellRendererIcon is not a widget, then, do not receive events when the mouse | |||
enter or leaves, and all the logic in the CellRendererInvoker is more complex than should be. | |||
Worst, we had 6 different CellRendererIcons in the Journal, then we simplified (and solved issues) implementing a | |||
TreeViewInvoker. The TreeView knows where is every cell then the code is much more simple. | |||
The ObjectPalettes was created in the mouse enter callback, then if a user moved | |||
the mouse cursor over the activity icons, many palettes were created, and that palette creation is expensive [http://bugs.sugarlabs.org/ticket/4343]. | |||
Moving the palette creation to the treeview, we can create the palette when the mouse was in a cell for a specified timeout and not before. | |||
=== GTK+ concepts === | === GTK+ concepts === | ||
| Line 39: | Line 60: | ||
* GtkCellRenderer — An object for rendering a single cell https://developer.gnome.org/gtk3/stable/GtkCellRenderer | * GtkCellRenderer — An object for rendering a single cell https://developer.gnome.org/gtk3/stable/GtkCellRenderer | ||
== Benefit to Sugar == | == Benefit to Sugar == | ||
| Line 51: | Line 71: | ||
== How To Test == | == How To Test == | ||
python -m cProfile | To test the changes in the journal we used a python program to start the journal window from a terminal. | ||
You can download it here [http://dev.laptop.org/~gonzalo/start_journal.py] | |||
To use it do: | |||
python -m cProfile start_journal.py > profile.txt | |||
After run it in a Sugar terminal, the view jump to the Home, but in the frame you can see two journal icons. | |||
The second is the profiled version. In the toolbar have a Stop button. | |||
After stop, you can check the profile.txt file. | |||
== User Experience == | == User Experience == | ||
| Line 72: | Line 100: | ||
== Comments and Discussion == | == Comments and Discussion == | ||
Your comments are very welcome. Please discuss through the mailing list. | Your comments are very welcome. Please discuss through the mailing list. | ||
The initial announcement in the mailing list is here [http://lists.sugarlabs.org/archive/sugar-devel/2014-February/047236.html] | |||