vcl mainloop bits ...
michael.meeks at suse.com
Tue Jul 9 09:29:09 PDT 2013
Am struggling to unwind the intent of the appended ;-) a little healthy
paranoia with the glib mainloop integration is sensible since small
changes there affect a ton of unexpected orderings in the code and ... -
Author: Pierre-Eric Pelloux-Prayer <pierre-eric at lanedo.com>
Date: Fri Jul 5 14:17:46 2013 +0200
The description seems to suggest that:
gtk/unx: remove successive calls to g_main_context_iteration
Replace the sequence:
blocking call to g_main_context_iteration until first evt reveived.
This allows more longer sleep period, when nothing is going on (verified
diff --git a/vcl/unx/gtk/app/gtkdata.cxx b/vcl/unx/gtk/app/gtkdata.cxx
index 6abb06b..5ff5a80 100644
@@ -571,12 +571,10 @@ void GtkData::Yield( bool bWait, bool bHandleAllCurrentEvents )
gboolean wasOneEvent = TRUE;
while( nMaxEvents-- && wasOneEvent )
- wasOneEvent = g_main_context_iteration( NULL, FALSE );
+ wasOneEvent = g_main_context_iteration( NULL, bWait & !bWasEvent );
if( wasOneEvent )
bWasEvent = true;
- if( bWait && ! bWasEvent )
- bWasEvent = g_main_context_iteration( NULL, TRUE ) != 0;
Of course - the old code was pretty odd and ugly - but I read the above
for the bWait == TRUE case - which I assume you're optimising as:
while ( 1-- && TRUE )
wasOneEvent = g_main_context_iteration (NULL, bWait && FALSE );
The first time around - right ? seems like that does a non-waiting run
through the main-loop as before.
what somewhat concerns me is that in the case ofbHandleAllCurrentEvents
== FALSE and bWait == TRUE - we have a different behaviour - we don't
wait nMaxEvents == 0 now - and we bail out.
Couldn't that create a busy loop ?
Anyhow - thanks for being brave enough to touch this :-) the main-loop
logic clearly needs some love - and we -very- badly need some sensible
idle priorities system adding to VCL to get better quality rendering and
better work scheduling :-)
michael.meeks at suse.com <><, Pseudo Engineer, itinerant idiot
More information about the LibreOffice