"That is not really helpfull. Anything that uses cairo? I would like to make some comparisons and it would help if I can recreate the same animations.
(I did some work with cairo and python, but no animation. I used cairo for animations together with GTK, sure this was faster but these applications
are only made for the animation, just a simple drawing loop. Pharo of course has much more that happens in between)."

No I was not talking as a developer but rather as a user, so by "everything" I mean literally everything I use, cairo based or not. I am no cairo developer , I only took a look at the pycairo docs once. I have picked the habit of taking a look at how much cpu each application consumes by using Blender. As you can imagine blender can eat cpu cycles like peanuts, so I have an overall idea under which circumstances the cpu can max out so I have learned to avoid it by utlising several techniques. I am also a blender python developer.

But then its not hard to imagine that when you see a simple animation of a small logo slide in a very small area cosuming 30-50% of CPU and flicker, that 2d game running in full screen or even half screen would be a no go.��

On Sat, Mar 7, 2015 at 4:38 AM, Esteban Lorenzano <estebanlm@gmail.com> wrote:

On 07 Mar 2015, at 00:02, Nicolai Hess <nicolaihess@web.de> wrote:

2015-03-06 20:18 GMT+01:00 Esteban Lorenzano <estebanlm@gmail.com>:

On 06 Mar 2015, at 18:40, kilon alios <kilon.alios@gmail.com> wrote:

very good example and very informative thank you.

Sadly it also shows that even with Athens Pharo is incredible slow. Simple animation spiking a single 3.2 Ghz core to 50% does not look very promising for heavy big size graphic based animations. Which is not a surprise since this was also evident the first time I tried the VGTiger demo. But still , its better than no Athens ;)

That���s because we are converting the rendering into a bitmap that is after drawn for the vm��� a complete inefficient mechanism.��

I heard this multiple times, but I still don't get it. The (cairo) rendering happens on a (in memory) imagesurface. There is no extra allocation
of a bitmap for every drawing on the screen. Drawing the rendering on the screen is a bitblt (copybits) operation, like it is done for every other Form.

I will try to explain��� is a problem in several ways:��
1) what is not efficient at all is BitBlt plugin, our current way to display things. Want an example? just open a new image, open a browser (or a playground, or any window) and start moving it���. then watch how your cpu starts heating (in my machine, is around 35%, some times��� just one browser).��
2) Now��� what we do with Athens is:��
a) create an in-memory surface and draw things there.��
b) convert that surface into a bitblt compatible format (this is actually just a copy, not much actually)��
c) display the result into the current world window (another copy)
3) Now imagine all that cycling (stepping)�����

With OSWindow (SDL2) what we do is:��
1) create a SDL2 surface
2) draw on it
3) cycle on (2)

��
I have a running experiment for drawing directly in the canvas (using SDL2 library) and the tiger demo drops from eating 70% of cpu to 9% in my machine.��

We can do this without SDL, but of course less platform independent, with cairos win32 , quartz, or xrender (os dependent) surfaces. This is really fast, no need
for an (in memory) image surface. But one problem with this approach is, some morphs need to access the current displays Form data (HandMorph for example).
And this does not work (or not easily) with the OS device surface.
Does this work with cairo and SDL?

yes, why not?
and yes��� we can have several backends. The advantage on using SDL2 is that you do not need to maintain one different backend for each platform. Of course, it has also drawbacks, as always��� but our manpower is determinant here and we decided to take the ���common approach������ we will have time to improve later, if we find is necessary (but frankly, I do not think so for the moment)


One thing that is really slow is painting an image with Athens, because the cairo backend creates a new surface for this image and uses this
image as a pattern paint. The slow part is copying and converting the image data into the surface.
I already proposed an alternative, (it's a bit like cheating), we can use the bitblt to copy and convert the image data into the surface, this again
is much faster.

this is something inherent to cairo (and athens as a result)��� I suppose game programmers already dealt with this problem. I suggest look there for answers (I didn���t look there, nor seen your proposed solution yet��� sorry I will as soon as I find some time).��

cheers,��
Esteban


��
Our idea is to move pharo in that direction for Pharo5 so next year we will be a lot better :)

Esteban


On Fri, Mar 6, 2015 at 6:28 PM, Alexandre Bergel <alexandre.bergel@me.com> wrote:
This is really good that you are diving into Athens. It deserves it!

Alexandre


> On Mar 6, 2015, at 10:20 AM, Nicolai Hess <nicolaihess@web.de> wrote:
>
> There is a "play" button in the SketchBrowser.
> And if you open just the simple sketch view:
> ASketchExampleColors openView
> you'll have to start the drawing from the morph menu.
>
> In a prior version I had some "autoplay" option, but sometimes this throws
> a NativeBoost error, if it is the first time it loads the cairo library.
>
> Maybe I should add the autoplay again.
>
>
>
>
> 2015-03-06 16:03 GMT+01:00 Torsten Bergmann <astares@gmx.de>:
> For me all the samples stay black. But the Athens tiger demo works...
>
> Is this a driver problem?
>
> Bye
> T.
>
> Gesendet: Freitag, 06. M��rz 2015 um 10:14 Uhr
> Von: "Nicolai Hess" <nicolaihess@web.de>
> An: "Pharo Development List" <pharo-dev@lists.pharo.org>, "Any question about pharo is welcome" <pharo-users@lists.pharo.org>
> Betreff: [Pharo-dev] [ANN AthensSketch] A playground for drawings with Athens.
>
> The main purpose of this packages is to ease the creation of simple drawings and provide a rich set of examples for Athens drawing API.
> --------------
> Gofer new
>�� ��smalltalkhubUser: 'NicolaiHess' project: 'AthensSketch';
>�� ��configuration;
>�� ��load.
> ConfigurationOfAthensSketch loadDevelopment.
>
> AthensSketchBrowser open.
>
> -----------------
>
>
> This is a simple playground for Athens drawings. Just subclass AthensSketch and define your own sketch drawing in the #drawStepOn: method. It provides basic frame based animation (play/pause/stop).
>
> Open a player with
> ASketchExampleColors openPlayer',
> or a simple viewer morph with
> ASketchExampleColors openView (start and stop rendering from the morph menu)
>
> The AthensSketchBrowser lists all defined AthensSketch subclasses. (Basic examples
> from package AthensSketch and some more examples from package ASketchExamples).
> You can step through the list of examples, start and stop the drawing, or view and edit the drawing code.
>
> It is great that we have now a vector based drawing API. The (old) Canvas API is
> already great for pixel based drawings. A rich API and many good things if
> you discover it. And Athens is a�� addition that can increase our possibilities.
> There were some questions about Athens, what it is and what it is used for, maybe this
> helps.
>
>
> nicolai
>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel�� http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.