Hyprland icon indicating copy to clipboard operation
Hyprland copied to clipboard

Screen capture greatly reduces the framerate of hyprland (not just the capture)

Open outfoxxed opened this issue 1 year ago • 20 comments
trafficstars

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.

outfoxxed avatar Jun 13 '24 00:06 outfoxxed

I've never seen this happen. What about xdpw?

vaxerski avatar Jun 13 '24 09:06 vaxerski

xdpw has the same issue

outfoxxed avatar Jun 13 '24 19:06 outfoxxed

then I think your pc might be broke

vaxerski avatar Jun 14 '24 09:06 vaxerski

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.

outfoxxed avatar Jun 14 '24 10:06 outfoxxed

then bisect brotha

vaxerski avatar Jun 14 '24 17:06 vaxerski

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?)

outfoxxed avatar Jun 24 '24 20:06 outfoxxed

no clue then. wl-screenrec is a cli option.

vaxerski avatar Jun 25 '24 11:06 vaxerski

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

outfoxxed avatar Jun 25 '24 18:06 outfoxxed

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.

amarz45 avatar Jun 29 '24 19:06 amarz45

@amarakon do you have multi-gpu or anything else abnormal about your setup?

outfoxxed avatar Jul 01 '24 19:07 outfoxxed

@outfoxxed No I just have a regular desktop computer setup with one GPU.

amarz45 avatar Jul 01 '24 20:07 amarz45

Good to know. That means the real issue probably isn't shm or multigpu.

outfoxxed avatar Jul 02 '24 18:07 outfoxxed

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.

amarz45 avatar Jul 13 '24 23:07 amarz45

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

image

Dominara1 avatar Jul 14 '24 07:07 Dominara1

Will probably be handled after #6608.

fufexan avatar Jul 14 '24 10:07 fufexan

if this is a regression provide a bisect. The problem outfoxxed outlines is not a regression so your issue is probably a separate one.

vaxerski avatar Jul 14 '24 10:07 vaxerski

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.

amarz45 avatar Jul 14 '24 19:07 amarz45

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.

Dominara1 avatar Jul 17 '24 13:07 Dominara1

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.

outfoxxed avatar Jul 18 '24 03:07 outfoxxed

Can confirm that FPS significantly drops when screen recording on the latest hyprland using OBS. not resolved with aquamarine. wlrobs dmabuf still crashes OBS.

SMGttv avatar Jul 22 '24 19:07 SMGttv

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!

vaxerski avatar Apr 05 '25 19:04 vaxerski