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.65k stars 901 forks source link

[Bug] [Regression] Laptop FPS drops from 60 to 0-6 with docking station external monitors #7381

Closed nktnet1 closed 2 months ago

nktnet1 commented 2 months ago

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland, built from branch at commit 92744b5b9aa386257bf243c957ab64f7f4171a19 (index 00000000..3c830132). Date: Sun Aug 18 02:33:16 2024 Tag: v0.42.0-30-g92744b5b, commits: 5099 flags: (if any) System Information: System name: Linux Node name: Tam Release: 6.9.10-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Thu, 18 Jul 2024 18:06:13 +0000 GPU information: 0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Raptor Lake-S UHD Graphics [8086:a788] (rev 04) (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: hyprsplit by shezdy ver 1.0 ======Config-Start====== Config File: /home/nktnet/.config/hypr/hyprland.conf: Read Succeeded # ####################################################################################### # AUTOGENERATED HYPR CONFIG. # PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, # OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. # ####################################################################################### # This is an example Hyprland config file. # Refer to the wiki for more information. # https://wiki.hyprland.org/Configuring/Configuring-Hyprland/ # Please note not all available settings / options are set here. # For a full list, see the wiki # You can split this configuration into multiple files # Create your files separately and then link them to this file like this: # source = ~/.config/hypr/myColors.conf ################ ### MONITORS ### ################ # See https://wiki.hyprland.org/Configuring/Monitors/ monitor = desc:BOE 0x0A2C,2560x1600@60, auto, 1.6, bitdepth, 10 monitor = desc:Hewlett Packard HP LA2206 CNC1320BJL, 1920x1080@60, auto-left, 1, bitdepth, 10 monitor = desc:LG Electronics LG FULL HD 0x01010101, 1920x1080@60, auto-right, 1, bitdepth, 10 ################### ### MY PROGRAMS ### ################### # See https://wiki.hyprland.org/Configuring/Keywords/ ################# ### AUTOSTART ### ################# # Autostart necessary processes (like notifications daemons, status bars, etc.) # Or execute your favorite apps at launch like this: exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = hyprpm reload && hyprctl reload exec-once = wl-paste --type text --watch cliphist store # Stores only text data exec-once = wl-paste --type image --watch cliphist store # Stores only image data exec-once = pidof hypridle || hypridle exec-once = pidof waybar || waybar exec-once = pidof solaar || solaar --window hide --battery-icons solaar exec-once = pidof emote || emote exec-once = pidof -x low_battery.sh || $HOME/.config/hypr/scripts/low_battery.sh #exec-once = pidof -x temp-tracker.sh || $HOME/.config/hypr/scripts/temp-tracker.sh ############################# ### ENVIRONMENT VARIABLES ### ############################# # See https://wiki.hyprland.org/Configuring/Environment-variables/ env = HYPRCURSOR_THEME,rose-pine-hyprcursor env = XCURSOR_SIZE,28 env = HYPRCURSOR_SIZE,28 env = QT_CURSOR_SIZE,28 env = GTK_USE_PORTAL,0 env = GTK_THEME,Breeze:dark env = HYPRLAND_TRACE,1 env = AQ_TRACE,1 env = ELECTRON_OZONE_PLATFORM_HINT,auto # Nvidia Environment Variables #env = LIBVA_DRIVER_NAME,nvidia #env = XDG_SESSION_TYPE,wayland #env = GBM_BACKEND,nvidia-drm #env = __GLX_VENDOR_LIBRARY_NAME,nvidia #env = NVD_BACKEND,direct #env = AQ_DRM_DEVICES,$HOME/.config/hypr/cards/intelcard:$HOME/.config/hypr/cards/evdi.0-card:$HOME/.config/hypr/cards/evdi.1-card #env = AQ_DRM_DEVICES,$HOME/.config/hypr/cards/nvidiacard:$HOME/.config/hypr/cards/intelcard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/nvidiacard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/nvidiacard:$HOME/.config/hypr/cards/intelcard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/intelcard:$HOME/.config/hypr/cards/nvidiacard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/intelcard:$HOME/.config/hypr/cards/platform-evdi.0-card:$HOME/.config/hypr/cards/platform-evdi.1-card env = GDK_SCALE,2 #xwayland { # force_zero_scaling = true #} cursor { hide_on_key_press = false inactive_timeout = 1 no_hardware_cursors = true no_break_fs_vrr = false #min_refresh_rate = 60 } ##################### ### LOOK AND FEEL ### ##################### # Refer to https://wiki.hyprland.org/Configuring/Variables/ # https://wiki.hyprland.org/Configuring/Variables/#general general { gaps_in = 1 gaps_out = 1 border_size = 1 # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) # Set to true enable resizing windows by clicking and dragging on borders and gaps resize_on_border = false # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on allow_tearing = false layout = master } # https://wiki.hyprland.org/Configuring/Variables/#decoration decoration { rounding = 0 # Change transparency of focused and unfocused windows active_opacity = 1.0 inactive_opacity = 1.0 drop_shadow = false #shadow_range = 4 #shadow_render_power = 3 #col.shadow = rgba(1a1a1aee) # https://wiki.hyprland.org/Configuring/Variables/#blur blur { enabled = false #size = 3 #passes = 1 #vibrancy = 0.1696 } } # https://wiki.hyprland.org/Configuring/Variables/#animations animations { enabled = false first_launch_animation = false # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more #bezier = myBezier, 0.05, 0.9, 0.1, 1.05 #animation = windows, 1, 7, myBezier #animation = windowsOut, 1, 7, default, popin 80% #animation = border, 1, 10, default #animation = borderangle, 1, 8, default #animation = fade, 1, 7, default #animation = workspaces, 1, 6, default } # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more dwindle { pseudotile = true # Master switch for pseudotiling. Enabling is bound to modkey + P in the keybinds section below preserve_split = true # You probably want this } # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more master { new_status = slave no_gaps_when_only = 1 inherit_fullscreen = true } # https://wiki.hyprland.org/Configuring/Variables/#misc misc { force_default_wallpaper = 0 disable_hyprland_logo = true disable_splash_rendering = true new_window_takes_over_fullscreen = 1 exit_window_retains_fullscreen = true allow_session_lock_restore = true vfr = false vrr = 2 mouse_move_enables_dpms = false } # https://wiki.hyprland.org/Configuring/Variables/#render render { explicit_sync = 0 explicit_sync_kms = 0 direct_scanout = false } ############# ### INPUT ### ############# # https://wiki.hyprland.org/Configuring/Variables/#input input { kb_layout = us kb_variant = kb_model = kb_options = kb_rules = follow_mouse = 1 sensitivity = 0 # -1.0 - 1.0, 0 means no modification. kb_options = altwin:menu_win touchpad { natural_scroll = false tap-to-click = true } } # https://wiki.hyprland.org/Configuring/Variables/#gestures gestures { workspace_swipe = false } # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more device { name = epic-mouse-v1 sensitivity = -0.5 } debug { overlay = true disable_logs = false error_position = 1 disable_time = false suppress_errors = false enable_stdout_logs = true } #################### ### KEYBINDINGSS ### #################### source = $HOME/.config/hypr/config/keybindings.conf ############################## ### WINDOWS AND WORKSPACES ### ############################## # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules windowrulev2 = float,title:(Floating Window - Show Me The Key) windowrulev2 = pin,title:(Floating Window - Show Me The Key) windowrulev2 = move 100%-w-20, 100%-h-20,title:(Floating Window - Show Me The Key) windowrulev2 = move 100%-w-20, 100%-h-20,title:(swappy) windowrulev2 = move 100%-w-20, 100%-h-20,title:(Calculator) windowrulev2 = float,title:(Calculator) windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. ################ ### PLUGINS ### ################ source = $HOME/.config/hypr/plugins/hyprsplit.conf ################ ### APPS ### ################ source = $HOME/.config/hypr/apps/gromit-mpx.conf Config File: /home/nktnet/.config/hypr/config/keybindings.conf: Read Succeeded # See https://wiki.hyprland.org/Configuring/Keywords/ # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more # Modifiers $modkey = ALT $winkey = SUPER # Insert submap bindings bind = $modkey, I, submap, insert submap = insert bind = $modkey, I, submap, reset submap = reset # Programs $mfa = ente_auth $terminal = kitty $fileManager = thunar $menu = wofi --show drun $MS_TEAMS_PWA_ID = cifhbcnohmdccbgoicgdjpfamggdegmo # Direct functionalities #bind = , PRINT, exec, hyprshot --freeze --mode region bind = , PRINT, exec, hyprshot --freeze --mode=region --raw --clipboard-only | swappy -f - bind = , XF86PowerOff, exec, wlogout # Application launchers bind = $winkey SHIFT, D, togglespecialworkspace, gromit bind = $winkey, 2, exec, $mfa bind = $winkey, B, exec, pidof waybar || waybar bind = $winkey, C, exec, gnome-calculator bind = $winkey, D, exec, gromit-mpx --quit || hyprctl dispatch togglespecialworkspace gromit bind = $winkey, E, exec, $fileManager bind = $winkey, F, exec, firefox bind = $winkey, G, exec, google-chrome-stable bind = $winkey, L, exec, hyprlock bind = $winkey, M, exec, $terminal -e btop bind = $winkey, P, exec, hyprpicker --autocopy --no-fancy bind = $winkey, Q, exec, $terminal bind = $winkey, R, exec, rnote bind = $winkey, Return, exec, $terminal bind = $winkey, S, exec, killall showmethekey-gtk || showmethekey-gtk bind = $winkey, T, exec, gtk-launch chrome-$MS_TEAMS_PWA_ID-Default.desktop bind = $winkey SHIFT, T, exec, gtk-launch msedge-$MS_TEAMS_PWA_ID-Default.desktop bind = $winkey, U, exec, emote bind = $winkey, V, exec, pavucontrol bind = $modkey SHIFT, Return, exec, $terminal bind = $modkey, P, exec, $menu bind = $modkey, B, exec, killall -SIGUSR1 waybar bind = $modkey SHIFT, B, exec, killall -SIGUSR2 waybar bind = $modkey SHIFT, C, killactive, bind = $modkey SHIFT, Q, exec, killall -9 Hyprland bind = $modkey, F, togglefloating, bind = $modkey, R, fullscreen, 0 bind = $modkey, T, fullscreen, 1 bind = $modkey, M, fullscreen, 1 bind = $modkey, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy bind = $modkey, SPACE, fullscreen, 1 # Move Focus bind = $modkey, J, layoutmsg, cyclenext bind = $modkey, K, layoutmsg, cycleprev # Move active window bind = $modkey SHIFT, J, layoutmsg, swapnext bind = $modkey SHIFT, K, layoutmsg, swapprev bind = $modkey SHIFT, H, resizeactive, -50 0 bind = $modkey SHIFT, L, resizeactive, 50 0 # Resize active window binde = $modkey SHIFT, left, resizeactive, -50 0 binde = $modkey SHIFT, right, resizeactive, 50 0 binde = $modkey SHIFT, up, resizeactive, 0 -50 binde = $modkey SHIFT, down, resizeactive, 0 50 # Move active window binde = $modkey, right, moveactive, 50 0 binde = $modkey, left, moveactive, -50 0 binde = $modkey, up, moveactive, 0 -50 binde = $modkey, down, moveactive, 0 50 # Example special workspace (scratchpad) #bind = $modkey, S, togglespecialworkspace, magic #bind = $modkey SHIFT, S, movetoworkspace, special:magic # Scroll through existing workspaces with modkey + scroll bind = $modkey, mouse_down, workspace, e+1 bind = $modkey, mouse_up, workspace, e-1 # Move/resize windows with modkey + LMB/RMB and dragging bindm = $modkey, mouse:272, movewindow bindm = $modkey, mouse:273, resizewindow # Volume binde = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+ binde = , XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%- bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bind = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle # Brightness binde = , XF86MonBrightnessUp, exec, brightnessctl set +5%+ binde = , XF86MonBrightnessDown, exec, brightnessctl set 5%- # Focus next/prev monitors bind = $modkey, COMMA, focusmonitor, l bind = $modkey, PERIOD, focusmonitor, r # Move window to next/prev monitors bind = $modkey SHIFT, COMMA, movewindow, mon:l bind = $modkey SHIFT, PERIOD, movewindow, mon:r bind = $winkey, COMMA, workspace, -1 bind = $winkey, PERIOD, workspace, +1 # ============================================================================ # # NOTE: This will be overridden replaced by the hyprsplit plugin # https://github.com/shezdy/hyprsplit # See ~/.config/hypr/plugins/hyprsplit.conf # Switch workspaces with modkey + [0-9] #bind = $modkey, 1, workspace, 1 #bind = $modkey, 2, workspace, 2 #bind = $modkey, 3, workspace, 3 #bind = $modkey, 4, workspace, 4 #bind = $modkey, 5, workspace, 5 #bind = $modkey, 6, workspace, 6 #bind = $modkey, 7, workspace, 7 #bind = $modkey, 8, workspace, 8 #bind = $modkey, 9, workspace, 9 #bind = $modkey, 0, workspace, 10 # ## Move active window to a workspace with modkey + SHIFT + [0-9] #bind = $modkey SHIFT, 1, movetoworkspace, 1 #bind = $modkey SHIFT, 2, movetoworkspace, 2 #bind = $modkey SHIFT, 3, movetoworkspace, 3 #bind = $modkey SHIFT, 4, movetoworkspace, 4 #bind = $modkey SHIFT, 5, movetoworkspace, 5 #bind = $modkey SHIFT, 6, movetoworkspace, 6 #bind = $modkey SHIFT, 7, movetoworkspace, 7 #bind = $modkey SHIFT, 8, movetoworkspace, 8 #bind = $modkey SHIFT, 9, movetoworkspace, 9 #bind = $modkey SHIFT, 0, movetoworkspace, 10 Config File: /home/nktnet/.config/hypr/plugins/hyprsplit.conf: Read Succeeded plugin { hyprsplit { num_workspaces = 10 } } bind = $modkey, 1, split:workspace, 1 bind = $modkey, 2, split:workspace, 2 bind = $modkey, 3, split:workspace, 3 bind = $modkey, 4, split:workspace, 4 bind = $modkey, 5, split:workspace, 5 bind = $modkey, 6, split:workspace, 6 bind = $modkey, 7, split:workspace, 7 bind = $modkey, 8, split:workspace, 8 bind = $modkey, 9, split:workspace, 9 bind = $modkey, 0, split:workspace, 10 bind = $modkey SHIFT, 1, split:movetoworkspacesilent, 1 bind = $modkey SHIFT, 2, split:movetoworkspacesilent, 2 bind = $modkey SHIFT, 3, split:movetoworkspacesilent, 3 bind = $modkey SHIFT, 4, split:movetoworkspacesilent, 4 bind = $modkey SHIFT, 5, split:movetoworkspacesilent, 5 bind = $modkey SHIFT, 6, split:movetoworkspacesilent, 6 bind = $modkey SHIFT, 7, split:movetoworkspacesilent, 7 bind = $modkey SHIFT, 8, split:movetoworkspacesilent, 8 bind = $modkey SHIFT, 9, split:movetoworkspacesilent, 9 bind = $modkey SHIFT, 0, split:movetoworkspacesilent, 10 bind = $modkey, GRAVE, split:swapactiveworkspaces, current +1 bind = $modkey, G, split:grabroguewindows Config File: /home/nktnet/.config/hypr/apps/gromit-mpx.conf: Read Succeeded # GROMIT-MPX workspace = special:gromit, gapsin:0, gapsout:0, on-created-empty: gromit-mpx --active windowrulev2 = noblur, title:^(gromit-mpx)$ windowrulev2 = noshadow, title:^(gromit-mpx)$ windowrulev2 = maximize, title:^(gromit-mpx)$ windowrulev2 = opacity 1 override, 1 override,title:^(gromit-mpx)$ windowrulev2 = size 100% 100%, title:^(gromit-mpx)$ ======Config-End======== ```

Description

With debug:overlay = true, it was observed that the FPS cannot go above the 0-6 range (laptop monitor is configured at 60). This only happens when I have my docking station connected (with 2 additional monitors). Another observation is that the external monitors (using Displaylink/evdi) no longer turns on.

The bug happened in the commit:

The commit directly before that, i.e. ✅ https://github.com/hyprwm/Hyprland/commit/92744b5b9aa386257bf243c957ab64f7f4171a19, did not have this issue.

See logs further below - lots of errors regarding page-flip

[ERR] [12:44:27.556814139] [AQ] atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET PAGE_FLIP_EVENT

How to reproduce

  1. Pull the latest commit
  2. Run make all && sudo make install
  3. Ensure docking station with external monitors are connected
  4. Launch Hyprland from TTY

Crash reports, logs, images, videos

hyprland.log

vaxerski commented 2 months ago

can you get a DRM log? see https://github.com/swaywm/wlroots/wiki/DRM-Debugging

nktnet1 commented 2 months ago

I ran the following commands from TTY:

echo 0x19F | sudo tee /sys/module/drm/parameters/debug
sudo dmesg -C
sudo dmesg -w > dmesg.log &
Hyprland > hyprland-drm.log 2>&1

# Killed Hyprland session

fg

# Killed dmesg with Ctrl+C

echo 0 | sudo tee /sys/module/drm/parameters/debug

Since dmesg.log exceeds GitHub limit, I broke it into two files:

Hyprland logs:

vaxerski commented 2 months ago

can you also set AQ_TRACE=1 HYPRLAND_TRACE=1 and get just the hyprland log

vaxerski commented 2 months ago

also, it looks like you are on 10bit but the display rejects it. Can you try disabling 10b?

nktnet1 commented 2 months ago

can you also set AQ_TRACE=1 HYPRLAND_TRACE=1 and get just the hyprland log

I think my original post has the log with AQ_TRACE and HYPRLAND_TRACE enabled.


also, it looks like you are on 10bit but the display rejects it. Can you try disabling 10b?

Can confirm that turning off bitdepth=10, i.e. changing Hyprland config from

monitor = desc:BOE 0x0A2C,2560x1600@60, auto, 1.6, bitdepth, 10
monitor = desc:Hewlett Packard HP LA2206 CNC1320BJL, 1920x1080@60, auto-left, 1, bitdepth, 10
monitor = desc:LG Electronics LG FULL HD 0x01010101, 1920x1080@60, auto-right, 1, bitdepth, 10

to

monitor = desc:BOE 0x0A2C,2560x1600@60, auto, 1.6
monitor = desc:Hewlett Packard HP LA2206 CNC1320BJL, 1920x1080@60, auto-left, 1
monitor = desc:LG Electronics LG FULL HD 0x01010101, 1920x1080@60, auto-right, 1

does fix the issue on the latest commit (https://github.com/hyprwm/Hyprland/commit/c86db7bbb0cf14d4955ee3a4d13c0ed9f8a0e0ae).

I think I initially added the bitdepth=10 following an advice from the "Screen sharing on Hyprland (Arch Linux)" guide to fix screensharing:

But it looks like this workaround is no longer necessary (perhaps it was fixed with the transition to aquamarine).


[Unrelated?] I did run into an issue with OBS Screen Capture (things suddenly appearing red-shifted after turning off bitdepth and using the latest Hyprland commit) - similar issue to:

Fixed by

  1. Ensure bitdepth=10 is removed from hyprland config
  2. Open OBS, then go to File -> Settings -> Advanced
  3. Under Video -> Colour Space, select sRGB (mine defaulted to "Rec 709" similar to the terrybritton's comment in the obsproject link above)

Closing. Thanks @vaxerski.