[cairo] How to test the gl backend?

Bill Spitzak spitzak at gmail.com
Fri Jun 4 11:13:37 PDT 2010



Russell Shaw wrote:
> Bill Spitzak wrote:
>> On 06/04/2010 05:53 AM, Russell Shaw wrote:
>>
>>> If gtk only uses top-level X windows, that means gtk has to register
>>> for always-on mouse-motion events. Urgh...
>>
>> I think you are seriously in error about guessing what is inefficient!
>>
>> Believe me, creating and managing a hundred X windows requires ORDERS 
>> OF MAGNITUDE more communication to the server than an event every time 
>> the mouse moves 1 pixel. Besides it probably turned on mouse tracking 
>> for those individual windows anyway!
> 
> In a properly done widget tool kit, no events are emitted from the X server
> unless the mouse or keyboard button is pressed, or if the mouse crosses the
> border of a window (only if the widget registered for those events).
> Continuous mouse-motion events are usually only used in drag operations
> when a mouse button is held down.
> 
> Continuous mouse-motion emission of events from the X server will make
> networked applications utterly unuseable on all but the fastest (ie local)
> networks.

That communication is trivial compared to other data. It is one event 
per pixel LINEAR, while many api's require drawing images, glyphs, or 
other very fine graphics that scale approximately by the AREA of the 
widgets.

Overlapping widgets can in effect double the time taken to draw the 
overlapped area, especially in the worst case where an image must be 
sent for both. Probably more important is that expose event 
asynchronicity can cause many many more updates than should be 
necessary. There is also an ENORMOUS amount of data that must be sent to 
set up and take down an X window and to keep communicating with it, and 
to update it's position, etc. And there is a nasty amount of overhead in 
the X server itself to manage them.

Also everybody should be familiar with the horrible artifacts and slow 
update and flashing that this approach makes.

You also seem to be ignoring the fact that all toolkits I am familiar 
with turn on mouse tracking all the time, thus completely negating your 
entire argument, plus adding enter+exit events to the communication 
overhead.

The fact is that communicating the widget areas to the server is a 
losing propostion all around. It is losing on Windows too, even though 
they force synchronous update. That is why Qt and GTK and FLTK have all 
abandoned child windows, and why Microsoft is trying to force people off 
of MFC.


More information about the cairo mailing list