Faster window resize in a composite manager

Dennis Kasprzyk onestone at opencompositing.org
Sat Nov 17 19:15:35 PST 2007


Am Dienstag, 13. November 2007 22:36:13 schrieb David Reveman:
> On Tue, 2007-10-16 at 14:54 +0200, Dennis Kasprzyk wrote:
> > Hi,
> >
> > I've implemented my idea from my "Idea how to fix slow window resize in a
> > composited desktop" post. My patches add a new function
> > XCompositeSetWindowPixmapSize to Xcomposite. The compositing manager can
> > use this function to set the window pixmap to the desired size, and the
> > xserver will not change the pixmap and it's size during a resize. If
> > XCompositeSetWindowPixmapSize is called with 0/0 as size, the xserver
> > switches back to it's current pixmap handling and resizes the current
> > pixmap back to the window size.
>
> I fail to see how this would improve performance while my suggestion of
> reparenting the window we're resizing to a larger temporary top level
> window doesn't. It should end up the same thing as far as the DDX care,
> or am I missing something?
>
> -David

I've tried to implement your idea and I haven't seen any performance 
improvement, but maybe this was caused by a mistake that I've made during the 
implementation of your idea. After getting some responses for my idea on the  
mailinglist/irc, I think that it would make more sense to improve the 
composite extension and not to try to workaround our problems directly in the 
composite manager.

Currently we assume that the window pixmap matches also the window size and we 
also assume that the window pixmap changes (and call 
XCompositeNameWindowPixmap) with each window resize. Due to some hardware 
limitations it could make sense to to keep the redirected window (and pixmap) 
size, in limits that could be fully/better hardware accelerated. For example 
it could make sense for some hardware platforms to make the window pixmap 
dimensions always be an even number or divisible by 8, to achieve better 
performance. The best solution to achieve this, would be a new event, that 
informs the composite manager that the window pixmap has been changed. This 
event could also contain all information's about the window pixmap, to avoid 
the need to call XGetGeometry. An XCompositeSetWindowPixmapSize could then 
inform the xserver/ddx that the window will be resized and that it would make 
sense to resize the pixmap to the given dimensions, and the xserver/ddx could 
decide what should be done. Looking at the current resize performance in Xgl 
for example there should be no need to resize the window pixmap because 
resizing in Xgl seams to be fast enough (on my hardware). For the current 
AIGLX/Nvidia texture-from-pixmap implementations (tested with nvidia & fglrx 
aiglx) it would make more sense to resize the window pixmap to big dimesions 
if the composite manager thinks that the window size will changed multiple 
times.

Even if we could workaround the current bad resize performance directly in 
compiz, I still think that it would make more sense to provide flexible 
window pixmap system directly in the xserver.
I know that my patches may be not fully correct, but maybe someone with enough 
knowledge about the xserver will find the time to do it right.

Dennis




More information about the xorg mailing list