Hi, RaphaXl Quinet <quinet@xxxxxxxxxx> writes: > This is something that has been bothering me for a while, and maybe I am > not the only one who has noticed this. I have compiled the CVS HEAD > version and the 1.2.3 version on the same old machine (a Pentium 200) > and the CVS version is significantly slower than the 1.2.x version. Of > course, there is a lot of debugging code in 1.3.x, but I am surprised > that the differences are so significant on that machine. > > Some simple operations such as accessing the menus (both the pop-up menus > and the menus from the toolbox), refreshing the toolbox or refreshing the > contents of the docks take approximatively 5 to 6 times longer than with > the old 1.2.3 version. The delays are significant enough to disturb the > normal flow of operations (at least for me). > > Does anybody know what could be the source of these delays? Is this due > to the GIMP itself (debugging code, new user interface) or is this due to > the fact that the CVS version uses GTK+ 2.0 instead of GTK+ 1.2.x? Hard to say. It's been said that GTK+-2.0 is substantially slower than 1.2. I don't notice much difference here but then my machine is probably fast enough. Have you played with testgtk; do you notice the same problems there? Of course GIMP-1.3 has lots of room for improvement. One thing that is on our TODO is to change GimpPreview so it can use GdkPixbuf directly. We'd avoid the conversion to TempBuf and could use the (optionally hardware accelerated) pixbuf render routines. Since we use a model-view concept in GIMP-1.3, we use a lot of signal emissions to synchronize the UI with the core data structs. You could get a noticeable speedup by compiling glib without debugging (default since 2.0) and make sure that app/core/gimpmarshal.[ch] is generated using a recent version of glib-genmarshal. Newer versions access the GValues used in signal emissions directly instead of going thru extensive type checks. Basically you should have some code like this in app/core/gimpmarshal.c: #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #else #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #endif For further optimizations we should do some profiling first since it doesn't make sense to remove useful debugging code unless it shows up significantly in the profile. Salut, Sven