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.93k stars 914 forks source link

GTK2 / Eclipse-based apps flicker in Wayland native mode #6844

Open lufjo opened 4 months ago

lufjo commented 4 months ago

Regression?

No

System Info and Version

System/Version info ```sh Hyprland, built from branch at commit 918d8340afd652b011b937d29d5eea0be08467f5 (flake.lock: update). Date: Tue Jun 25 12:06:02 2024 Tag: v0.41.2, commits: 4886 flags: (if any) System Information: System name: Linux Node name: arch Release: 6.9.8-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Fri, 05 Jul 2024 22:11:24 +0000 GPU information: 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117M [GeForce GTX 1650 Ti Mobile] [10de:1f95] (rev a1) (prog-if 00 [VGA controller]) 05:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1636] (rev c6) (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/lufjo/.config/hypr/hyprland.conf: Read Succeeded # # Please note not all available settings / options are set here. # For a full list,see the wiki # source=~/.config/hypr/conf/basic.conf source=~/.config/hypr/conf/rules.conf source=~/.config/hypr/conf/env.conf source=~/.config/hypr/conf/binds.conf exec-once=fcitx5 -d # exec-once=wl-paste --type text --watch cliphist store exec-once=copyq --start-server exec-once=~/.config/hypr/scripts/boot.sh Config File: /home/lufjo/.config/hypr/conf/basic.conf: Read Succeeded monitor=,preferred,auto,1 # for pluggin in random monitors workspace=special:grave,gapsout:60,rounding:false,bordersize:0,on-created-empty:kitty workspace=special:a,gapsout:60,rounding:false,bordersize:0 workspace=special:s,gapsout:60,rounding:false,bordersize:0 workspace=special:d,gapsout:60,rounding:false,bordersize:0 input { kb_layout=us kb_variant= kb_model= kb_options=caps:swapescape,ctrl:menu_rctrl # See /usr/share/X11/xkb/rules/base.lst kb_rules= follow_mouse=1 repeat_delay=200 repeat_rate=40 touchpad { natural_scroll=no } sensitivity=0 # -1.0 - 1.0,0 means no modification. } general { gaps_in=8 gaps_out=0 border_size=2 col.active_border=0xfff5c2e7 col.inactive_border=0xff45475a #col.active_border=rgba(33ccffee) rgba(00ff99ee) 45deg #col.inactive_border=rgba(595959aa) no_focus_fallback=false layout=dwindle } decoration { rounding=5 blur { size=1 passes=2 } drop_shadow=yes shadow_range=40 shadow_render_power=3 col.shadow=0x55000000 col.shadow_inactive=0x55000000 dim_inactive=no dim_strength=0.1 } animations { enabled=yes bezier=overshot,0.05,0.9,0.1,1.05 # bezier=overshot,0.13,0.99,0.29,1.10 animation=windows,1,5,overshot animation=border,1,10,default animation=fade,1,10,default animation=workspaces,1,4,default,slide animation=specialWorkspace,0,4,default,fade } dwindle { pseudotile=yes # master switch for pseudotiling preserve_split=yes # you probably want this } master { } gestures { workspace_swipe=off } misc { disable_hyprland_logo=true disable_autoreload=false # whether to disable configuration reload } binds { allow_workspace_cycles=true } Config File: /home/lufjo/.config/hypr/conf/rules.conf: Read Succeeded # Jetbrains products windowrulev2 = forceinput,class:^(jetbrains-.*)$ windowrulev2 = windowdance,class:^(jetbrains-.*)$ # wps # windowrulev2 = forceinput,class:^et$ # windowrulev2 = windowdance,class:^et$ windowrulev2 = float,class:^Bitwarden$ windowrulev2 = float,class:^org.telegram.desktop$ windowrulev2 = size 90% 90%,class:^org.telegram.desktop$ windowrulev2 = center,class:^org.telegram.desktop$ windowrulev2 = workspace special:d,class:^Joplin$ windowrulev2 = float,class:^com.github.hluk.copyq$ windowrulev2 = size 800 1000,class:^com.github.hluk.copyq$ # windowrulev2 = move 100%-1000 20,class:^com.github.hluk.copyq$ windowrulev2 = center,class:^com.github.hluk.copyq$ windowrulev2 = noborder,class:^Emby Theater$ windowrulev2 = rounding 0,class:^Emby Theater$ windowrulev2 = noborder,class:^mpv$ windowrulev2 = rounding 0,class:^mpv$ Config File: /home/lufjo/.config/hypr/conf/env.conf: Read Succeeded env=XCURSOR_SIZE,35 env=GDK_BACKEND,wayland,x11 env=QT_QPA_PLATFORM,wayland;xcb env=YDOTOOL_SOCKET,/tmp/.ydotool_socket env=PRIAMARY_MONITOR_FACTOR,1 env=PIPENV_VENV_IN_PROJECT,1 Config File: /home/lufjo/.config/hypr/conf/binds.conf: Read Succeeded # basic bind=SUPER,Q,killactive, bind=SUPER_SHIFT,Q,exit, bind=SUPER,SPACE,exec,rofi -replace -show drun bind=SUPER,F,togglefloating, bind=SUPER,comma,togglesplit, bind=SUPER,C,centerwindow bind=SUPER_CTRL,P,pin, bind=SUPER_CTRL,U,bringactivetotop bind=SUPER_CTRL,F,fullscreen,1 # windows ### # focus bind=SUPER,H,movefocus,l bind=SUPER,L,movefocus,r bind=SUPER,K,movefocus,u bind=SUPER,J,movefocus,d bind=SUPER,W,focusurgentorlast # move binde=SUPER_SHIFT,H,movewindow,l binde=SUPER_SHIFT,L,movewindow,r binde=SUPER_SHIFT,K,movewindow,u binde=SUPER_SHIFT,J,movewindow,d # resize binde=SUPER_CTRL,H,resizeactive,-50 0 binde=SUPER_CTRL,L,resizeactive,50 0 binde=SUPER_CTRL,K,resizeactive,0 -50 binde=SUPER_CTRL,J,resizeactive,0 50 # move floating binde=SUPER_ALT,H,moveactive,-50 0 binde=SUPER_ALT,L,moveactive,50 0 binde=SUPER_ALT,K,moveactive,0 -50 binde=SUPER_ALT,J,moveactive,0 50 # move&resize with mouse bind=SUPER,mouse_down,workspace, e+1 bind=SUPER,mouse_up,workspace, e-1 bindm=SUPER,mouse:272,movewindow bindm=SUPER,mouse:273,resizewindow # group bind=SUPER,G,changegroupactive,f bind=SUPER_CTRL,G,togglegroup # workspaces ### # switch workspaces 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 # cricle previous and current bind=SUPER,TAB,workspace,previous # move active window to a specific workspace bind=SUPER_SHIFT,1,movetoworkspace,1 bind=SUPER_SHIFT,2,movetoworkspace,2 bind=SUPER_SHIFT,3,movetoworkspace,3 bind=SUPER_SHIFT,4,movetoworkspace,4 bind=SUPER_SHIFT,5,movetoworkspace,5 bind=SUPER_SHIFT,6,movetoworkspace,6 bind=SUPER_SHIFT,7,movetoworkspace,7 bind=SUPER_SHIFT,8,movetoworkspace,8 bind=SUPER_SHIFT,9,movetoworkspace,9 bind=SUPER_SHIFT,0,movetoworkspace,10 # special workspaces bind=SUPER_SHIFT,grave,movetoworkspace,special:grave bind=SUPER,grave,togglespecialworkspace,grave bind=SUPER_SHIFT,A,movetoworkspace,special:a bind=SUPER,A,togglespecialworkspace,a bind=SUPER_SHIFT,S,movetoworkspace,special:s bind=SUPER,S,togglespecialworkspace,s bind=SUPER_SHIFT,D,movetoworkspace,special:d bind=SUPER,D,togglespecialworkspace,d ======Config-End======== ```

Description

And after using dbeaver for a while, it sometimes causes a crash.

https://github.com/hyprwm/Hyprland/assets/156897222/26cb6dee-5fab-4794-8c43-7c703c3a91ed

# hyprctl clients
Window 5ee7917ea6a0 -> DBeaver 24.1.1 :
    mapped: 1
    hidden: 0
    at: 60,60
    size: 1852,2040
    workspace: -98 (special:grave)
    floating: 0
    pseudo: 0
    monitor: 1
    class: DBeaver
    title: DBeaver 24.1.1 
    initialClass: DBeaver
    initialTitle: DBeaver 24.1.1 
    pid: 117077
    xwayland: 0
    pinned: 0
    fullscreen: 0
    fullscreenmode: 0
    fakefullscreen: 0
    grouped: 0
    tags: 
    swallowing: 0
    focusHistoryID: 1

How to reproduce

Just follow the video

Crash reports, logs, images, videos

No response

MightyPlaza commented 4 months ago

does it work fine on sway?

lufjo commented 4 months ago

does it work fine on sway?

yes, all good on sway

MightyPlaza commented 4 months ago

what about an older version of hyprland like v0.39.0? can you send a video with damage_blink enabled

lufjo commented 4 months ago

what about an older version of hyprland like v0.39.0? can you send a video with damage_blink enabled

On older versions there was no this issue, I forget what version this issue is from, likely from v0.40. And now build or downgrade that old version is more or less difficult. With damage_blink enabled:

https://github.com/user-attachments/assets/b3187bd1-c036-49d9-8a7e-4a6aec1cb241

UjinT34 commented 4 months ago

Regression since 6967a31450441fc5605c05db6f65505dace4b263

vaxerski commented 4 months ago

it's because of a hack that I made to prevent qt flickers. Fuck my life. Removing it fixes this, but makes qt flicker again.

lufjo commented 3 months ago

@vaxerski Seems this issue is back on 0.42 release.

vaxerski commented 3 months ago

-git too? Can you bisect?

lufjo commented 3 months ago

-git too? Can you bisect?

@vaxerski yes, git too. Regression: b0a70f63e

vaxerski commented 3 months ago

I hate my life :)

romanstingler commented 2 months ago

can you try the latest DBeaver Version 24.2.0.202409011810 and yay -S aquamarine-git hyprlang-git hyprcursor-git hyprutils-git hyprland-git --overwrite="*"

I use DBeaver on a daily basis, and haven't seen it for a long time

UjinT34 commented 2 months ago

Flickers with dbeaver 24.2.0.202409011755 and 9b54342baa27d8de0460e1103ec4c3cc65592ed8. Less severe than it was before the previous fix. Dbeaver itself doesn't crash for me but it makes hl leak memory until it runs oom and crashes. About 50-300mb every time dbeaver renders something new. Seems to depend on dbeaver's window size. Memory isn't really leaked, it is released back as soon as dbeaver is closed.

brisk84 commented 2 months ago

Can confirm. I have this issue on DBeaver 24.2.1.202409072322 and Hyprland 0.43.0. My config is 12450H with iGPU.

kareemAbd0 commented 2 months ago

I thought this was a 43 milestone, had to download plasma to continue work.

Any progress so far?

vaxerski commented 2 months ago

I'll remove the milestone - not working on this atm (I've spent a few hours a while back and couldn't find what was wrong)

Feel free to revert that one faulty commit, but it does break some other things (e.g. hyprpicker)

LorenzoBettini commented 2 months ago

As in the linked issue, this problem affects any Eclipse-based applications, like DBeaver and the Eclipse IDE itself.

I'd suggest @lufjo change the title of the issue to mention "Eclipse" or "Eclipse-based", so that the issue can be easily found.

rizqicy commented 2 months ago

FYI this workaround make it less pain to work with dbeaver at the moment (tested on my side and it works).

asgmojtaba commented 1 month ago

the most annoying thing it's not flickers but memory leakage that grows continuously (on hyprland process not dbeaver) while working with dbeaver. changing theme reduce flickers but don't do anything about memory issue.

My dirty workaround is forcing dbeaver to use X11 by changing Exec segment of it's desktop file to following:

...
Exec=env GDK_BACKEND=x11 dbeaver
...

Yes u lose all fancy feature of wayland (in my case HiDPI support!)

hope somebody fix this soon. (I have no idea about hyprland itself 😟)

LorenzoBettini commented 1 month ago

Yes u lose all fancy feature of wayland (in my case HiDPI support!)

@asgmojtaba for scaling in X11, I blogged about a few tricks here https://www.lorenzobettini.it/2024/09/eclipse-in-hyprland-0-43/

Vaisakhkm2625 commented 1 month ago

Yes u lose all fancy feature of wayland (in my case HiDPI support!)

@asgmojtaba for scaling in X11, I blogged about a few tricks here https://www.lorenzobettini.it/2024/09/eclipse-in-hyprland-0-43/

XD thanks.. and i came here from blog... guess it's xwayland then..

UjinT34 commented 2 weeks ago

Why dropCurrentBuffer(); inside commitPendingState? https://github.com/hyprwm/Hyprland/blob/bb160cfe377da2d2b2e4431a3399fa60114f3911/src/protocols/core/Compositor.cpp#L451

With this drop old buffer is (always?) empty https://github.com/hyprwm/Hyprland/blob/bb160cfe377da2d2b2e4431a3399fa60114f3911/src/protocols/core/Compositor.cpp#L88 and dbeaver has this flickering issue which causes HL to "leak" memory (probably video memory only, easier to test with integrated gpu without dedicated ram). Removing that drop solves this issue and doesn't seem to cause any other issues.

vaxerski commented 2 weeks ago

launch hyprpicker after you remove that drop and it won't render

UjinT34 commented 2 weeks ago

hyprpicker works for me without that drop...

How do signals and listeners work? Can something passed to registerListener be called without emit? IHLBuffer::hlEvents are never emitted.

vaxerski commented 2 weeks ago

How do signals and listeners work? Can something passed to registerListener be called without emit?

nope

IHLBuffer::hlEvents are never emitted.

they are in aq

vaxerski commented 2 weeks ago

hyprpicker works for me without that drop...

ah, maybe that one does, this part is very finnicky and like every line has been through 4 revisions because random things would break. Fun.

Perhaps this one was there to fix the xwayland leaks xd