Metacity's compositing is too slow
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
metacity (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Xenial |
Fix Released
|
Undecided
|
Unassigned | ||
Yakkety |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
[Impact]
Metacity's performance is about 2 times slower than it was in 14.04 version. It is a regression from previous LTS and impacts users with slow hardware.
[Test Case]
Run some performance checker like x11perf or glmark2, see the reporter's comments below for detailed info.
[Regression Potential]
This fix is tested by several users and seems to not have any regressions.
-------
I did the following benchmarks between `metacity --no-composite`, `metacity --composite`, and `compiz`, in Ubuntu 16.04.
First, I disabled vsync:
$ cat ~/.drirc
<device screen="0" driver="dri2">
<application name="Default">
<option name="vblank_mode" value="0"/>
</application>
</device>
Then I ran glxgears as follows:
$ metacity --no-composite --replace & sleep 5 && glxgears & sleep 20 && killall glxgears
29564 frames in 5.0 seconds = 5912.721 FPS
29729 frames in 5.0 seconds = 5945.777 FPS
$ metacity --composite --replace & sleep 5 && glxgears & sleep 20 && killall glxgears
10366 frames in 5.0 seconds = 2073.057 FPS
10194 frames in 5.0 seconds = 2038.702 FPS
$ compiz --replace & sleep 5 && glxgears & sleep 20 && killall glxgears
37633 frames in 5.0 seconds = 7522.813 FPS
37990 frames in 5.0 seconds = 7597.965 FPS
As a second set of benchmarks, I ran glxgears -fullscreen as follows:
$ metacity --no-composite --replace & sleep 5 && glxgears -fullscreen & sleep 20 && killall glxgears
1652 frames in 5.0 seconds = 330.296 FPS
1667 frames in 5.0 seconds = 333.281 FPS
$ metacity --composite --replace & sleep 5 && glxgears -fullscreen & sleep 20 && killall glxgears
886 frames in 5.0 seconds = 177.007 FPS
891 frames in 5.0 seconds = 178.099 FPS
$ compiz --replace & sleep 5 && glxgears -fullscreen & sleep 20 && killall glxgears
1830 frames in 5.0 seconds = 365.868 FPS
1847 frames in 5.0 seconds = 369.242 FPS
Normalized results (with compiz=100):
=======
Windowed:
metacity --no-composite: 78 FPS
metacity --composite: 27 FPS
compiz: 100 FPS
Full screen:
metacity --no-composite: 90 FPS
metacity --composite: 48 FPS
compiz: 100 FPS
So `metacity --composite` in this test was about 2 times slower than `metacity --no-composite` and about 3 times slower than `compiz`.
This test was done an "Intel(R) Core(TM) i5-4440 CPU @ 3.10GHz" CPU, with the following embedded graphics card:
$ lspci -nn -k | grep -A 2 VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller [8086:0412] (rev 06)
Subsystem: Gigabyte Technology Co., Ltd Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller [1458:d000]
Kernel driver in use: i915
I'll upload more tests if I find anything newsworthy.
description: | updated |
Ah, I forgot to include the results without a window manager as a comparison:
$ killall metacity & sleep 5 && glxgears -fullscreen & sleep 20 && killall glxgears
44884 frames in 5.0 seconds = 8976.656 FPS
44905 frames in 5.0 seconds = 8980.993 FPS
Normalized: 118 FPS, the fastest of all.
$ killall metacity & sleep 5 && glxgears -fullscreen & sleep 20 && killall glxgears
1743 frames in 5.0 seconds = 348.422 FPS
1713 frames in 5.0 seconds = 342.471 FPS
Normalized: 94 FPS, slower than compiz. That may be due to compiz not using the whole screen in glxgears -fullscreen; the drawing area didn't include the panels.