[Sugar-devel] [Dextrose] [PATCH v5 sugar] Pulsing icon delayed by 5 seconds or so SL#2080

Gary Martin garycmartin at googlemail.com
Fri Oct 29 12:18:05 EDT 2010

On 29 Oct 2010, at 09:12, Martin Dengler <martin at martindengler.com> wrote:

> On Thu, Oct 28, 2010 at 03:44:37PM -0300, Gonzalo Odiard wrote:
>> I think the problem is the code is rendering the svg icon every time
>> the color is changed.
> Indeed.  As James Cameron pointed out, we're setting the stroke and
> fill in rapid succession, resulting in two calls to render().
>> There are not cache or cairo operation used to avoid this.
> Perhaps CanvasIcon's _emit_paint_needed_icon_area can check some
> dirty flag that gets reset upon paint()?  I'm not an expert, and it
> sounds like there might be lots of races to worry about.
> However it's easier just to replace the calls to set_stroke_color() and
> set_fill_color() with set_xo_color(), which does both and then calls
> _emit_paint_needed_icon_area().
> So I did that[1], and using a small script[2] to just launch the
> pulsing icon window using the sugar emulator, we can compare before[3]
> and after[4]: The code change halves the number of times we call
> _emit_paint_needed_icon_area, and that is borne out by the experiment:
> _emit_paint_needed_icon_area is called 196 times in 10 seconds before
> the patch, and 99 times afterwards.  Correspondingly, render_cairo()
> is called half as much.
> I'd love any feedback.

I've been testing this patch on an XO-1 F14 0.90 build today and can confirm the svg icon appears in the launcher about one second after starting/resuming an activity from the home view. Fab! :)

It's worth a note that the zoom in effect is still lost for most svg icons, only for the very simple icons is the effect visible (Log icon is simple enough to show it, Distance icon is not quick enough). The zoom animation is defaulting to 20 fps which can't be helping, but lowering it to 10fps doesn't seem to help enough to make much of a visible improvement. I only reliably started to see the zoom when I also increased the length of the zoom effect from 1sec to 2sec by modifying launcher.py #116:

        self._animator = animator.Animator(2.0, fps=10)

...so I guess that first second of launching is still rather swamped so the first second of zoom is usually skipped. Hmmm, maybe the zoom start should be triggered only once the first update has hit.


>> Gonzalo
> Martin
> 1. http://www.martindengler.com/tmp/sl.o-2080/pulsingicon.py-set-new-colors-in-one-go-to-avoid-multiple-calls-to-SVG-rendering.patch
> 2. http://www.martindengler.com/tmp/sl.o-2080/profile-pulsingicon.py
> 3. http://www.martindengler.com/tmp/sl.o-2080/pulsingicon.py-stats-graph-before.png
> 4. http://www.martindengler.com/tmp/sl.o-2080/pulsingicon.py-stats-graph-after.png

More information about the Sugar-devel mailing list