Why using Tweener for animations?



I know, it may have been discussed before, but I'm still puzzled by
this. Clutter comes with a powerful and extensible animation API, yet
the Shell uses Tweener, which is pure JS.

There is a good reason for not using it: JS is slow.
First of all, no matter how efficient the interpreter is, C code is
faster than JS.
Secondly, the Shell uses Gjs, thus SpiderMonkey, which is a lot slower
than its competitors (it's the slowest modern JS engine). Not only
that, every time a GObject property is accessed, a good amount of FFI
code and gobject-introspection code is needed, introducing an other
slowdown.

Another good reason for using ClutterAnimation is that C code cannot
(or would prefer not to) call JS code, thus cannot use Tweener, which
in turn means that all animatable actors need a JS wrapper. Currently,
St.Tooltip uses ClutterAnimation, but has been declared broken.

The main advantage of using Tweener (as I see it) is that it allows
special properties, which is overcome by implementing
ClutterAnimatable in the actor involved. Other Tweener features, like
multiple properties and onComplete callbacks, are fully supported by
ClutterAnimation.
Lastly, you don't want to use Tweener on a JS property, because either
that setting that property has no effect, or that property is a
setter, which reduces performance and responsiveness further.

I hope I made myself clear, and I'm looking forward for a response
from the developers.

Giovanni

PS: not filing a bug, because I'm not sure Tweener is a bug, yet I'm
not convinced it is a feature either.
PS2: of course, if the answer is "kill Tweener", I'll be glad to help.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]