Closed MahouShoujoMivutilde closed 3 months ago
disable hw cursors
Still stutters.
can you try git from 2 minutes ago
The same - when ff is the only window - stutter, when something else is also opened - fine. Toggling hw cursors makes no difference too.
EDIT:
Going to bisect original MR that introduced 37e1411
### Stage 1: **BAD** 401f0fe3 (HEAD -> buffer-lock-fixes, origin/buffer-lock-fixes) ree f8bf2daf ree b02f40f5 pee pee 36aac276 format bf3cc372 c ccceea6d b 8b68c971 e **NEXT** c29146ea shm stuff cursors dumb fbb8a63f fgormat eb541b9b stufffff 44d51f8b stuff more b6a381f3 stfuff 3d250381 fixes ec9e209e buffer lock fixes **GOOD** cc7c117f output: minor tearing fixes - NOTE: before the MR ### Stage 2: **BAD** 401f0fe3 (HEAD -> buffer-lock-fixes, origin/buffer-lock-fixes) ree f8bf2daf ree b02f40f5 pee pee 36aac276 format bf3cc372 c ccceea6d b 8b68c971 e Crash c29146ea shm stuff cursors dumb **NEXT** fbb8a63f fgormat eb541b9b stufffff 44d51f8b stuff more b6a381f3 stfuff 3d250381 fixes ec9e209e buffer lock fixes **GOOD** cc7c117f output: minor tearing fixes - NOTE: before the MR ...Crashes on launch, or workspace switching with Firefox open... ### Stage 7: **BAD** fbb8a63f fgormat **BAD** (Duh) eb541b9b stufffff Crash 44d51f8b stuff more Crash b6a381f3 stfuff Crash 3d250381 fixes Empty screen ec9e209e buffer lock fixes **GOOD** cc7c117f output: minor tearing fixes - NOTE: before the MR Attempting cherry-pick eb541b9b on crashes... Fixes them. ### Stage 1: **BAD** (Duh) eb541b9b stufffff 44d51f8b stuff more b6a381f3 stfuff **NEXT** 3d250381 fixes ec9e209e buffer lock fixes **GOOD** cc7c117f output: minor tearing fixes - NOTE: before the MR ### Stage 2: **BAD** 3d250381 fixes **NEXT** ec9e209e buffer lock fixes **GOOD** cc7c117f output: minor tearing fixes - NOTE: before the MR
ec9e209e is still empty screen, 3d250381 right after that already has the stutter.
Crashes when switching workspace have a peculiar quality to them - I didn't record them in slowmotion, but they happen at (I think) the same time in animation as the stutter would have happened.
So the problem was introduced in the first two commits of that MR.
is this cpu or gpu lag?
Idk, both of them aren't used above like 20% during workspace switching.
But the CPU usage spikes more when switching workspaces between 2 firefox windows, compared to chromium (which doesn't have this issue at all) with the same sites or just empty foot windows.
EDIT: Same thing with the GPU, apparently. With firefox load is higher when switching compared to chromium.
I've also encountered this issue. Also on nvidia.
Not sure if this is important, just wanted to add that there is no statter if the workspace animation is "fade".
How does b0a70f63e3865eaa77f0b78a04b230aa583bc95c work for you?
For me, it almost completely fixes it, to the point where I barely can tell the difference between this
https://github.com/user-attachments/assets/41d9acf8-1875-4e36-a69f-3154de69d567
and last-good video.
Yup, can't reproduce it anymore either
maybe should be closed then
Regression?
Yes
System Info and Version
System/Version info
```sh Hyprland, built from branch main at commit 4141e6755022edc19cd37cd7ad077a93b3bae5bd dirty (xcursor: rework bootleg xcursor (7140)). Date: Sat Aug 3 00:16:20 2024 Tag: v0.41.2-159-g4141e675, commits: 5045 flags: (if any) System Information: System name: Linux Node name: alice Release: 6.6.23.28.realtime1-5-rt-lts Version: #1 SMP PREEMPT_RT Mon, 22 Jul 2024 18:33:49 +0000 GPU information: 09:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1) (prog-if 00 [VGA controller]) NVRM version: NVIDIA UNIX x86_64 Kernel Module 555.58.02 Tue Jun 25 01:39:15 UTC 2024 os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: ======Config-Start====== Config File: /home/witch/.config/hypr/hyprland.conf: Read Succeeded monitor = ,preferred,auto,1.25 # fix nvidia env = LIBVA_DRIVER_NAME,nvidia env = XDG_SESSION_TYPE,wayland env = GBM_BACKEND,nvidia-drm env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = QT_QPA_PLATFORM,wayland;xcb env = SDL_VIDEODRIVER,wayland env = MOZ_ENABLE_WAYLAND,1 env = _JAVA_AWT_WM_NONREPARENTING,1 env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 general { gaps_in = 1 gaps_out = 0 border_size = 3 # assumes hyprdim # col.active_border = rgb(ee1111) col.active_border = rgb(b30000) # col.inactive_border = rgba(00000000) col.inactive_border = rgba(1a0402ff) # col.inactive_border = rgba(ffffffaa) layout = master } cursor { no_warps = yes inactive_timeout = 5 } # opengl { # # https://github.com/hyprwm/Hyprland/issues/4326 # nvidia_anti_flicker = false # } master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more # new_is_master = false new_status = slave allow_small_split = true special_scale_factor = 0.80 mfact = 0.55 orientation = left inherit_fullscreen = false always_center_master = false no_gaps_when_only = 1 # single monocle, basically } dwindle { pseudotile = no no_gaps_when_only = 1 # single monocle, basically use_active_for_splits = yes preserve_split = yes } input { follow_mouse = 2 float_switch_override_focus = 0 # kb_layout = us,ru # kb_options = caps:escape,grp:toggle repeat_delay = 300 repeat_rate = 50 numlock_by_default = yes # scroll_factor = 0.5 # https://github.com/hyprwm/Hyprland/issues/6707 # flickering is damage problem # emulate_discrete_scroll = 2 # XXX: next version: possibly fixes scroll in chromium on native wayland } device { name = logitech-usb-keyboard kb_layout = us,ru kb_options = caps:escape,grp:toggle # kb_options = caps:swapescape,grp:toggle } decoration { rounding = 5 blur { enabled = true size = 3 passes = 3 # brightness = 1.0 popups = true noise = 0.15 } drop_shadow = true shadow_range = 8 shadow_render_power = 1 shadow_offset = 3 6 # +right +down col.shadow = rgba(00000066) # screen_shader = ~/.config/hypr/vibrance-temperature.glsl } # unscale XWayland (text is pixelated otherwise because X can't do fractional scaling) xwayland { force_zero_scaling = true } # blurls = waybar blurls = launcher blurls = notifications # blurls = gtk-layer-shell # blurls = swaync-control-center animations { enabled = yes # https://easings.net/ # https://www.cssportal.com/css-cubic-bezier-generator/ bezier = cst, 0.84, 0.37, 0.2, 0.62 animation = windows, 1, 1, cst animation = windowsMove, 1, 2, default animation = windowsOut, 1, 3, default, popin 80% animation = border, 1, 5, default animation = workspaces, 1, 2, default # faster fade animation = fade, 1, 2, default # possibly fucks with gammastep at boot? first_launch_animation = no } binds { # workspace_back_and_forth = yes allow_workspace_cycles = yes } misc { mouse_move_enables_dpms = yes disable_autoreload = yes no_direct_scanout = yes # make shader work in fullscreen # middle_click_paste = no # XXX: may fuck with autoscroll animate_mouse_windowdragging = no animate_manual_resizes = no disable_hyprland_logo = yes disable_splash_rendering = yes force_default_wallpaper = 0 new_window_takes_over_fullscreen = 1 # 0 spawn behind, 1 new to fs, 2 unfullscreen # exit_window_retains_fullscreen = true # XXX: next version } debug { error_position = 1 # damage_tracking = 0 # 0 fixes chromium # overlay = yes # disable_logs = yes } # wiki syntax is class:^(class_name)$ windowrulev2 = workspace 9 silent,class:telegramdesktop windowrulev2 = workspace 9 silent,class:discord windowrulev2 = workspace 8 silent,class:org.qbittorrent.qBittorrent windowrulev2 = workspace 7,class:Darktable windowrulev2 = workspace 7,class:photoshop.exe windowrulev2 = workspace 6,class:gimp-2.99 # windowrulev2 = tile,class:Nsxiv windowrulev2 = fullscreen,class:(Ns|S)xiv windowrulev2 = float,class:floatme windowrulev2 = float,class:totallynotscratchpad windowrulev2 = dimaround,class:totallynotscratchpad # windowrulev2 = forceinput,class:totallynotscratchpad # windowrulev2 = windowdance,class:totallynotscratchpad windowrulev2 = float,class:fzfmenu windowrulev2 = float,class:com.github.hluk.copyq windowrulev2 = float,class:com.github.marhkb.Pods # bottom # windowrulev2 = move 70% 55%,class:syncthingtray,title:^(Syncthing Tray)$ # top # windowrulev2 = move 70% 5%,class:syncthingtray,title:^(Syncthing Tray)$ windowrulev2 = move 56% 4%,class:syncthingtray,title:^(Syncthing Tray)$ windowrulev2 = float,class:syncthingtray windowrulev2 = float,class:syncthingtray,title:^(Settings - Syncthing Tray)$ windowrulev2 = float,class:file-png # gimp 2.99 export windowrulev2 = float,class:qalculate-qt windowrulev2 = dimaround, class:qalculate-qt windowrulev2 = float,class:org.kde.kdeconnect.daemon windowrulev2 = dimaround, class:org.kde.kdeconnect.daemon # windowrulev2 = float,class:mpv # windowrulev2 = dimaround,class:mpv windowrulev2 = keepaspectratio,class:mpv windowrulev2 = dimaround, class:qalculate-qt # float add torrent window windowrulev2 = float,class:^(org.qbittorrent.qBittorrent)$ windowrulev2 = tile,class:^(org.qbittorrent.qBittorrent)$,title:qBittorrent # windowrulev2 = move 80% 40%,title:^(Mullvad VPN)$ windowrulev2 = move 64% 32%,title:^(Mullvad VPN)$ # bottom # windowrulev2 = move 70% 40%,class:^(blueman-manager)$ # top # windowrulev2 = move 70% 5%,class:^(blueman-manager)$ windowrulev2 = move 56% 4%,class:^(blueman-manager)$ windowrulev2 = float,class:^(blueman-manager)$ # windowrulev2 = rounding 0, xwayland:1 windowrulev2 = bordercolor rgb(65b770) rgba(00000000), xwayland:1 windowrulev2 = bordersize 2, xwayland:1 # float and follow firefox PiP video windowrulev2 = float,class:^(firefox)$,title:^(Picture-in-Picture)$ windowrulev2 = pin,class:^(firefox)$,title:^(Picture-in-Picture)$ windowrulev2 = keepaspectratio,class:^(firefox)$,title:^(Picture-in-Picture)$ # # close it only with a mouse # windowrulev2 = nofocus,class:^(firefox)$,title:^(Picture-in-Picture)$ # # disabled because can fuck context menus in chrome # windowrulev2 = tile, xwayland:1 # set bordercolor to green if window is fullscreen maximize # windowrulev2 = bordercolor rgb(158833),fullscreen:1 # windowrulev2 = tile,title:Telegram Web # some nice mouse binds bindm = SUPER, mouse:272, movewindow bindm = SUPER, mouse:273, resizewindow # compositor bindings # q bind = SUPER SHIFT, q, killactive, # s bind = SUPER, s, togglefloating, # a bind = SUPER, a, pseudo, # f bind = SUPER, f, fullscreen, 1 bind = SUPER SHIFT, f, fullscreen, 0 # MASTER bind=SUPER, o, layoutmsg, orientationcycle left top right center # h bind = SUPER, h, movefocus, l bind = SUPER, h, alterzorder, top # j bind = SUPER, j, movefocus, d bind = SUPER, j, alterzorder, top # k bind = SUPER, k, movefocus, u bind = SUPER, k, alterzorder, top # l bind = SUPER, l, movefocus, r bind = SUPER, l, alterzorder, top bind = SUPER SHIFT, h, movewindow, l bind = SUPER SHIFT, j, movewindow, d bind = SUPER SHIFT, k, movewindow, u bind = SUPER SHIFT, l, movewindow, r # MASTER bind = SUPER, m, layoutmsg, addmaster bind = SUPER SHIFT, m, layoutmsg, removemaster # # - # bind = SUPER SHIFT, underscore, layoutmsg, mfact 0.1 # # + # bind = SUPER SHIFT, plus, layoutmsg, mfact 0.1 bind = ALT, Tab, cyclenext, # change focus to another window bind = ALT, Tab, alterzorder, top # bring it to the top bind = ALT SHIFT, Tab, cyclenext, prev bind = ALT SHIFT, Tab, alterzorder, top bind = SUPER, 1, workspace, 1 bind = SUPER, 2, workspace, 2 bind = SUPER, 3, workspace, 3 bind = SUPER, 4, workspace, 4 bind = SUPER, 5, workspace, 5 bind = SUPER, 6, workspace, 6 bind = SUPER, 7, workspace, 7 bind = SUPER, 8, workspace, 8 bind = SUPER, 9, workspace, 9 bind = SUPER, 0, workspace, 10 # - or + for relative prev / next open workspace bind = SUPER, minus, workspace, e-1 bind = SUPER, equal, workspace, e+1 # bind = SUPER SHIFT, grave, workspace, e-1 # bind = SUPER, grave, workspace, e+1 bind = SUPER CTRL, h, workspace, e-1 bind = SUPER CTRL, l, workspace, e+1 bind = SUPER SHIFT CTRL, Tab, workspace, e-1 bind = SUPER CTRL, Tab, workspace, e+1 bind = SUPER, Tab, workspace, previous bind = SUPER SHIFT, 1, movetoworkspacesilent, 1 bind = SUPER SHIFT, 2, movetoworkspacesilent, 2 bind = SUPER SHIFT, 3, movetoworkspacesilent, 3 bind = SUPER SHIFT, 4, movetoworkspacesilent, 4 bind = SUPER SHIFT, 5, movetoworkspacesilent, 5 bind = SUPER SHIFT, 6, movetoworkspacesilent, 6 bind = SUPER SHIFT, 7, movetoworkspacesilent, 7 bind = SUPER SHIFT, 8, movetoworkspacesilent, 8 bind = SUPER SHIFT, 9, movetoworkspacesilent, 9 bind = SUPER SHIFT, 0, movetoworkspacesilent, 10 # other bindings bind = SUPER, RETURN, exec, foot bind = SUPER SHIFT, RETURN, exec, hyprland-scratchpad windowrulev2 = float,class:floating # windowrulev2 = dimaround,class:floating bind = SUPER ALT, RETURN, exec, foot -a floating # d bind = SUPER, d, exec, tofi-drun --width 30% --fuzzy-match true bind = SUPER SHIFT, d, exec, tofi-run --history=false --width 30% --fuzzy-match true | xargs -r hyprctl dispatch exec bind = SUPER, y, exec, extra-tools bind = SUPER, g, exec, qalculate-qt # c bind = SUPER, c, exec, copyq-dmenu bind = SUPER SHIFT, c, exec, copyq show # v bind = SUPER SHIFT, v, exec, wl-paste | tr -d '\n' | wtype - # n bind = SUPER SHIFT, n, exec, $TERMINAL -e nvim $XDG_RUNTIME_DIR/todo-today.txt bind = SUPER, n, exec, notify-send 'no, open scratchpad instead' # w bind = SUPER, w, exec, firefox -p default # bracketleft bind = SUPER, bracketleft, exec, ff-launch # bracketright bind = SUPER, bracketright, exec, record-wl || record-wl -s # semicolon bind = SUPER, semicolon, exec, hyprland-window-switcher # u bind = SUPER SHIFT, u, exec, fucking-bookmarks bind = SUPER, u, exec, mediaopen # c bind = SUPER ALT, c, exec, passmenu2 --type # binde = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +1% # binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -1% # bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle binde = , XF86AudioRaiseVolume, exec, volumectl +1% binde = , XF86AudioLowerVolume, exec, volumectl -1% bind = , XF86AudioMute, exec, volumectl toggle-mute bind = , XF86AudioPlay, exec, playerctl play-pause bind = , XF86AudioPrev, exec, playerctl previous bind = , XF86AudioNext, exec, playerctl next bind = , Print, exec, mksrc-wl bind = SUPER, Print, exec, mksrc-wl active bind = SHIFT, Print, exec, mksrc-wl area bind = CTRL, Print, exec, mksrc-wl area-edit bind = SUPER, f1, exec, echo -e "lock\nsuspend\nhibernate\nreboot\nshutdown\nexit_wm\n" | tofi --width 20% --heigh 20% --fuzzy-match true | xargs -r pm # other apps global bind = SUPER,F5,pass,^(com\.obsproject\.Studio)$ bind = SUPER,F6,pass,^(com\.obsproject\.Studio)$ # maybe prevents apps from being killed after logout # exec-once = systemd-run --user --scope ~/.config/autostart.sh exec-once = systemd-run --user --scope --slice-inherit ~/.config/autostart.sh # exec-once = hyprdim --persist --no-dim-when-only exec-once = hyprland-per-window-xkblayout # exec-once = hyprpm reload -n exec-once = sleep 1s; hyprpm reload -n; sleep 1s; hyprctl reload plugin { hyprexpo { columns = 3 gap_size = 5 bg_col = rgb(111111) workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1 enable_gesture = false # laptop touchpad, 4 fingers gesture_distance = 300 # how far is the "max" gesture_positive = true # positive = swipe down. Negative = swipe up. # hyprlang noerror true bind = SUPER, grave, hyprexpo:expo, toggle # can be: toggle, off/disable or on/enable # hyprlang noerror false } hyprbars { bar_color = rgb(2b2b2b) bar_height = 30 bar_padding = 5 bar_button_padding = 8 # example buttons (R -> L) # hyprbars-button = color, size, on-click hyprbars-button = rgba(ff4040aa), 23, , hyprctl dispatch killactive # hyprbars-button = rgb(eeee11), 23, [ ], hyprctl dispatch fullscreen 1 hyprbars-button = rgba(eeeeeeaa), 23, , hyprctl dispatch togglefloating # This works, but is this correct? windowrulev2 = plugin:hyprbars:nobar, floating:0 } } ======Config-End======== ```Description
Animation stutters when switching workspaces with Firefox as the only window on one of the workspaces. No stutter when there is some other window opened. Observed at 1.25 scale. Same problem on higher scales. Less noticeable, but present on 1.0, even with default config.
I initially assumed e989a0bcffac81092ed2a7e371f5225c113f689d broke it, but it actually works fine there if applied with all fixes and recursion fixes onto 8a5f9bbb394ddeb4be9a9df6248b41b07d84ea66 like so:
Had to bisect manually, because without
git cherry-pick -n 60571cd5ccc76f91209ef2faac93ecea542de221
(fix for recursion) opening foot terminal would cause Hyprland to crash on some older commits.Here is the log:
Details
### Stage 1: 09bb5658b7fa6c0dc4e2744797e51ad4dd25af42 window/ls: reset core signals after destroy ab0a3268e04f2295ec4455be90ce8d0c2b107b8d xdg-shell: fixup unassigned wl surfaces to xdg surfaces **BAD** c8873b958dd9330c364339ac4ab58e32b27d82b4 internal: fix fullscreen typos (7134) 60571cd5ccc76f91209ef2faac93ecea542de221 border: fixup infinite recursion 5edfa627b4efc5d2125f4f0f97dad6bac6c3a407 layershell: don't throw misaligned error on exclusive edge 0 95959789b7667172b2b2f37f78fe96ac196e9cd3 keybinds: allow toggling fullscreenstate (7128) **NEXT** 8c02b3c267198541dd03601e4c7ff7d870197728 layout: fix dynamic rules not updating after setting fullscreen (7129) 5b7057c4790e0dafea53c2343a792c17e2dbf4a7 pointer: fix buffer crash (7131) 37e1411e8d94fe8f3fb678588a7df9b8f931910f core/surface/buffer: Buffer lock/release fixes (7110) 548968279926a73d7ff19a9a185c977c50d56756 internal: some minor fd/socket cleanups and make logging thread safe (7123) **GOOD** e989a0bcffac81092ed2a7e371f5225c113f689d internal: refactor fullscreen states (7104) 8a5f9bbb394ddeb4be9a9df6248b41b07d84ea66 keybinds: handle null monitor in pinActive (7122) 3b9b5346b830554aa7470ccf1202a7f3be72d1b4 protocols: Move globalshortcuts impl (7102) 8ec3dc4c09c30aab7669f99ba6359be320023fa8 CI: update actions ### Stage 2: **BAD** 8c02b3c267198541dd03601e4c7ff7d870197728 layout: fix dynamic rules not updating after setting fullscreen (7129) 5b7057c4790e0dafea53c2343a792c17e2dbf4a7 pointer: fix buffer crash (7131) **NEXT** 37e1411e8d94fe8f3fb678588a7df9b8f931910f core/surface/buffer: Buffer lock/release fixes (7110) 548968279926a73d7ff19a9a185c977c50d56756 internal: some minor fd/socket cleanups and make logging thread safe (7123) **GOOD** e989a0bcffac81092ed2a7e371f5225c113f689d internal: refactor fullscreen states (7104) ### Stage 3: **BAD** 37e1411e8d94fe8f3fb678588a7df9b8f931910f core/surface/buffer: Buffer lock/release fixes (7110) **NEXT** 548968279926a73d7ff19a9a185c977c50d56756 internal: some minor fd/socket cleanups and make logging thread safe (7123) **GOOD** e989a0bcffac81092ed2a7e371f5225c113f689d internal: refactor fullscreen states (7104) ### Stage 4: **GOOD** 548968279926a73d7ff19a9a185c977c50d56756 internal: some minor fd/socket cleanups and make logging thread safe (7123) ### Result: **First bad is** 37e1411e8d94fe8f3fb678588a7df9b8f931910f core/surface/buffer: Buffer lock/release fixes (7110) (I removed `#` to not update a bunch of issues for no reason)
So 37e1411e8d94fe8f3fb678588a7df9b8f931910f broke it, apparently.
Also, I tried 4141e6755022edc19cd37cd7ad077a93b3bae5bd + https://github.com/hyprwm/Hyprland/pull/7151 , just in case - but no, it doesn't fix it.
How to reproduce
Crash reports, logs, images, videos
How it looks:
https://github.com/user-attachments/assets/6c315505-41dc-43db-9d60-d24d260dc97a
How it should look:
https://github.com/user-attachments/assets/6f18dd82-ab8f-4c1e-aa62-86d146634222