Hyprland
Hyprland copied to clipboard
Screen capture greatly reduces the framerate of hyprland (not just the capture)
Bug or Regression?
Regression
System Info and Version
System/Version info
Hyprland, built from branch at commit 38132ffaf53c843a3ed03be5b305702fde8f5a49 ().
Date: 2024-06-12
Tag: , commits:
flags: (if any)
System Information:
System name: Linux
Node name: msi
Release: 6.6.32
Version: #1-NixOS SMP PREEMPT_DYNAMIC Sat May 25 14:22:56 UTC 2024
GPU information:
07:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c5) (prog-if 00 [VGA controller])
os-release: ANSI_COLOR="1;34"
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
BUILD_ID="24.11.20240612.57d6973"
DOCUMENTATION_URL="https://nixos.org/learn.html"
HOME_URL="https://nixos.org/"
ID=nixos
IMAGE_ID=""
IMAGE_VERSION=""
LOGO="nix-snowflake"
NAME=NixOS
PRETTY_NAME="NixOS 24.11 (Vicuña)"
SUPPORT_URL="https://nixos.org/community.html"
VERSION="24.11 (Vicuña)"
VERSION_CODENAME="vicuña"
VERSION_ID="24.11"
plugins:
hy3 by outfoxxed ver 0.1
======Config-Start======
Config File: /home/admin/.config/hypr/hyprland.conf: Read Succeeded
exec-once = /nix/store/bnipzdfv788l7yvgn7k7s7gp76sd1zpz-dbus-1.14.10/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target
plugin=/nix/store/45lfiwd4xfhy48m2mgc2glzqd8820vdh-hy3-hl0.41.0/lib/libhy3.so
source = /nix/store/r58cah42m9xprpbkh17fw0ks95kf8bdp-impurity--modules-hyprland-hyprland.conf
source = /nix/store/sy86hnipmvwvrjwac4mbkjxfkdn9nh5v-impurity--systems-msi-hyprland-hyprland.conf
Config File: /nix/store/r58cah42m9xprpbkh17fw0ks95kf8bdp-impurity--modules-hyprland-hyprland.conf: Read Succeeded
exec-once = quickshell -c shell
exec = systemctl start --user emacs.service && emacsclient -e "(setenv \"HYPRLAND_INSTANCE_SIGNATURE\" \"$HYPRLAND_INSTANCE_SIGNATURE\")"
general {
gaps_in = 3
gaps_out = 5
border_size = 1
col.active_border = rgba(33ccffee)
col.inactive_border = rgba(595959aa)
resize_on_border = true
layout = hy3
}
input {
kb_layout = us
sensitivity = 0
follow_mouse = 1
# mouse_refocus = false - #6393
accel_profile = flat
}
decoration {
rounding = 5
blur {
enabled = true
size = 7
passes = 4
noise = 0.008
contrast = 0.8916
brightness = 0.8
}
drop_shadow = no
}
animations {
enabled = yes
bezier = windowIn, 0.06, 0.71, 0.25, 1
bezier = windowResize, 0.04, 0.67, 0.38, 1
animation = windowsIn, 1, 3, windowIn, slide #popin 20%
animation = windowsOut, 1, 3, windowIn, slide #popin 70%
animation = windowsMove, 1, 2.5, windowResize
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 3, default
animation = workspaces, 1, 6, default, slidevert
animation = layers, 1, 5, windowIn, slide
}
gestures {
workspace_swipe = true
workspace_swipe_fingers = 4
workspace_swipe_forever = true
workspace_swipe_cancel_ratio = 0.15
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
vrr = 1
no_direct_scanout = false
key_press_enables_dpms = true
}
binds {
workspace_back_and_forth = true
}
plugin {
hy3 {
tabs {
height = 2
padding = 6
render_text = false
}
autotile {
enable = true
trigger_width = 800
trigger_height = 500
}
}
}
debug {
disable_logs = no
}
monitor = , preferred, auto, 1
layerrule = blur, test
layerrule = ignorezero, test
layerrule = noanim, test
layerrule = blur, wofi
layerrule = ignorezero, wofi
layerrule = noanim, ^(selection)$
layerrule = blur, termspawner
layerrule = ignorezero, termspawner
layerrule = noanim, termspawner
layerrule = animation fade, shell:background
layerrule = blur, shell:bar
layerrule = blurpopups, shell:bar
layerrule = ignorezero, shell:bar
#layerrule = noanim, shell:bar
layerrule = noanim, shell:screenshot
layerrule = blur, walker
layerrule = ignorezero, walker
layerrule = animation popin 90%, walker
windowrulev2 = float, class:^(opensnitch_ui)$
windowrulev2 = dimaround, class:^(opensnitch_ui)$
windowrulev2 = float, class:^(org.kde.polkit-kde-authentication-agent-1)$
windowrulev2 = dimaround, class:^(org.kde.polkit-kde-authentication-agent-1)$
windowrulev2 = float, class:^(gcr-prompter)$
windowrulev2 = dimaround, class:^(gcr-prompter)$
windowrulev2 = float, class:^(org.freedesktop.impl.portal.desktop.kde)$
windowrulev2 = size 1000 700, class:^(org.freedesktop.impl.portal.desktop.kde)$
windowrulev2 = center, class:^(org.freedesktop.impl.portal.desktop.kde)$
windowrulev2 = dimaround, class:^(org.freedesktop.impl.portal.desktop.kde)$
windowrulev2 = float, class:^(AlacrittyFloating)$
$mod = SUPER
$launcher = walker
bind = $mod+SHIFT, m, exit
bind = $mod, return, exec, alacritty
bind = $mod+SHIFT, return, exec, alacritty --class AlacrittyFloating
bind = $mod, grave, exec, $launcher
bind = $mod+SHIFT, q, hy3:killactive
bind = $mod+SHIFT, s, global, shell:screenshot
bind = $mod, c, global, shell:termselect
bind = $mod, PERIOD, exec, quickshell -c lockscreen
bind = $mod, f, fullscreen, 1
bind = $mod+SHIFT, f, fullscreen, 0
bind = $mod+SHIFT, tab, togglefloating
bind = $mod, d, hy3:makegroup, h
bind = $mod, s, hy3:makegroup, v
bind = $mod, z, hy3:makegroup, tab
bind = $mod, a, hy3:changefocus, raise
bind = $mod+SHIFT, a, hy3:changefocus, lower
bind = $mod, e, hy3:expand, expand
bind = $mod+SHIFT, e, hy3:expand, base
bind = $mod, r, hy3:changegroup, opposite
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
bindn = , mouse:272, hy3:focustab, mouse
bindn = , mouse_down, hy3:focustab, l, require_hovered
bindn = , mouse_up, hy3:focustab, r, require_hovered
bind = $mod, q, hy3:warpcursor
bind = ,XF86AudioStop, global, shell:music-pauseall
bind = ,XF86AudioPlay, global, shell:music-playpause
bind = ,XF86AudioNext, global, shell:music-next
bind = ,XF86AudioPrev, global, shell:music-previous
bind = $mod, h, hy3:movefocus, l
bind = $mod, j, hy3:movefocus, d
bind = $mod, k, hy3:movefocus, u
bind = $mod, l, hy3:movefocus, r
bind = $mod, left, hy3:movefocus, l
bind = $mod, down, hy3:movefocus, d
bind = $mod, up, hy3:movefocus, u
bind = $mod, right, hy3:movefocus, r
bind = $mod+CONTROL, h, hy3:movefocus, l, visible, nowarp
bind = $mod+CONTROL, j, hy3:movefocus, d, visible, nowarp
bind = $mod+CONTROL, k, hy3:movefocus, u, visible, nowarp
bind = $mod+CONTROL, l, hy3:movefocus, r, visible, nowarp
bind = $mod+CONTROL, left, hy3:movefocus, l, visible, nowarp
bind = $mod+CONTROL, down, hy3:movefocus, d, visible, nowarp
bind = $mod+CONTROL, up, hy3:movefocus, u, visible, nowarp
bind = $mod+CONTROL, right, hy3:movefocus, r, visible, nowarp
bind = $mod+SHIFT, h, hy3:movewindow, l, once
bind = $mod+SHIFT, j, hy3:movewindow, d, once
bind = $mod+SHIFT, k, hy3:movewindow, u, once
bind = $mod+SHIFT, l, hy3:movewindow, r, once
bind = $mod+SHIFT, left, hy3:movewindow, l, once
bind = $mod+SHIFT, down, hy3:movewindow, d, once
bind = $mod+SHIFT, up, hy3:movewindow, u, once
bind = $mod+SHIFT, right, hy3:movewindow, r, once
bind = $mod+CONTROL+SHIFT, h, hy3:movewindow, l, once, visible
bind = $mod+CONTROL+SHIFT, j, hy3:movewindow, d, once, visible
bind = $mod+CONTROL+SHIFT, k, hy3:movewindow, u, once, visible
bind = $mod+CONTROL+SHIFT, l, hy3:movewindow, r, once, visible
bind = $mod+CONTROL+SHIFT, left, hy3:movewindow, l, once, visible
bind = $mod+CONTROL+SHIFT, down, hy3:movewindow, d, once, visible
bind = $mod+CONTROL+SHIFT, up, hy3:movewindow, u, once, visible
bind = $mod+CONTROL+SHIFT, right, hy3:movewindow, r, once, visible
bind = $mod, 1, workspace, 01
bind = $mod, 2, workspace, 02
bind = $mod, 3, workspace, 03
bind = $mod, 4, workspace, 04
bind = $mod, 5, workspace, 05
bind = $mod, 6, workspace, 06
bind = $mod, 7, workspace, 07
bind = $mod, 8, workspace, 08
bind = $mod, 9, workspace, 09
bind = $mod, 0, workspace, 10
bind = $mod, F1, workspace, 11
bind = $mod, F2, workspace, 12
bind = $mod, F3, workspace, 13
bind = $mod, F4, workspace, 14
bind = $mod, F5, workspace, 15
bind = $mod, F6, workspace, 16
bind = $mod, F7, workspace, 17
bind = $mod, F8, workspace, 18
bind = $mod, F9, workspace, 19
bind = $mod, F10, workspace, 20
bind = $mod+SHIFT, 1, hy3:movetoworkspace, 01
bind = $mod+SHIFT, 2, hy3:movetoworkspace, 02
bind = $mod+SHIFT, 3, hy3:movetoworkspace, 03
bind = $mod+SHIFT, 4, hy3:movetoworkspace, 04
bind = $mod+SHIFT, 5, hy3:movetoworkspace, 05
bind = $mod+SHIFT, 6, hy3:movetoworkspace, 06
bind = $mod+SHIFT, 7, hy3:movetoworkspace, 07
bind = $mod+SHIFT, 8, hy3:movetoworkspace, 08
bind = $mod+SHIFT, 9, hy3:movetoworkspace, 09
bind = $mod+SHIFT, 0, hy3:movetoworkspace, 10
bind = $mod+SHIFT, F1, hy3:movetoworkspace, 11
bind = $mod+SHIFT, F2, hy3:movetoworkspace, 12
bind = $mod+SHIFT, F3, hy3:movetoworkspace, 13
bind = $mod+SHIFT, F4, hy3:movetoworkspace, 14
bind = $mod+SHIFT, F5, hy3:movetoworkspace, 15, follow
bind = $mod+SHIFT, F6, hy3:movetoworkspace, 16
bind = $mod+SHIFT, F7, hy3:movetoworkspace, 17
bind = $mod+SHIFT, F8, hy3:movetoworkspace, 18
bind = $mod+SHIFT, F9, hy3:movetoworkspace, 19
bind = $mod+SHIFT, F10, hy3:movetoworkspace, 20
bind = $mod+CONTROL, 1, hy3:focustab, index, 01
bind = $mod+CONTROL, 2, hy3:focustab, index, 02
bind = $mod+CONTROL, 3, hy3:focustab, index, 03
bind = $mod+CONTROL, 4, hy3:focustab, index, 04
bind = $mod+CONTROL, 5, hy3:focustab, index, 05
bind = $mod+CONTROL, 6, hy3:focustab, index, 06
bind = $mod+CONTROL, 7, hy3:focustab, index, 07
bind = $mod+CONTROL, 8, hy3:focustab, index, 08
bind = $mod+CONTROL, 9, hy3:focustab, index, 09
bind = $mod+CONTROL, 0, hy3:focustab, index, 10
Config File: /nix/store/sy86hnipmvwvrjwac4mbkjxfkdn9nh5v-impurity--systems-msi-hyprland-hyprland.conf: Read Succeeded
monitor = eDP-1, 1920x1080@240Hz, 0x1440, 1
monitor = DP-1, 5120x1440@120Hz, 1350x0, 1, bitdepth, 10
#monitor = DP-1, 2560x1440, 1350x0, 1
monitor = , preferred, auto, 1
workspace = 01, monitor:DP-1, default:true
workspace = 02, monitor:DP-1
workspace = 03, monitor:DP-1
workspace = 04, monitor:DP-1
workspace = 05, monitor:DP-1
workspace = 06, monitor:DP-1
workspace = 07, monitor:DP-1
workspace = 08, monitor:DP-1
workspace = 09, monitor:DP-1
workspace = 10, monitor:DP-1
workspace = 11, monitor:eDP-1, default:true
workspace = 12, monitor:eDP-1
workspace = 13, monitor:eDP-1
workspace = 14, monitor:eDP-1
workspace = 15, monitor:eDP-1
workspace = 16, monitor:eDP-1
workspace = 17, monitor:eDP-1
workspace = 18, monitor:eDP-1
workspace = 19, monitor:eDP-1
workspace = 20, monitor:eDP-1
======Config-End========
Description
When using pipewire screen capture, hyprland's framerate goes from vsync (240 and 120hz per monitor) to an unstable sub-30fps on both. Applications can detect the lowered framerate.
When using wf-recorder this does NOT happen. Regardless of if the bug causing the lowered framerate is in xdph or hyprland, a bad implementation of a screen recorder should not be able to influence the framerate of the compositor.
How to reproduce
Screen capture an application using OBS and pipewire. Observe the dropped framerate. Do the same with wf-recorder. Observe no change to framerate.
Crash reports, logs, images, videos
OBS making hyprland struggle to reach 20fps:
https://github.com/hyprwm/Hyprland/assets/83010835/fade6aeb-c2cc-479e-8443-616a294fcf29
wf-recorder having no impact whatsoever:
https://github.com/hyprwm/Hyprland/assets/83010835/1b3bfd3f-4bd0-46ec-9a5c-9a16f28bcfa4
The dimensions of the wf-recorder capture are only smaller because making them the same size at the higher refresh rate easily exceeds github's 10mb limit.
I've never seen this happen. What about xdpw?
xdpw has the same issue
then I think your pc might be broke
I don't think so, as it happened with a hyprland update and affects hyprland itself. Also it appears to be far less severe on my smaller monitor.
then bisect brotha
I was going to bisect, but I went all the way back to 0.33 and didn't find a good commit. (0.32 is incompatible with current xdph and 0.31 uses system wlr which requires me to write a package overlay to build it, so I didn't go back further.)
Before the screencopy rewrite (iirc) I used to use wlrobs in place of xdph, which does not display the problem (but crashes on recent hyprland versions)
Maybe this isn't a regression at all and was just always bad, I'm not sure. Since you can't seem to reproduce it yourself, is there any other kind of test i should do / is it worth it to go through the pain of building even older hyprland. (does any screenshare code from back then even still exist?)
no clue then. wl-screenrec is a cli option.
The reason is falling back to shm buffers.
From dms:
https://wayland.app/protocols/linux-dmabuf-v1 I only send a tranche for the main gpu not any other
reminder for after aq move
I can testify that I have the same issue. Just opening OBS causes my framerate to go super low. I can tell by the way my cursor moves.
@amarakon do you have multi-gpu or anything else abnormal about your setup?
@outfoxxed No I just have a regular desktop computer setup with one GPU.
Good to know. That means the real issue probably isn't shm or multigpu.
I also tested it with wf-recorder and it still greatly reduces the framerate. This is weird because @outfoxxed only experienced a lower framerate with OBS, not wf-recorder.
It doesn't appear that @vaxerski cares to fix the problem.
https://github.com/hyprwm/Hyprland/issues/6637
I would love to use a newer version of hyprland, but I & many others stuck on 0.40.0 so we can continue recording footage at a reasonable framerate. This is a major regression considering how I don't lose any framerate when recording using dmabuf from the obs plugin wlrobs. If this issue doesn't get fixed we may have to consider moving to another environment if we want to record at reasonable settings.
This is also coming from someone with a unreasonably high-end setup. So you can't blame it on the computer being "too slow" or "broken".
"wl-screenrec" Isn't an option. Especially since some of us may need special effects or options under OBS. We would much rather use a software that allows us to do what we need done than have our intelligence insulted by suggesting something else that doesn't get the job done nearly as well. If you could find it in your heart to care about our concerns, we would greatly appreciate it. @vaxerski
Will probably be handled after #6608.
if this is a regression provide a bisect. The problem outfoxxed outlines is not a regression so your issue is probably a separate one.
Older versions of Hyprland fail to build on my system, so I can't check if I'm experiencing a regression. Side note: GPU Screen Recorder works perfectly fine and I'm using that until this gets fixed.
if this is a regression provide a bisect. The problem outfoxxed outlines is not a regression so your issue is probably a separate one.
If my issue is a separate one, why don't you go back to the version mentioned yourself & test recording using dmabuf? Then try to test it on the latest release. If you think I'm lying or that I don't understand what I'm talking about, prove it. Otherwise it's safe to assume you're just trying to dodge taking the blame for this issue.
if this is a regression provide a bisect. The problem outfoxxed outlines is not a regression so your issue is probably a separate one.
If my issue is a separate one, why don't you go back to the version mentioned yourself & test recording using dmabuf? Then try to test it on the latest release. If you think I'm lying or that I don't understand what I'm talking about, prove it. Otherwise it's safe to assume you're just trying to dodge taking the blame for this issue.
Many issues, including this one, are software and hardware configuration specific, and even when its not, a very large amount of time can be saved and spent on something more useful if the person actually having the issue can tell you where it is (and if its hw/sw config specific its often not even possible to bisect without that config).
I don't know where you're getting anything about blame here either. Thats not how maintaining a project works.
Can confirm that FPS significantly drops when screen recording on the latest hyprland using OBS. not resolved with aquamarine. wlrobs dmabuf still crashes OBS.
Hello there!
This issue has been closed, as we are moving from issues to discussions. More about this can be found here and in #9854.
Firstly, please make sure this issue is still relevant in latest Hyprland. If so, we ask you to open a discussion (please read the discussion guidelines first, in the pinned post)
Thank you for your understanding!