Dear all, Working to fix the severe performance problem I encountered running gschem on a composited desktop, I've got a series of patches which make all gschem drawing go into the backbuffer _only_.
We then (where appropriate) "invalidate" regions of the front-buffer, triggering a blit between the backingstore drawable and the GtkDrawingArea widget's drawable. This means one screen update hit for the compositing manager to update, rather than one for every single line we draw to screen. This isn't completely finished yet.. I suspect "stroke" drawing doesn't work again, but I've not got libstroke installed at the moment to test. As we'd get no speedup (perhaps a slowdown) by invalidating tiny tiny areas for each line / shape we draw, I've only added invalidates in a few places. The idea is that where we can know the bounds of a whole update operation, we'll invalidate that area all at once. (Saves computation time in merging lots of tiny regions). If there are drawing regressions with these patches, it means I need to add more invalidates somewhere (or fix the drawing code to work via one of the routines which does invalidation). I'd very much appreciate some testing and feedback at this stage.. does it work for you, does it speed up / slow down various operations, and can you spot any new drawing areas cf. without these patches). Does anyone run with a composited desktop (e.g. compiz, compiz-fusion, beryl etc..) To test, either clone my repo.or.cz repository: git clone git://repo.or.cz/geda-gaf/pcjc2.git (The useful code is in the "toplevel_overhaul2" branch.) or add it as a remote branch to an existing checkout, e.g.. git remote add -f -m toplevel_overhaul2 pcjc2 git://repo.or.cz/geda-gaf/pcjc2.git git fetch pcjc2 git checkout pcjc2/toplevel_overhaul2 will take you to the branch I've been working on. (Ok, bad branch management there... I ended up working in the stgit series for the other changes I've been working on / trying to push recently). I un-applied the rest of that series before pushing out to the repo.or.cz repository, so you'll not be cluttered with changes to remove the ATTRIB struct, cleanup rotating, mirroring APIs, refactor place buffers, allow rotating whilst placing in any way, ..... (list goes on). NB: SHA1 of these patches subject to change, as they are an stgit series, and can be edited / pushed / popped into different orders. Don't base lots of changes off these! Comments and code-review most welcome, Best wishes, -- Peter Clifton Electrical Engineering Division, Engineering Department, University of Cambridge, 9, JJ Thomson Avenue, Cambridge CB3 0FA Tel: +44 (0)7729 980173 - (No signal in the lab!) _______________________________________________ geda-dev mailing list [email protected] http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev
