[PD] pd-extended 0.40.3 ui performance
Damian Stewart
damian at frey.co.nz
Sun Jun 29 11:56:11 CEST 2008
Hans-Christoph Steiner wrote:
>
> Other people have reported this, but I haven't been able to reproduce
> it. Please create a bug report in the tracker and submit an example
> patch. (For whatever reason, no one has done that yet, despite my
> requests). Then I'll take a look at it.
are you on Linux? the problem probably won't show up on Linux, because of
the relationship between Tk and Xlib:
(from the website of the TkGS project
http://membres.lycos.fr/fbonnet/Tcl/TkGS/introduction.htm , sadly stalled
since 2000)
"So what is the problem with the XLEL? Porting part of the Xlib to new
platforms was a good idea in the beginning because it allowed for easier
porting of the many existent Tk applications. The counterpart is that one
had to use the Xlib graphics model on all platforms to remain portable, and
that is the main cause of the XLEL inadequacy: bad performances. Tk is
notably slower on platforms other than native X-Window systems. But this
lack of performance is not due to the XLEL itself, but to the way it uses
the native graphics system. The Xlib uses a fundamentally stateless model,
whereas Windows and MacOS use state-based models.
"For example, to draw a shape, a Xlib application calls a drawing primitive
such as XDrawRectangle() and passes the drawing parameters as arguments in
the form of a Graphics Context (GC), a structure that contains all the
drawing parameters such as foreground color or font. On Windows, one has
first to create objects such as brushes, pens, fonts, then select these
objets that will be used by all the subsequent primitives such as
Rectangle(). These objects are selected into a Device Context (DC) that has
to be created before any drawing and released after, holding the state in
the meantime. These operations are costy and thus should be done once for
all before any primitive is called. Besides, since they are available in
rather limited resources, one has to be careful to free them all once the
drawing operation is complete.
"Since The Xlib uses a stateless model, the XLEL has no choice but to
re-create a valid drawing context (eg. a DC on Windows) from its GC values
at every drawing operation. That way, costy operations that were intended
to be called once before any number of drawing primitives (ie in O(1)
time), are called for every primitive (ie in O(n) time), even if the
drawing parameters are the same. Thus the relatively bad performances of
Windows and MacOS Tk (even on the same hardware). A solution would be to
use caching schemes to avoid useless re-creation of drawing structures. Leo
Schubert's speedpatch for Tk 8.0 uses this kind of technique (it stores the
internal GDI objects into the GC structure). Although the results are
impressive in term of performances, these techniques have several
drawbacks: ..."
--
damian stewart | +31 6 5902 5782 | damian at frey.co.nz
frey | live art with machines | http://www.frey.co.nz
More information about the Pd-list
mailing list