old radeon 7500 card, slow wm

Ken Moffat ken at linuxfromscratch.org
Thu Sep 23 16:33:35 PDT 2010


On Sun, Sep 12, 2010 at 06:48:46PM +0100, Ken Moffat wrote:
> On Sun, Sep 12, 2010 at 11:14:43AM -0500, DJ Lucas wrote:
> > 
> > Guys, Thomas Trepl posted a patch to BLFS-Dev on 2010-08-19.  I believe
> > this patch will fix the slow resize issue, however, there are some
> > issues.  It will not go into the book as is, but I would like to see at
> > least a mention and patch file in the wiki to cover this corner case
> > which is specific to ATI cards.  For more info, see this thread:
> > 
> > http://archive.linuxfromscratch.org/mail-archives/blfs-dev/2010-August/020578.html
> > 
> > If either of you would like to make it a server option, and set it to
> > false by default, please do so and it will get introduced to the book.
> > I looked into it for about an hour and gave up.
> > 
> > -- DJ Lucas
> > 
>  Thanks for the link.  I'd overlooked that because I thought it was
> for kde4.  For me, it's only an occasional problem - will maybe take
> a look in a week or so.
> 
 With my essentially-LFS-6.7 desktop I'm noticing that if I have
firefox open on one desktop, and something else in the same area on
another, when I go back to firefox it takes a noticeable time to
repaint itself, even if the processor was idle.  This is with
xorg-server-1.9.  Compare to the 1.7-series servers where I only
notice delays if I'm compiling something.

 So, I looked at the thread that was pointed to.  I got quite
confused by all the references to fglrx, but eventually picked the
xserver-xorg-backclear.patch from Felix Kuehling [attached].  Was
that what you were talking about ?

 I applied it by hand to 1.9 [ also attached ] but it doesn't help.
I'm not totally surprised, the main discussion in the thread pointed
to by Thomas, apart from being for fglrx, seemed to be about a
slowness in resizing windows (and from people using modern radeons).

ĸen
-- 
das eine Mal als Tragödie, das andere Mal als Farce
-------------- next part --------------
--- xorg-server-1.6.3/composite/compalloc.c	2009-07-07 13:48:57.000000000 -0400
+++ xorg-server-1.6.3-backclear/composite/compalloc.c	2009-09-09 11:55:03.000000000 -0400
@@ -483,65 +483,33 @@
     
     pPixmap->screen_x = x;
     pPixmap->screen_y = y;
-    
-    if (pParent->drawable.depth == pWin->drawable.depth)
-    {
-	GCPtr	pGC = GetScratchGC (pWin->drawable.depth, pScreen);
-	
-	/*
-	 * Copy bits from the parent into the new pixmap so that it will
-	 * have "reasonable" contents in case for background None areas.
-	 */
-	if (pGC)
-	{
-	    XID val = IncludeInferiors;
-	    
-	    ValidateGC(&pPixmap->drawable, pGC);
-	    dixChangeGC (serverClient, pGC, GCSubwindowMode, &val, NULL);
-	    (*pGC->ops->CopyArea) (&pParent->drawable,
-				   &pPixmap->drawable,
-				   pGC,
-				   x - pParent->drawable.x,
-				   y - pParent->drawable.y,
-				   w, h, 0, 0);
-	    FreeScratchGC (pGC);
-	}
-    }
-    else
+
     {
-	PictFormatPtr	pSrcFormat = compWindowFormat (pParent);
-	PictFormatPtr	pDstFormat = compWindowFormat (pWin);
+        /*
+         * Initialize new backing pixmap as fully transparent.
+         */
+        PictFormatPtr   pDstFormat = compWindowFormat (pWin);
 	XID		inferiors = IncludeInferiors;
 	int		error;
 
-	PicturePtr	pSrcPicture = CreatePicture (None,
-						     &pParent->drawable,
-						     pSrcFormat,
-						     CPSubwindowMode,
-						     &inferiors,
-						     serverClient, &error);
-						    
 	PicturePtr	pDstPicture = CreatePicture (None,
 						     &pPixmap->drawable,
 						     pDstFormat,
 						     0, 0,
 						     serverClient, &error);
 
-	if (pSrcPicture && pDstPicture)
+	if (pDstPicture)
 	{
-	    CompositePicture (PictOpSrc,
-			      pSrcPicture,
+	    CompositePicture (PictOpClear,
+			      pDstPicture,
 			      NULL,
 			      pDstPicture,
-			      x - pParent->drawable.x,
-			      y - pParent->drawable.y,
-			      0, 0, 0, 0, w, h);
+			      0, 0, 0, 0, 0, 0, w, h);
 	}
-	if (pSrcPicture)
-	    FreePicture (pSrcPicture, 0);
 	if (pDstPicture)
 	    FreePicture (pDstPicture, 0);
     }
+
     return pPixmap;
 }
 
-------------- next part --------------
diff -Naur xorg-server-1.9.0/composite/compalloc.c xorg-server-1.9.0.patched//composite/compalloc.c
--- xorg-server-1.9.0/composite/compalloc.c	2010-06-06 18:53:51.000000000 +0100
+++ xorg-server-1.9.0.patched//composite/compalloc.c	2010-09-23 23:39:45.992486579 +0100
@@ -488,62 +488,25 @@
     pPixmap->screen_x = x;
     pPixmap->screen_y = y;
     
-    if (pParent->drawable.depth == pWin->drawable.depth)
     {
-	GCPtr	pGC = GetScratchGC (pWin->drawable.depth, pScreen);
-	
-	/*
-	 * Copy bits from the parent into the new pixmap so that it will
-	 * have "reasonable" contents in case for background None areas.
-	 */
-	if (pGC)
-	{
-	    ChangeGCVal val;
-	    val.val = IncludeInferiors;
-	    
-	    ValidateGC(&pPixmap->drawable, pGC);
-	    ChangeGC (serverClient, pGC, GCSubwindowMode, &val);
-	    (*pGC->ops->CopyArea) (&pParent->drawable,
-				   &pPixmap->drawable,
-				   pGC,
-				   x - pParent->drawable.x,
-				   y - pParent->drawable.y,
-				   w, h, 0, 0);
-	    FreeScratchGC (pGC);
-	}
-    }
-    else
-    {
-	PictFormatPtr	pSrcFormat = compWindowFormat (pParent);
-	PictFormatPtr	pDstFormat = compWindowFormat (pWin);
+	PictFormatPtr   pDstFormat = compWindowFormat (pWin);
 	XID		inferiors = IncludeInferiors;
 	int		error;
-
-	PicturePtr	pSrcPicture = CreatePicture (None,
-						     &pParent->drawable,
-						     pSrcFormat,
-						     CPSubwindowMode,
-						     &inferiors,
-						     serverClient, &error);
-						    
+ 
 	PicturePtr	pDstPicture = CreatePicture (None,
 						     &pPixmap->drawable,
 						     pDstFormat,
 						     0, 0,
 						     serverClient, &error);
 
-	if (pSrcPicture && pDstPicture)
+	if (pDstPicture)
 	{
-	    CompositePicture (PictOpSrc,
-			      pSrcPicture,
+	    CompositePicture (PictOpClear,
+			      pDstPicture,
 			      NULL,
 			      pDstPicture,
-			      x - pParent->drawable.x,
-			      y - pParent->drawable.y,
-			      0, 0, 0, 0, w, h);
+			      0, 0, 0, 0, 0, 0, w, h);
 	}
-	if (pSrcPicture)
-	    FreePicture (pSrcPicture, 0);
 	if (pDstPicture)
 	    FreePicture (pDstPicture, 0);
     }


More information about the blfs-support mailing list