hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.72k stars 900 forks source link

Frame drops when moving mouse on amdgpu #8501

Open TheFattestCatProg opened 1 day ago

TheFattestCatProg commented 1 day ago

Already reported ? *

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland 0.45.0 built from branch main at commit 7affc34ab43c5d5cbf670759b839a9e990d8bbea (bind: new long press option (8302)). Date: Sat Nov 16 02:21:59 2024 Tag: v0.45.0-24-g7affc34a, commits: 5457 built against aquamarine 0.4.5 flags set: debug System Information: System name: Linux Node name: fat-arch Release: 6.11.6-zen1-1-zen Version: #1 ZEN SMP PREEMPT_DYNAMIC Fri, 01 Nov 2024 03:30:35 +0000 GPU information: 07:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] [1002:73df] (rev c1) (prog-if 00 [VGA controller]) 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/fatcat/.config/hypr/hyprland.conf: Read Succeeded ################ ### MONITORS ### ################ monitor = DP-1, 2560x1440@75Hz, 0x0, 1 monitor = HDMI-A-1, 1920x1080@75Hz, 2560x360, 1 #, mirror, DP-1 #monitor = HDMI-A-1, disable ############################# ### ENVIRONMENT VARIABLES ### ############################# env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland #env = GTK_THEME,catppuccin-mocha-lavender-standard+default env = QT_QPA_PLATFORM,wayland env = QT_QPA_PLATFORMTHEME,qt6ct #env = QT_QPA_PLATFORMTHEME,gtk3 #env = QT_QPA_PLATFORMTHEME,flatpak env = GTK_USE_PORTAL,1 # use ranger to as file chooser ################# ### AUTOSTART ### ################# # waybar & hyprpaper # exec-once = hypridle exec-once = gsettings set org.gnome.desktop.interface cursor-theme 'Adwaita' exec-once = hyprpaper exec-once = waybar 2>/tmp/hypr-waybar-log.txt exec-once = ~/.config/hypr/scripts/start-jobs.sh 2>/tmp/hypr-startup-log.txt #exec-once = ~/.config/hypr/scripts/xdg-desktop-hypr ##################### ### LOOK AND FEEL ### ##################### general { gaps_in = 2 gaps_out = 6 border_size = 2 col.active_border = rgb(cba6f7) col.inactive_border = rgba(1e1e2eee) resize_on_border = false allow_tearing = false layout = dwindle } cursor { inactive_timeout = 10 } decoration { rounding = 15 active_opacity = 1.0 inactive_opacity = 1.0 shadow { enabled = true range = 2 render_power = 2 color = rgba(1e1e2ea0) } dim_inactive = true dim_strength = 0.08 blur { enabled = true size = 4 passes = 2 noise = 0.025 contrast = 0.8 brightness = 0.73 #vibrancy = 0.0 #vibrancy_darkness = 1.0 popups = true ignore_opacity = true new_optimizations = true } } animations { enabled = true bezier = myBezier, 0.34, 0, 0.1, 1.03 animation = windowsMove, 1, 2.3, myBezier animation = windowsIn, 1, 0.6, myBezier animation = windowsOut, 1, 0.6, myBezier #animation = windowsOut, 1, 2.6, myBezier, popin 80% animation = border, 1, 1.0, myBezier animation = fade, 1, 0.6, myBezier animation = workspaces, 1, 2.3, myBezier } dwindle { pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = true # You probably want this } master { new_status = master } misc { force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( initial_workspace_tracking = 0 vfr = true vrr = 2 } render { explicit_sync = 0 explicit_sync_kms = 0 direct_scanout = true } ############# ### INPUT ### ############# input { kb_layout = us,ru kb_variant = kb_model = kb_options = grp:alt_space_toggle kb_rules = follow_mouse = 2 sensitivity = -0.007352941 # -1.0..1.0, 0 means no modification. accel_profile = flat touchpad { natural_scroll = false } } gestures { workspace_swipe = false } #################### ### KEYBINDINGSS ### #################### $winMod = SUPER $superMod = Control ALT binde = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% && hp-showvol-sink # Volume up binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% && hp-showvol-sink # Volume down bind =, XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle && hp-showvol-sink # Mute binde = ALT, F2, exec, pactl set-source-volume @DEFAULT_SOURCE@ -5% && hp-showvol-source # Volume up mic binde = ALT, F3, exec, pactl set-source-volume @DEFAULT_SOURCE@ +5% && hp-showvol-source # Volume down mic bind = ALT, F4, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle && hp-showvol-source # Mute mic # Screenshot bind = , Print, exec, grimblast copy area # Screenshot bind = SHIFT, Print, exec, grimblast save area # Screenshot (save) # Super binds bind = $superMod, T, exec, kitty # Terminal bind = $superMod, Delete, exec, [float; center; size 45% 50%] kitty bpytop # Bpytop bind = $superMod, G, exec, [float; center; size 20% 20%] kitty get-password -c # Run get-password bind = $superMod, W, exec, hypr-wallpaper-selector ~/Wallpapers/ # Wallpaper select bind = $superMod, F, exec, kitty ranger # Ranger bind = $superMod, B, exec, firefox # Browser bind = $superMod, C, exec, rofi -modes "calc" -show calc # Calculator bind = $superMod, H, exec, hp-keybinds # Show help bind = $superMod, 1, exec, swaylock --effect-blur 15x5 --screenshots --indicator-idle-visible # Lock bind = $superMod, 2, exec, swaylock --effect-blur 15x5 --screenshots --indicator-idle-visible & (sleep 1 ; systemctl suspend) # Suspend bind = $superMod, 3, exec, ~/.config/hypr/scripts/stop-jobs.sh ; hyprctl dispatch exit # Logout bind = $superMod, 4, exec, systemctl reboot # Reboot bind = $superMod, 5, exec, systemctl poweroff # Poweroff # Win binds bind = $winMod, Space, exec, rofi -columns 3 -modes "drun" -show drun # Run app bind = $winMod, E, exec, rofi -modes "emoji" -show emoji -kb-custom-1 Ctrl+c # Emoji select bind = $winMod, Q, killactive # Close window bind = $winMod, G, togglefloating # Toggle floating bind = $winMod, F, fullscreen, 1 # Toggle fullscreen bind = $winMod ALT, F, fullscreen, 0 # Toggle fullscreen 2 bind = $winMod, C, centerwindow # Center window # Split & pseudo bind = $winMod, V, togglesplit # Toggle split bind = $winMod, B, swapsplit # Swap split bind = $winMod, P, pseudo # Pseudo # Move focus bind = $winMod, A, movefocus, l # Focus left bind = $winMod, D, movefocus, r # Focus right bind = $winMod, W, movefocus, u # Focus up bind = $winMod, S, movefocus, d # Focus down # Move window bind = $winMod SHIFT, A, movewindow, l # Move left bind = $winMod SHIFT, D, movewindow, r # Move right bind = $winMod SHIFT, W, movewindow, u # Move up bind = $winMod SHIFT, S, movewindow, d # Move down # Swap windows bind = $winMod ALT, A, swapwindow, l # Swap left bind = $winMod ALT, D, swapwindow, r # Swap right bind = $winMod ALT, W, swapwindow, u # Swap up bind = $winMod ALT, S, swapwindow, d # Swap down # Switch workspaces bind = $winMod, Z, workspace, m-1 # Next workspace bind = $winMod, X, workspace, m+1 # Prev workspace bind = $winMod, 1, workspace, 1 # Workspace 1 bind = $winMod, 2, workspace, 2 # Workspace 2 bind = $winMod, 3, workspace, 3 # Workspace 3 bind = $winMod, 4, workspace, 4 # Workspace 4 bind = $winMod, 5, workspace, 5 # Workspace 5 bind = $winMod, 6, workspace, 6 # Workspace 6 bind = $winMod, 7, workspace, 7 # Workspace 7 bind = $winMod, 8, workspace, 8 # Workspace 8 bind = $winMod, 9, workspace, 9 # Workspace 9 bind = $winMod, 0, workspace, 10 # Workspace 10 # Move active window to a workspace bind = $winMod SHIFT, 1, movetoworkspace, 1 # Move to workspace 1 bind = $winMod SHIFT, 2, movetoworkspace, 2 # Move to workspace 2 bind = $winMod SHIFT, 3, movetoworkspace, 3 # Move to workspace 3 bind = $winMod SHIFT, 4, movetoworkspace, 4 # Move to workspace 4 bind = $winMod SHIFT, 5, movetoworkspace, 5 # Move to workspace 5 bind = $winMod SHIFT, 6, movetoworkspace, 6 # Move to workspace 6 bind = $winMod SHIFT, 7, movetoworkspace, 7 # Move to workspace 7 bind = $winMod SHIFT, 8, movetoworkspace, 8 # Move to workspace 8 bind = $winMod SHIFT, 9, movetoworkspace, 9 # Move to workspace 9 bind = $winMod SHIFT, 0, movetoworkspace, 10 # Move to workspace 10 # Example special workspace (scratchpad) #bind = $mainMod, S, togglespecialworkspace, magic #bind = $mainMod SHIFT, S, movetoworkspace, special:magic # Scroll through existing workspaces with mainMod + scroll #bind = $mainMod, mouse_down, workspace, e+1 #bind = $mainMod, mouse_up, workspace, e-1 # Window move, resize bindm = $winMod, mouse:273, movewindow # Move window bindm = $winMod, mouse:272, resizewindow # Resize window ############################## ### WINDOWS AND WORKSPACES ### ############################## windowrulev2 = bordercolor rgb(f38ba8), fullscreen:1 # Not lock screen in fullscreen windowrulev2 = idleinhibit fullscreen, class:^(*)$ windowrulev2 = idleinhibit fullscreen, title:^(*)$ windowrulev2 = idleinhibit fullscreen, fullscreen:1 # kitty windowrulev2 = opacity 0.915, class:^kitty$ # rofi windowrulev2 = float, class:^Rofi$ windowrulev2 = stayfocused, class:^Rofi$ windowrulev2 = opacity 0.85, class:^Rofi$ windowrulev2 = center, class:^Rofi$ windowrulev2 = bordersize 0, class:^Rofi$ # War Thunder windowrulev2 = fullscreen, class:^Loading...$, title:^Loading...$ # CS:GO windowrulev2 = fullscreen, class:^SDL Application$, title:^Counter-Strike 2$ #windowrulev2 = immediate, class:^SDL Application$, title:^Counter-Strike 2$ # VSCode+ popups windowrulev2 = noblur, class:^()$, title:^()$ windowrulev2 = opacity 0.94, class:^Code$ # pavucontrol windowrulev2 = float, class:^org.pulseaudio.pavucontrol$ windowrulev2 = size 30% 35.5%, class:^org.pulseaudio.pavucontrol$ windowrulev2 = move 100%-w-18 50, class:^org.pulseaudio.pavucontrol$ # Firefox #windowrulev2 = opacity 0.913, class:^firefox$ # Telegram #windowrulev2 = opacity 0.9, class:^org.telegram.desktop$ # Discord windowrulev2 = opacity 0.91, class:^discord$ # Nautilus windowrulev2 = opacity 0.9, class:^org.gnome.Nautilus$ ############## ### LAYERS ### ############## layerrule = blur, waybar layerrule = ignorezero, waybar layerrule = blur, logout_dialog layerrule = blur, wob ======Config-End======== ```

Description

When playing fullscreen games (War Thunder, Scrap Mechanic via Proton), at a random moment the game starts to freeze when move the mouse. Only restarting the game helps fix the problem for a while.

As I tested, frezzing not only game window, but whole screen.

I tried direct_scanout = false and no_hardware_cursors=true but it doesn't make sense. Freezing means fps drops from 75 to 40-50 (not smooth 40-50 fps). Check video below. Also at mouse move gpu consuming is very low (because of frame drops), cpu consuming not changing.

Problem started since upgrading to hyprland 0.45. Probably #8036 is the same report.

How to reproduce

I don't know, it's very random. Try to play fullscreen games for a while.

Crash reports, logs, images, videos

https://github.com/user-attachments/assets/6ae34099-ef2a-4d86-9a37-c222174a3577

vaxerski commented 1 day ago

can you bisect? https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue

TheFattestCatProg commented 22 hours ago

Ohh.. it takes a long time. Give me a week

Gwenodai commented 3 hours ago

I've experienced something similar with Orcs Must Die 3 in the past which occurred in both Hyprland and Sway (I didn't test anything else, but I'd assume it would happen under other wayland based WMs/DEs at least). It would trigger at random time usually about 30 mins in, but could sometimes not trigger for almost 2 hours of gameplay. But once it did trigger the only way to fix it was to close the game and reopen it. Although my frames weren't dropping down at all so it may not be the same issue.

But I did recently stumble across a thread of people complaining of a similar issue in a few other games and the suggested solution was to prepend the games launch arguments with LD_PRELOAD="". I've not had a chance to try it in anything myself since I no longer play OMD3 and haven't run into it elsewhere, but responses from the people in the thread claimed that they hadn't run into the bug after hours of playing despite it usually appearing around 15-30 mins in for them.

For reference this is the issue I was experiencing, which also only happened after playing for a while and only triggered on mouse movement:

https://github.com/user-attachments/assets/ab2221d1-c86c-4340-9b8a-bc215c0bd9f0

The odd part was that when I played that clip back in slow motion I saw this:

https://github.com/user-attachments/assets/2a25ae4b-6ba6-49b8-8397-2446457c5229

Which is really odd as it wasn't actually dropping frames at all but rather it seemed to be dropping my mouse input instead. Once I saw that I tried plugging a few other mice in and connecting a controller after it had occured but it continued occuring with movement from any mice, but not from controller stick input oddly.

But while your issue doesn't seem to be the same as mine, the odd conditions around it's activation and "fix" are the same, so maybe/hopefully the supposed fix may work for you too.

TL;DR: Try prepending the games launch arguments with LD_PRELOAD="" and see if that fixes it for you or not.

Atemo-C commented 2 hours ago

The same issue happens to me, or most similar to what @Gwenodai has described.

I have been playing a bit of Palia on Steam because of a friend, I am currently on NixOS stable but Hyprland is from the unstable repository, and Steam is installed natively (no Flatpaks, and also not using Flakes, NVIDIA GPU btw (1660S)).

After a few minutes of gameplay, usually after 37 minutes max, the game shows exactly the behaviour shown in the posts above. However, when I picked up my controller to play, the issue went away, as the post just above pointed out. When using my mouse or keyboard, the issue comes back immediately. Restarting the game temporarily fixes the issue. When the bug happens, my GPU and CPU usage go down drastically, and go back to normal after restarting the game or using a controller. Also, I noticed that when it happens, I can stop using the mouse, use a movement key and then use another, and the lag will stop until another key or mouse event is sent to the game.

(edit 2) I have tried LD_PRELOAD="", but this does not fix the issue for me. I have no other Wayland compositor installed to try it with, nor any other Linux distribution. I do not know if the issue is related to Hyprland, Steam, Proton, or some other things, but I felt that giving some additional point of view could help.