Skip to content

Artifacts after startup when compositor Enabled

There is a history of artifacts after startup. And recently commit 554e5c7a was applied to clear the frame buffer so that "undefined" data would not be used. That "undefined" data often was latest rendered image, and this actually masked the underlying problem.

On startup, a full paint of the screen is never scheduled for the frame buffer. This causes parts of the render buffer to remain untouched (now black). And when executing a flip, those areas are now black instead of undefined. The problem is clearly visible, when you have background set, and you execute xfwm4 --replace from a terminal (on system without other screens). Most of the background will be black instead of the background image. When moving the terminal around it will "fix" the areas covered.

The proper fix seems to schedule a full draw when compositor is enabled.

E.g. something like:

diff --git a/src/compositor.c b/src/compositor.c
index 31f6864ce..8b1140c83 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -4975,6 +4975,8 @@ compositorManageScreen (ScreenInfo *screen_info)
                              screen_info->xroot,
                              XFixesDisplayCursorNotifyMask);
 
+    damage_screen (screen_info);
+
     return TRUE;
 #else
     return FALSE;

Seems to already make the situation noticeable better. However, some areas like the xfce4-panel area still flickers. Not sure why.

Edited by Timo Teräs