Skip to content

tycho-kirchner/fastcompmgr

Repository files navigation

fastcompmgr

fastcompmgr is a fast compositor for X, a fork of an early version of Compton which is a fork of xcompmgr-dana which is a fork of xcompmgr.

I used to use good old xcompmgr for long, because compton always felt a bit laggy when moving/resizing windows or kinetic-scrolling a webpage. Having tested the latest picom-10.2, it seems, things got even worse (see benchmark below). However, xcompmgr does not draw shadows on argb windows (e.g. some terminals) and has several other glitches. That's why I traveled back into 2011, where this feature was just added, cherry picked some later compton commits to get rid of spurious segfaults and memleaks and made that version even faster, based on profiling. For example, window move- and resize events are limited in their event-count and rendered at a somewhat fixed framerate, while scrolling is still done as fast as possible. Occluded windows are not painted and memory allocations/deallocations are largely avoided, allowing for faster repaints of the screen. On the downside, fading is currently broken (I don't use it). Sorry for that (;

Benchmark

While on my Dell Latitude E5570 window moving, resizing and scrolling feels clearly faster, there are also some numbers to support this observation. Given a number of stacked chromium-windows, where no window is fully occluded, I performed the respective operations by hand, so please beware that the benchmark is not very sophisticated. The touchpad driver xserver-xorg-input-synaptics was used which enables for kinetic scrolling (Wayland anyone?). The following CPU usages were measured:

Compositor move resize scroll
fastcompmgr 6.7% 4.4% 1.5%
xcompmgr 7.8% 4.9% 1.6%
compton 26.4% 6.8% 17.1%
picom 29.3% 8.1% 23.1%

Tools were used with the following flags:

(v0.1) fastcompmgr -o 0.4 -r 12 -c -C
(v1.1.8 from Debian 11) xcompmgr -o 0.4 -r 12 -c -C
(v1 from Debian 11) compton --config /dev/null --backend xrender -o 0.4 -r 12 -c -C
(v10.2) picom --config /dev/null --backend xrender -o 0.4 -r 12 -c

# Calc average using
$ fastcompmgr -o 0.4 -r 12 -c -C &  pid=$!; sleep 4; \
    top -b -n 20 -d 0.5 -p $pid | LC_ALL=C awk -v pid=$pid \
    '$1==PID {++PIDCOUNT} $1==pid && PIDCOUNT>1 {print $9}' |  \
    datamash mean 1; kill $pid

Installation

If you're lazy, just grab the binary from the release page.

Otherwise, build dependencies are the same as for xcompmgr:

Dependencies:

  • libx11
  • libxcomposite
  • libxdamage
  • libxfixes
  • libxrender
  • pkg-config
  • make

To build:

$ make
$ make install

Usage

$ fastcompmgr -o 0.4 -r 12 -c -C

License

xcompmgr has gotten around. As far as I can tell, the lineage for this particular tree is something like:

  • Keith Packard (original author)
  • Matthew Hawn
  • ...
  • Dana Jansens
  • Christopher Jeffrey
  • Tycho Kirchner

Not counting the tens of people who forked it in between.

See LICENSE for more info.