Picom + All Chromium = slowdown

Hello! With my current setup, anything chromium based experienced a rather dramatic slowdown when using Picom. This behavior is most notably in Chromium browsers (Brave, Vivaldi, and Ungoogled Chromium). But I’m also seeing a slight lag in Electron based apps like Discord and VS Code.

In browsers, everything renders SLOWLY. Videos are lagging, extensions slowly open, etc.

When I kill Picom, the problem goes away.

I found this forum post

that offered a few clues.

So, turning off hardware accelerate in Brave WORKS. No video playback issues, extensions are snappy.

In picom.conf, I set fading, blur, etc., to false prior to trying hardware acceleration. These had no effect. Doesn’t seem to have an effect with hardware acceleration off.

Inxi -FAZ output on my system:

System:
  Kernel: 6.0.8-arch1-1 arch: x86_64 bits: 64 Desktop: i3 v: 4.21.1
    Distro: EndeavourOS
Machine:
  Type: Desktop System: Dell product: OptiPlex 5050 v: N/A
    serial: <superuser required>
  Mobo: Dell model: N/A serial: <superuser required> UEFI: Dell v: 1.12.1
    date: 05/09/2019
CPU:
  Info: quad core model: Intel Core i7-6700 bits: 64 type: MT MCP cache:
    L2: 1024 KiB
  Speed (MHz): avg: 1067 min/max: 800/4000 cores: 1: 1000 2: 1522 3: 1001
    4: 1000 5: 1000 6: 1015 7: 1000 8: 1000
Graphics:
  Device-1: Intel HD Graphics 530 driver: i915 v: kernel
  Device-2: AMD Oland [Radeon HD 8570 / R5 430 OEM R7 240/340 Radeon 520
    OEM] driver: radeon v: kernel
  Display: x11 server: X.Org v: 21.1.4 driver: X: loaded: intel,radeon
    unloaded: modesetting dri: radeonsi,i965 gpu: i915,radeon resolution:
    1: 2560x1440~60Hz 2: 2560x1440~60Hz
  API: OpenGL v: 4.5 Mesa 22.2.3 renderer: OLAND ( LLVM 14.0.6 DRM 2.50
    6.0.8-arch1-1)
Audio:
  Device-1: Intel 200 Series PCH HD Audio driver: snd_hda_intel
  Device-2: AMD Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000
    Series] driver: snd_hda_intel
  Sound API: ALSA v: k6.0.8-arch1-1 running: yes
  Sound Server-1: PipeWire v: 0.3.59 running: yes
Network:
  Device-1: Intel Ethernet I219-V driver: e1000e
  IF: enp0s31f6 state: up speed: 1000 Mbps duplex: full
    mac: 50:9a:4c:4c:01:2a
  IF-ID-1: virbr0 state: down mac: 52:54:00:6c:df:7b
  IF-ID-2: virbr1 state: down mac: 52:54:00:d5:bd:cb
  IF-ID-3: virbr2 state: down mac: 52:54:00:5e:4b:12
Drives:
  Local Storage: total: 1.6 TiB used: 522.24 GiB (31.9%)
  ID-1: /dev/nvme0n1 vendor: Western Digital model: WDBRPG5000ANC-WRSN
    size: 465.76 GiB
  ID-2: /dev/sda vendor: SK Hynix model: SC308 SATA 256GB size: 238.47 GiB
  ID-3: /dev/sdb vendor: Western Digital model: WD10JPVX-22JC3T0
    size: 931.51 GiB
Partition:
  ID-1: / size: 287.81 GiB used: 166.99 GiB (58.0%) fs: ext4 dev: /dev/dm-0
  ID-2: /boot/efi size: 499 MiB used: 680 KiB (0.1%) fs: vfat
    dev: /dev/nvme0n1p1
Swap:
  ID-1: swap-1 type: file size: 15.62 GiB used: 135 MiB (0.8%)
    file: /swapfile0
Sensors:
  System Temperatures: cpu: 37.0 C mobo: N/A gpu: radeon temp: 54.0 C
  Fan Speeds (RPM): N/A
Info:
  Processes: 366 Uptime: 2d 23h 9m Memory: 23.36 GiB used: 9.18 GiB (39.3%)
  Shell: fish inxi: 3.3.23

Any ideas or suggestions for tweaks I could make to improve the response in Chromium based apps? Thanks!

You could try setting chromium and electron flags in config files.
~/.config/electron-flags.conf
~/.config/chromium-flags.conf
Sometimes you need to use a specific version for the electron config file like this
~/.config/electron19-flags.conf

Here’s a list of flags (electron uses same flags):
https://peter.sh/experiments/chromium-command-line-switches/

And an Arch Wiki page on chromium flags
https://wiki.archlinux.org/title/chromium#Making_flags_persistent

I currently use --enable-gpu-rasterization in electron-flags.conf and it seems to smooth out my Discord scrolling.

SUPER HELPFUL!!

I wasn’t having any issues a few months ago. And then an update occurred and BAM!

I will check these out. Much thanks!!

Another thing to check would of course be your picom. I know there are several different forks that people use and everyone just says picom for all of them. One such popular for instance is Jonaburg’s fork. I started having issues with picom (I was using a fork for animations) so I tried a couple different forks but had one issue or another with pretty much all of them. I’ve noticed nearly all the forks haven’t had any commits in years. I moved back to the main branch (which is still being actively maintained) I deleted my config, started with a brand new template from the most recent main picom branch, and checked that the options are still supported via picom --help. One major difference to make note of is that the experimental backend is now enabled by default for the main branch and you don’t need that flag any more as an example. Each fork can support different flags and if you’ve used any internet configs they don’t really say or they’re just copy/paste from someone else’s.

Hello,
You can try to set the NET_WM_BYPASS_COMPOSITOR variable to 1 before launching Chromium.

or try to exclude Chromium window from opacity, blur or shadow.

From my experience with Picom (official or animation fork), the best results are when I’m not using the experimental backend, which is needed for dual_kawase blur.