[cairo-bugs] [Bug 32014] GTK programs in cairo 1.10 are sluggish over NX

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sat Jun 18 12:39:47 PDT 2011


https://bugs.freedesktop.org/show_bug.cgi?id=32014

--- Comment #3 from Steven Robertson <steven at strobe.cc> 2011-06-18 12:39:42 PDT ---
This appears to be due to having 'display->buggy_repeat' set in
_cario_xlib_device_create(). NX (3.5, at least) presents itself as an X.Org
server with version 60900000, which trips the 'buggy_repeat' flag. 

'buggy_repeat' is set on X.Org 6.9 to avoid a bug which will crash the X
server. On NX 3.5, running the 'extend-reflect' test case after forcing the
buggy_repeat flag to FALSE on git rev ced061124d0b402c did not crash the X
server, so it is possible this bug does not need to be worked around on NX
servers. (The test application crashes on svg11 and svg12 test modes, and fails
on others, but it doesn't crash the X server itself. Plus, NX fails many other
tests, and other tests *will* crash the server; not exactly a bastion of
correctness.)

Cairo will use software compositing for some operations, preventing NX from
doing its X11 protocol compression magic to send text in an efficient manner.
The commit indicated by Ryan Prichard causes more operations than before to use
software compositing. I'm not sure if this was intentional or not.

I see three reasonable solutions:

* Get NoMachine to update NX's reported version number. My current employer
makes extensive use of NX; I'll try to have someone talk to them about this.

* Detect and whitelist NX for buggy_repeat using an out-of-band mechanism.

* Revert to the (possibly incorrect?) stricter test for falling back to
software rendering.

In the mean-time, users can apply this patch to Cairo to work around the
workaround. I'm not recommending that this patch be applied to Cairo itself,
it's just for NX users who can't stand the slowness. Applies to current git
HEAD, but probably works fine with 1.10 too.

diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c
index f8caf83..ffaa344 100644
--- a/src/cairo-xlib-surface.c
+++ b/src/cairo-xlib-surface.c
@@ -1994,8 +1994,8 @@ _recategorize_composite_operation (cairo_xlib_surface_t  
      *dst,
            return DO_XTILE;
     }

-    if (dst->buggy_repeat && src_attr->extend == CAIRO_EXTEND_REPEAT)
-       return DO_UNSUPPORTED;
+    //if (dst->buggy_repeat && src_attr->extend == CAIRO_EXTEND_REPEAT)
+       //return DO_UNSUPPORTED;

     if (! CAIRO_SURFACE_RENDER_HAS_COMPOSITE (src))
        return DO_UNSUPPORTED;

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the cairo-bugs mailing list