[Pixman] Slow scrolling with Firefox (Xvnc)

Peter Åstrand astrand at cendio.se
Thu Feb 17 07:20:24 PST 2011

I've noticed that vertical scrolling with Firefox and many other 
applications are quite slow, especially when you have a limited bandwidth. 
The reason for this is that Xvnc fails to detect the framebuffer update as 
a copy, which can be sent as a CopyRect RFB operation. Instead, the entire 
screen is resent.

The code in question is here (function vncHooksCopyArea):

We have:

REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList);

However, when scrolling in Firefox, the clipList region have x1 == x2 and 
y1 == y2. (We have a data pointer, but size and numRects are zero.) The 
intersection result is empty, and no CopyRects are sent. The problem can 
be solved with this patch:

-    REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList);
+    if (REGION_NOTEMPTY(pScreen, &((WindowPtr)pSrc)->clipList)) {
+	REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList);
+    }

But why is clipList so strange? I've tracked it down to 

     if (!region->data)

     if (!region->data->size)
         region->extents.x2 = region->extents.x1;
         region->extents.y2 = region->extents.y1;

This code is called every now and then. (In our case, it seems to be an 
INTERSECT call which calls pixman_set_extents.) Apparently, the idea seems 
to be that if the region has a data pointer, then it must have a size as 
well, or it should be considered empty/NIL. Then, the question is, what on 
earth is setting clipList to such a broken region? It cannot be 
miRegionEmpty/REGION_EMPTY because those are directly setting x1 == x2 and 
y1 == y2.

Using pixman 0.20.0 and xorg-server 1.5.3. However, the problem seems to 
be present even with the Fedora 14 version of Xvnc, which uses more modern 
versions. Comments appreciated...

Peter Åstrand		ThinLinc Chief Developer
Cendio AB		http://www.cendio.com
Wallenbergs gata 4
583 30 Linköping	Phone: +46-13-21 46 00

More information about the Pixman mailing list