Closed b4shful closed 1 day ago
I'm aware there's been a lot of duplicates of stuttering type bugs recently. I did search for open/closed issues about this specific issue and couldn't find anything which seemed to be the same.
If anyone thinks it's a duplicate please let me know before closing in case there's a misunderstanding.
Damnit, I should've ran the default config first on my clean install/live USB.
Will do this and get back to you.
I had this as well on NixOS (Framework 16 on iGPU). Whenever I have VRR enabled it occurs but only immediately after boot. The second the system is suspended then unsuspended it goes away.
Hyprland config: https://github.com/matthewpi/nixos-config/blob/c93176873c460be8f364be7cc5032f74a384c9e2/users/matthew/desktop/hyprland/hyprland.nix (none of the isDesktop
values) Hyprland commit: 6e0aadc585c6d9fdaaebfa5853adbf9610897c82
The monitor configuration is eDP-1, 2560x1600@165, 0x0, 1.333333, vrr,1, bitdepth,8
when I am able to reproduce this issue. If vrr
is set to 0
this issue does not occur.
I only have had this system for about a week and have been constantly tweaking options, so I am unable to confirm if this was a recent regression. If you need any additional information or require a bisect, please let me know.
@vaxerski I've gotten answers for some of the questions you asked,
I have been able to reproduce this on the default Hyprland config.
It doesn't happen on Sway.
I haven't been able to test older Hyprland versions yet, but I'm fairly certain it started after upgrading Arch Linux to the 6.11 kernel (so at the earliest either 15th September or 30th September-ish).
In relation to @matthewpi 's comment, I will add that I haven't been suspending/unsuspending my machine or anything for this. Usually as my workaround I literally exit hyprland and immediately open it again. I will play around with vrr and such too. But FWIW I've had my Framework 16 since May 2024 and this issue did not always occur. Since as far as I recall this issue began appearing coinciding with my update to 6.11 kernel, I'm tempted to say this may not be a regression so to speak (from a previous version of Hyprland).
I attached DRM logs to my initial post, but is there any other logging which might be useful here? I didn't see anything useful in journalctl or the standard hyprland log, although I can always up the verbosity.
This may not be a Hyprland issue.
https://gitlab.freedesktop.org/drm/amd/-/issues/3682
https://community.frame.work/t/psa-kernel-6-11-3-display-updates/59369
closing as a bug in mesa/drm
Already reported ? *
Regression?
No
System Info and Version
System/Version info
```sh Hyprland 0.44.0 built from branch main at commit 3cec45d82113051d35e846e5d80719d8ea0f7002 (Improve hyprland-session.service (8225)). Date: Thu Oct 24 15:50:53 2024 Tag: v0.44.0-73-g3cec45d8, commits: 5372 built against aquamarine 0.4.2 flags set: debug System Information: System name: Linux Node name: lobster-framework-arch Release: 6.11.5-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Tue, 22 Oct 2024 18:31:38 +0000 GPU information: c1:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf] (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/joel/.config/hypr/hyprland.conf: Read Succeeded # This file sources other files in `hyprland` and `custom` folders # You wanna add your stuff in file in `custom` # Defaults #source=~/.config/hypr/hyprland/env.conf #source=~/.config/hypr/hyprland/execs.conf #source=~/.config/hypr/hyprland/general.conf #source=~/.config/hypr/hyprland/rules.conf #source=~/.config/hypr/hyprland/colors.conf #source=~/.config/hypr/hyprland/keybinds.conf # Custom JOEL ALL CUSTOM source=~/.config/hypr/custom/env.conf source=~/.config/hypr/custom/execs.conf source=~/.config/hypr/custom/general.conf source=~/.config/hypr/custom/rules.conf source=~/.config/hypr/custom/colors.conf source=~/.config/hypr/custom/keybinds.conf Config File: /home/joel/.config/hypr/custom/env.conf: Read Succeeded # ######### Input method ########## # See https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland # env = QT_IM_MODULE, fcitx # env = XMODIFIERS, @im=fcitx # env = GTK_IM_MODULE, wayland # Crashes electron apps in xwayland # env = GTK_IM_MODULE, fcitx # My Gtk apps no longer require this to work with fcitx5 hmm # env = SDL_IM_MODULE, fcitx # env = GLFW_IM_MODULE, ibus # env = INPUT_METHOD, fcitx # ############ Themes ############# env = QT_QPA_PLATFORM, wayland env = QT_QPA_PLATFORMTHEME, qt5ct # env = QT_STYLE_OVERRIDE,kvantum # env = WLR_NO_HARDWARE_CURSORS, 1 # ######## Screen tearing ######### # env = WLR_DRM_NO_ATOMIC, 1 # ############ Others ############# # JOEL ADDED (it seems?) env = XDG_MENU_PREFIX, arch- env = HYPRCURSOR_SIZE,24 Config File: /home/joel/.config/hypr/custom/execs.conf: Read Succeeded # You can make apps auto-start here # Relevant Hyprland wiki section: https://wiki.hyprland.org/Configuring/Keywords/#executing # Bar, wallpaper exec-once = swww-daemon --format xrgb exec-once = /usr/lib/geoclue-2.0/demos/agent exec-once = ags & # Input method # exec-once = fcitx5 # Core components (authentication, lock screen, notification daemon) exec-once = gnome-keyring-daemon --start --components=secrets exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 || /usr/libexec/polkit-gnome-authentication-agent-1 exec-once = hypridle exec-once = dbus-update-activation-environment --all exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk exec-once = systemctl --user start kanshi.service exec-once = hyprpm reload # Audio exec-once = easyeffects --gapplication-service # Clipboard: history # exec-once = wl-paste --watch cliphist store & exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store # Cursor exec-once = hyprctl setcursor phinger-cursors-dark 24 Config File: /home/joel/.config/hypr/custom/general.conf: Read Succeeded # Put general config stuff here # Here's a list of every variable: https://wiki.hyprland.org/Configuring/Variables/ # MONITOR CONFIG monitor=eDP-1,preferred,auto,auto monitor=desc:HP Inc. HP E24q G5 CNC4152RH4,highrr,auto-up,1.25 # monitor=desc:Sharp Corporation 0x1449,preferred,auto,1.5 # monitor=,addreserved, 0, 0, 0, 0 # The "plugging in random monitors" rule (e.g plugging laptop into HDMI) monitor=,preferred,auto-up,auto # monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1 # CHANGED BY JOEL # unscale XWayland xwayland { force_zero_scaling = true } # env = GDK_SCALE,1.5 input { # Keyboard: Add a layout and uncomment kb_options for Win+Space switching shortcut kb_layout = gb # kb_options = grp:win_space_toggle # CHANGED BY JOEL for framework numlock_by_default = false repeat_delay = 250 repeat_rate = 35 touchpad { natural_scroll = yes disable_while_typing = true clickfinger_behavior = false scroll_factor = 0.5 } special_fallthrough = true # CHANGED BY JOEL follow_mouse = 2 # Setting to 0 stops cursor movement from changing the focus between tiled/floating windows # The default (1) was quite annoying, floating windows essentially ignored the follow_mouse setting # And focus moved back and forth between tiled (often the parent) and floating just by moving the mouse back and forth float_switch_override_focus = 0 # accel_profile = adaptive # sensitivity = 0 } # JOEL Custom settings for MX Master device { name = logitech-wireless-mouse-mx-master-3-1 sensitivity = 0.3 accel_profile = flat } binds { # focus_window_on_workspace_c# For Auto-run stuff see execs.confhange = true scroll_event_delay = 0 allow_workspace_cycles = true } gestures { workspace_swipe = true workspace_swipe_distance = 700 workspace_swipe_fingers = 4 workspace_swipe_cancel_ratio = 0.2 workspace_swipe_min_speed_to_force = 5 workspace_swipe_direction_lock = true workspace_swipe_direction_lock_threshold = 10 workspace_swipe_create_new = true } general { # Gaps and border gaps_in = 1 gaps_out = 2 gaps_workspaces = 50 border_size = 1 # Fallback colors col.active_border = rgba(0DB7D4FF) col.inactive_border = rgba(31313600) resize_on_border = true # CHANGED BY JOEL # This is the default anyways and probs won't do anything with such thin borders extend_border_grab_area = 15 no_focus_fallback = false layout = dwindle # focus_to_other_workspaces = true # ahhhh i still haven't properly implemented this allow_tearing = true # This just allows the `immediate` window rule to work } dwindle { preserve_split = true smart_split = false smart_resizing = false # CHANGED BY JOEL # force split = 2: always split to right (or bottom) force_split = 2 } decoration { rounding = 0 blur { enabled = true xray = true special = false new_optimizations = true size = 14 passes = 4 brightness = 1 noise = 0.01 contrast = 1 popups = true popups_ignorealpha = 0.6 } # Shadow drop_shadow = true shadow_ignore_window = true shadow_range = 20 shadow_offset = 0 2 shadow_render_power = 4 col.shadow = rgba(0000002A) # Shader # screen_shader = ~/.config/hypr/shaders/nothing.frag # screen_shader = ~/.config/hypr/shaders/vibrance.frag # Dim dim_inactive = false dim_strength = 0.1 dim_special = 0 } animations { enabled = true # Animation curves bezier = linear, 0, 0, 1, 1 bezier = md3_standard, 0.2, 0, 0, 1 bezier = md3_decel, 0.05, 0.7, 0.1, 1 bezier = md3_accel, 0.3, 0, 0.8, 0.15 bezier = overshot, 0.05, 0.9, 0.1, 1.1 bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 bezier = menu_decel, 0.1, 1, 0, 1 bezier = menu_accel, 0.38, 0.04, 1, 0.07 bezier = easeInOutCirc, 0.85, 0, 0.15, 1 bezier = easeOutCirc, 0, 0.55, 0.45, 1 bezier = easeOutExpo, 0.16, 1, 0.3, 1 bezier = softAcDecel, 0.26, 0.26, 0.15, 1 bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration # Animation configs animation = windows, 1, 3, md3_decel, popin 60% animation = windowsIn, 1, 3, md3_decel, popin 60% animation = windowsOut, 1, 3, md3_accel, popin 60% animation = border, 1, 10, default animation = fade, 1, 3, md3_decel # animation = layers, 1, 2, md3_decel, slide animation = layersIn, 1, 3, menu_decel, slide animation = layersOut, 1, 1.6, menu_accel animation = fadeLayersIn, 1, 2, menu_decel animation = fadeLayersOut, 1, 4.5, menu_accel animation = workspaces, 1, 7, menu_decel, slide # animation = workspaces, 1, 2.5, softAcDecel, slide # animation = workspaces, 1, 7, menu_decel, slidefade 15% # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% animation = specialWorkspace, 1, 3, md3_decel, slidevert } misc { vfr = 1 vrr = 1 # layers_hog_mouse_focus = true # false is the default for focus_on_activate # for some reason dots-hyprland used to set it to true # which caused some apps (e.g GNOME apps, Firefox) to move cursor to top left when opened focus_on_activate = false animate_manual_resizes = false animate_mouse_windowdragging = false enable_swallow = false swallow_regex = (foot|kitty|allacritty|Alacritty) disable_hyprland_logo = true force_default_wallpaper = 0 new_window_takes_over_fullscreen = 2 allow_session_lock_restore = true # It makes your apps open on the workspace they were opened on. For example: # - you open a launcher and launch an app on workspace 1 # - you switch to workspace 2 before it opens # - the app will now open on workspace 1 regardless # Also for slower loading apps it means they will open on the workspace they were invoked on, rather than the current # workspace at the time the app loads (so if you switch workspaces before it loads, it doesn't come with you) # 1 (default) is single-shot, 2 is persistent (all children too) # tbh not entirely sure what 2/persistent actually means initial_workspace_tracking = 1 } # Overview plugin { hyprexpo { columns = 3 gap_size = 5 bg_col = rgb(000000) workspace_method = first 1 # [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 = false } } Config File: /home/joel/.config/hypr/custom/rules.conf: Read Succeeded # ######## Window rules ######## # Custom/specific rules for individual apps # Place rules for individual apps in their own .conf file within the apprules directory # WARNING: Any .conf files placed in the apprules directory WILL be sourced and therefore applied to the hyprland config! source = ~/.config/hypr/custom/apprules/*.conf # The rest of the rules in here are more general/global rules (or rules I haven't split into their own files yet) windowrule = noblur,.* # windowrule = opacity 0.89 override 0.89 override, .* # Applies transparency to EVERY WINDOW windowrule = float, ^(blueberry.py)$ windowrule = float, ^(steam)$ windowrule = float, ^(guifetch)$ # FlafyDev/guifetch windowrulev2 = tile, class:(dev.warp.Warp) windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$ windowrule = center, title:^(Open File)(.*)$ windowrule = center, title:^(Select a File)(.*)$ windowrule = center, title:^(Choose wallpaper)(.*)$ windowrule = center, title:^(Open Folder)(.*)$ windowrule = center, title:^(Save As)(.*)$ windowrule = center, title:^(Library)(.*)$ windowrule = center, title:^(File Upload)(.*)$ # Picture-in-Picture windowrulev2 = keepaspectratio, title:^(Picture(-| )in(-| )[Pp]icture)$ # windowrulev2 = move 73% 72%,title:^(Picture(-| )in(-| )[Pp]icture)$ # windowrulev2 = size 25%, title:^(Picture(-| )in(-| )[Pp]icture)$ # The float rule is already specified above # windowrulev2 = float, title:^(Picture(-| )in(-| )[Pp]icture)$ windowrulev2 = pin, title:^(Picture(-| )in(-| )[Pp]icture)$ # Dialogs windowrule=float,title:^(Open File)(.*)$ windowrule=float,title:^(Select a File)(.*)$ windowrule=float,title:^(Choose wallpaper)(.*)$ windowrule=float,title:^(Open Folder)(.*)$ windowrule=float,title:^(Save As)(.*)$ windowrule=float,title:^(Library)(.*)$ windowrule=float,title:^(File Upload)(.*)$ windowrule=size 60% 72%,title:^(Open File)(.*)$ windowrule=size 60% 72%,title:^(Select a File)(.*)$ windowrule=size 60% 72%,title:^(Choose wallpaper)(.*)$ windowrule=size 60% 72%,title:^(Open Folder)(.*)$ windowrule=size 60% 72%,title:^(Save As)(.*)$ windowrule=size 60% 72%,title:^(Library)(.*)$ windowrule=size 60% 72%,title:^(File Upload)(.*)$ # Tearing windowrule=immediate,.*\.exe windowrulev2=immediate,class:(steam_app) # No shadow for tiled windows windowrulev2 = noshadow,floating:0 # ######## Layer rules ######## layerrule = xray 1, .* # layerrule = noanim, .* layerrule = noanim, walker layerrule = noanim, selection layerrule = noanim, overview layerrule = noanim, anyrun layerrule = noanim, indicator.* layerrule = noanim, osk layerrule = noanim, hyprpicker layerrule = blur, shell:* layerrule = ignorealpha 0.6, shell:* layerrule = noanim, noanim layerrule = blur, gtk-layer-shell layerrule = ignorezero, gtk-layer-shell layerrule = blur, launcher layerrule = ignorealpha 0.5, launcher layerrule = blur, notifications layerrule = ignorealpha 0.69, notifications # ags layerrule = animation slide left, sideleft.* layerrule = animation slide right, sideright.* layerrule = blur, session layerrule = blur, bar layerrule = ignorealpha 0.6, bar layerrule = blur, corner.* layerrule = ignorealpha 0.6, corner.* layerrule = blur, dock layerrule = ignorealpha 0.6, dock layerrule = blur, indicator.* layerrule = ignorealpha 0.6, indicator.* layerrule = blur, overview layerrule = ignorealpha 0.6, overview layerrule = blur, cheatsheet layerrule = ignorealpha 0.6, cheatsheet layerrule = blur, sideright layerrule = ignorealpha 0.6, sideright layerrule = blur, sideleft layerrule = ignorealpha 0.6, sideleft layerrule = blur, indicator* layerrule = ignorealpha 0.6, indicator* layerrule = blur, osk layerrule = ignorealpha 0.6, osk # Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ # "Smart gaps" / "No gaps when only" # uncomment all three if you wish to use that. workspace = w[t1], gapsout:0, gapsin:0, border: 0, rounding:0 workspace = w[tg1], gapsout:0, gapsin:0, border: 0, rounding:0 workspace = f[1], gapsout:0, gapsin:0, border: 0, rounding:0 Config File: /home/joel/.config/hypr/custom/apprules/minimeters.conf: Read Succeeded # Float all MiniMeters windows windowrulev2 = float, class:^(MiniMeters)$ Config File: /home/joel/.config/hypr/custom/apprules/qalculate.conf: Read Succeeded # Qalculate windowrulev2=float, class:(qalculate-gtk), title:(Qalculate!) windowrulev2=center, class:(qalculate-gtk), title:(Qalculate!) windowrulev2=size 55% 65%, class:(qalculate-gtk), title:(Qalculate!) Config File: /home/joel/.config/hypr/custom/apprules/wine.conf: Read Succeeded # Wine virtual desktop - the window should be big, not movable, not floating, not rounded # Tile it (it floats by default) and move it to an empty workspace - explorer.exe is the whole desktop (not just file explorer!) windowrulev2 = tile, class:^(explorer.exe)$, title:^(.*- Wine desktop)$ windowrulev2 = workspace emptynm, class:^(explorer.exe)$, title:^(.*- Wine desktop)$ # BOTTLES SPECIFIC WINE APPS (seem to all have class steam_proton even when not using Proton) # Bottles environment Wine virtual desktop (distinct from normal wine environment and its virtual desktop!) # Tile it (it floats by default) and move it to an empty workspace - explorer.exe is the whole desktop (not just file explorer!) windowrulev2 = tile, class:^(steam_proton)$, title:^(.*- Wine desktop)$ windowrulev2 = workspace emptynm, class:^(steam_proton)$, title:^(.*- Wine desktop)$ # Bottles LTspice (runs real nice without using virtual desktop!) windowrulev2 = tile, class:^(steam_proton)$, title:^(LTspice)$ Config File: /home/joel/.config/hypr/custom/apprules/wolfram-system-modeler.conf: Read Succeeded # Wolfram system modeler XWayland (not wine) # Set QT_SCALE_FACTOR=1.6 in the desktop files # Initial "register pls" screen windowrulev2 = center, class:^(SystemModeler)$, title:^(Wolfram Product Activation)$ windowrulev2 = workspace emptynm, class:^(SystemModeler)$, title:^(Wolfram Product Activation)$ # Loading screen/splash windowrulev2 = center, class:^(SystemModeler)$, title:^(SystemModeler)$ # Main screen windowrulev2 = tile, class:^(SystemModeler)$, title:^(Wolfram System Modeler Model Center 14.1)$ # Welcome screen/quick start windowrulev2 = tile, class:^(SystemModeler)$, title:^(Welcome to Wolfram System Modeler)$ # Wayland native is possible by just clearing the display environment variable!! e.g "DISPLAY= " or "env DISPLAY=Description
When I first launch Hyprland after a reboot, I get very strange stutters, the entire display freezes every couple of seconds for an indeterminate duration (between 1s and even longer like 5s or more). But it still seems to accept keyboard inputs (as in, I can type a command or something, and it will all register but the display will only update once it decides to stop being frozen).
Weirdly though, this issue completely goes away (no stutters whatsoever) if I just exit Hyprland and open it again.
I can't find much info on this, because most other reports about stuttering etc. were some (unrelated) NVIDIA issues, but I am not using NVIDIA.
I'm using a Framework 16, AMD Ryzen 9 7940HS w/ Radeon 780M Graphics Using latest git version of Hyprland, latest Arch Linux, end-4 dotfiles
I've even tried a fresh installation of everything on a live USB and the same issue occurs.
I think the issue started sometime after updating to the arch 6.11 kernel about 3 weeks ago or so.
How to reproduce
Crash reports, logs, images, videos
I will upload some videos and other logs as soon as I can, but for now here's kernel logs dmesg w/ verbose DRM logs
DRM logs
dmesg logs with verbose DRM logging enabled
Obtained with methodology from https://wiki.hyprland.org/Crashes-and-Bugs/#debugging-drm-issues Both these logs are for a short (like 10 second) duration, in both instances I open Hyprland, open a terminal (foot) and start typing random characters, before then exiting Hyprland.
The "firstlaunch" log file is the one where the stuttering occurs, then I exited Hyprland and (after clearing logs to obtain a fresh one) immediately opened it again. The second DRM dmesg log is provided for comparison purposes, there was no stuttering observed on the session logged in the "secondlaunch" file.
To reiterate: Both logs: launch Hyprland, open terminal, type random stuff, then exit Hyprland "firstlaunch": stuttering occurs "secondlaunch": after quitting and launching Hyprland again, the stuttering is completely gone
firstlaunch_dmesg_20241023T012506.log secondlaunch_dmesg_20241023T012617.log