Windows platform: simultaneous opening 4-10 difffs leads to infinite spinning with meld checkout and pygobjectwin32 3.18.2 (with workaround)



Hello. I found and issue with running meld checkout on windows (both master and meld-3-16) with some 
pygobjectwin32 3.18.2 build.

Using integration with a TortoiseSvn a meld can be called to show differences for several files - the several 
meld processes are started simultaneously.
This works fine for 1-3 files, but leads to infinite spinning without file loading completion for more files.
With 6 files on my environment the infinite spinning always beginning.

Unlike problem about resizing events looping (https://bugzilla.gnome.org/show_bug.cgi?id=779883 ),
this case doesn't depend on word wrap.

For me it is 100% reproducible with a command in a cmd session from a clean meld checkout.
for %f in (1 2 3 4 5 6) do start "" py bin\meld bin\meld

This opens 6 windows, the GtkSourceView doesn't make progress in source loading and the spinner is rotating 
in all those windows.
The only one python.exe is running, with it's main thread being running ~70% of wall clock time.
According to a profiler most of the time is spent in BitBlt (WINAPI rendering) function inside some cairo 
calls
(don't know exact because my dll is without debug info).

So, it looks like 6 windows consumes lot of cpu time on rendering spinner (on a only-5-years-old hardware), 
so no idle-events are raised by gtk.

And indeed - it's spinner rendering: workaround by commenting out self.spinner.start() in meldwindow.py 
resolves the issue - the diffs are loaded very fast!
Note that other aspects of meld gui including smooth scrolling and other animations looks pretty good, so gtk 
on windows is usable.

I failed to reproduce the problem with meld.exe from meld 3.16.2 release, so it looks like pygobjectwin32 
version does matter.

By now, I didn't report any bugs to bugzilla since I haven't tested other gtk builds yet; posting this here 
mainly for making workaround known.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]