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.59k stars 902 forks source link

Firefox add-on pop up UI and Chromium flickering issues #5333

Closed MrYuto closed 7 months ago

MrYuto commented 7 months ago

Hyprland Version

System/Version info ```sh Hyprland, built from branch HEAD at commit c5e28ebcfe00a510922779b2c568cfa52a317445 (props: bump ver 0.37.1). Date: Sat Mar 16 14:51:49 2024 Tag: v0.37.1 flags: (if any) System Information: System name: Linux Node name: ali-pc Release: 6.8.2-arch2-1 Version: #1 SMP PREEMPT_DYNAMIC Thu, 28 Mar 2024 17:06:35 +0000 GPU information: 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106 [Geforce RTX 3050] [10de:2507] (rev a1) (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: ```

Bug or Regression?

Bug

Description

it's been almost 2 weeks since I've been running Hyprland and the first version was 0.35.0-2. Firefox add-ons worked without any issue until I upgraded Firefox and Hyprland (0.38.1-1) at the same time.

When I opened Firefox I saw a blurred window and moving cursor causing drawing icons repeatedly until you go outside of the window or refocus the window again. I don't have this issue anymore but addons pop up UI flickering which is like the rendered frame doesn't get updated until you move the mouse. for example, when I'm typing my password in bitwardwn, I don't see anything (sometimes lags) until I move the mouse to fix it. Reducing the height of the Firefox window to make the addon pop out of the window I don't see any flickering.

I started using chromium and surprisingly when it's running on Wayland I didn't see any issue until I decided to use GPU acceleration. When I start typing in the search bar and then stop I see flickering of the old suggestion menu and the new one until I move the mouse.

If I disable Wayland both Firefox and Chromium run with GPU acceleration enabled without flickering.

TL;DR

How to reproduce

Firefox:

  1. Run Firefox on native Wayland
  2. Install the Bitwarden addon
  3. Open the addon, move the mouse on it, or type in the input texts
  4. You see lags, flickering, or no new frame render

Chromium:

  1. Run Chromium on native Wayland with GPU acceleration enabled
  2. Type random words in the search bar and then stop
  3. The old suggestion menu and the new one are flickering

Crash reports, logs, images, videos

https://github.com/hyprwm/Hyprland/assets/75252297/b6f22d81-4606-4838-9cdc-1fad2d8493a5

https://github.com/hyprwm/Hyprland/assets/75252297/4fb1cc76-96c2-49dc-80d7-b9d6745efbe9

MrYuto commented 7 months ago

idk if it's related but I just found out something is wrong with egl on Wayland Here is a video running eglgears_wayland:

https://github.com/hyprwm/Hyprland/assets/75252297/052d1a37-740a-4933-9319-be15211e7e0c

You can see gears stop if I don't keep moving the mouse inside its window.

equals03 commented 7 months ago

not to take this off topic and focus on the eglgears_wayland issue but on the off chance its related; are you running it through NVIDIA per chance? I have a laptop with prime (integrated AMD, discreet NVIDIA) and running without prime-offload all is good. However, using it I get the same behaviour as in your video. FWIW, I also see the update issues that you do in chrome/firefox specifically on the bitwarden plugin.

hyprctl version

Hyprland, built from branch  at commit ae52b7f4680716976d05b638aaa90e169d199117  ().
Date: 2024-03-26
Tag: 

flags: (if any)

eglgears_wayland -info

EGL_VERSION = 1.5
EGL_VENDOR = Mesa Project
EGL_EXTENSIONS = EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_present_opaque EGL_EXT_query_reset_notification_strategy EGL_EXT_swap_buffers_with_damage EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_gl_interop EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display EGL_WL_create_wayland_buffer_from_image 
EGL_CLIENT_APIS = OpenGL OpenGL_ES 

with offload (gears eventually stop updating if not in focus): nvidia-offload eglgears_wayland -info

EGL_VERSION = 1.5
EGL_VENDOR = NVIDIA
EGL_EXTENSIONS = EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_client_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_MESA_image_dma_buf_export EGL_EXT_output_base EGL_EXT_output_drm EGL_EXT_protected_content EGL_EXT_stream_consumer_egloutput EGL_EXT_stream_acquire_mode EGL_EXT_sync_reuse EGL_IMG_context_priority EGL_KHR_config_attribs EGL_KHR_create_context_no_error EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_partial_update EGL_KHR_swap_buffers_with_damage EGL_KHR_no_config_context EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_reusable_sync EGL_KHR_stream EGL_KHR_stream_attrib EGL_KHR_stream_consumer_gltexture EGL_KHR_stream_cross_process_fd EGL_KHR_stream_fifo EGL_KHR_stream_producer_eglsurface EGL_KHR_surfaceless_context EGL_KHR_wait_sync EGL_NV_nvrm_fence_sync EGL_NV_quadruple_buffer EGL_NV_stream_consumer_eglimage EGL_NV_stream_cross_display EGL_NV_stream_cross_object EGL_NV_stream_cross_process EGL_NV_stream_cross_system EGL_NV_stream_dma EGL_NV_stream_flush EGL_NV_stream_metadata EGL_NV_stream_remote EGL_NV_stream_reset EGL_NV_stream_socket EGL_NV_stream_socket_inet EGL_NV_stream_socket_unix EGL_NV_stream_sync EGL_NV_stream_fifo_next EGL_NV_stream_fifo_synchronous EGL_NV_stream_consumer_gltexture_yuv EGL_NV_stream_attrib EGL_NV_stream_origin EGL_NV_system_time EGL_NV_output_drm_flip_event EGL_NV_triple_buffer EGL_NV_robustness_video_memory_purge EGL_EXT_present_opaque EGL_WL_bind_wayland_display EGL_WL_wayland_eglstream
EGL_CLIENT_APIS = OpenGL_ES OpenGL

uname -a

Linux ATA15R7 6.8.1 #1-NixOS SMP PREEMPT_DYNAMIC Fri Mar 15 18:19:29 UTC 2024 x86_64 GNU/Linux

nvidia-smi

Sat Mar 30 10:37:27 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.67                 Driver Version: 550.67         CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2050        Off |   00000000:01:00.0  On |                  N/A |
| N/A   55C    P8              6W /   45W |      48MiB /   4096MiB |     16%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A      2817      G   /etc/profiles/per-user/me/bin/Hyprland          1MiB |
+-----------------------------------------------------------------------------------------+
CatalinPuscoci commented 7 months ago

I have the same bug with pop up windows within firefox, and I got AMD. The problem goes away if you, for instance, pop out bitwarden's pop-up window. Also from the looks of it I can't seem to see another client/window with hyprctl clients when the popup is open, and I think it's because it falls down in the category of "ah window doesn't have focus therefore throttle it to 1fps"

PS: I do not have the chromium and eglgears-wayland bugs. I believe you may have stumbled upon two different bugs.

Kommynct commented 7 months ago

I'm also having this issue on AMD

vaxerski commented 7 months ago

I'm not. I'll need more info.

Kommynct commented 7 months ago

What kind of information would be helpful for this?

CatalinPuscoci commented 7 months ago

Do you have a 4k screen by any chance @vaxerski ? It doesn't really happen as much on my smaller screen, and it happens less often if there are multiple windows on my 4k monitor making the browser window smaller. Either way, I could get you a recording and some debug logs later today if I remember.

MrYuto commented 7 months ago

I ran Firefox with logs enabled and for the first time, I got some logs saying partial update failed. After that, I kept getting partial updates are disabled which it seems it's normal.

MrYuto commented 7 months ago

I realized Firefox pop-ups have rounding and border but Chromium doesn't.

image

I think chromium has the correct behavior according to the code: https://github.com/hyprwm/Hyprland/blob/416b3d6167a996c7e94bd537cec20a12a0784efa/src/render/Renderer.cpp#L611

Edit: it seems Firefox uses a native pop-up window or something like that? Firefox pop-up can go outside of the window but chromium can only be inside the window

vaxerski commented 7 months ago

that's the popup rounding itself.

MrYuto commented 7 months ago

@vaxerski There is an option in the code to prevent popups from being squashed, but I can see the Firefox popup being squashed instead of rendered as a layer on top of another pop up.

image

Also, the border color and size are the same as the ones I defined in my config. I'm not sure if these are helpful, I'm trying to find the little things that seem wrong, so maybe it'll help you find the root.

The most interesting thing I know about this issue is when you force the pop-up to be outside of the window by reducing the size, it works fine. When it intersects with the parent window it has rendering issues.

vaxerski commented 7 months ago

firefox often uses subsurfaces incorrectly instead of popups

MrYuto commented 7 months ago

@vaxerski I did a git bisect and b1c0f1cc018d13ac1e5ebccaade5528ec757bd74 is the first bad commit for the Firefox issue. I'll do a bisect for Chromium cause it breaks from earlier.

MrYuto commented 7 months ago

301b48b74087cc59753ffa144b215540e6f82831 is the first bad commit for Chromium.

Fxzzi commented 7 months ago

Also noticing this in spotify-launcher running with native wayland.

extra_arguments = ["--enable-features=UseOzonePlatform", "--ozone-platform=wayland"] is in /etc/spotify-launcher.conf, confirmed wayland with hyprctl clients

https://github.com/hyprwm/Hyprland/assets/18248986/45d97c8e-95d8-417c-bb0f-044d4dd8289e

Nvidia 535.

remoblaser commented 7 months ago

Can confirm this happening in brave as well.

appleseedexm commented 7 months ago

Had this in brave as well, "fixed" it with setting "Appearance -> Use system title bar and borders = true" and flag "Preferred Ozone platform = Auto" (was "Wayland" before).

This seems only to work due to the forced restart, after some hours it gets worse and worse. Restarting brave "fixes" it again for a while.

Crisis82 commented 7 months ago

Also noticing this in spotify-launcher running with native wayland.

extra_arguments = ["--enable-features=UseOzonePlatform", "--ozone-platform=wayland"] is in /etc/spotify-launcher.conf, confirmed wayland with hyprctl clients 2024-04-03.02-16-19.mp4

Nvidia 535.

I've just tried to run some programs that gave me problems (teams, discord, spotify) with the extra arguments --enable-features=UseOzonePlatform --ozone-platform=wayland or as well just --ozone-platform-hint=wayland and both seems to have fixed the flickering issues.

I also noticed that with those arguments the following error src/gbm_drv_common.c:130: GBM-DRV error (get_bytes_per_component): Unknown or not supported format: 808530000 (which is returned consequently 5 times) isn't arised, while without the extra arguments each one of the affected programs returned it.

Furthemore, inspecting with hyprctl clients without adding the extra params returns the correct clients plus 5 more, which differs only for the ID, with the same properties:

Window 56483409e710 -> : mapped: 0 hidden: 0 at: 0,0 size: 0,0 workspace: -1 () floating: 0 monitor: -1 class: title: initialClass: initialTitle: pid: -1 xwayland: 1 pinned: 0 fullscreen: 0 fullscreenmode: 0 fakefullscreen: 0 grouped: 0 swallowing: 0 focusHistoryID: -1

I hope that all of these info aren't useless or redundant.

MrYuto commented 7 months ago

Chromium apps have flickering issues when they are in xwayland. All of these arguments are to enable Wayland for chromium and in fact you just need --ozone-platform-hint=auto. This issue is about flickering in native Wayland when GPU acceleration is enabled.

Also, I see this issue in GIMP, so it's not only about chromium.

ajmasia commented 7 months ago

The same issue here using firefox :blush: Using NixOS 23.11 statble with Hyprland flake (last release)

mettz commented 7 months ago

Same issue here using Firefox but on Intel with integrated graphics

vaxerski commented 7 months ago

odd. IIRC I saw this on my laptop but can't repro on my desktop, even when scaling. (firefox)

Any other repro steps yall can find?

Kommynct commented 7 months ago

https://gitlab.com/that1communist/dotfiles/-/blob/master/.config/hypr/ I don't know if it's something to do with my dotfiles but see if you can reproduce if you copy/paste this, and if you can, maybe it can be narrowed down.

vaxerski commented 7 months ago

dancing with the dead, fell in love with the temper of twilight, lust and evil powers

kagutaba256 commented 7 months ago

still having this issue on 38.1

LazarusCat59 commented 7 months ago

I'm also having this issue, had to switch to sway temporarily since it's pretty bad, even whole webpages in Brave does not change when I change tabs sometimes. Not just in Brave, I had this in multiple apps, for example steam's patch notes menu flickers a lot on Hyprland while it's perfectly fine on sway.

remoblaser commented 7 months ago

Can confirm this still happens. Disabling HW acceleration on all apps possible for now :/

MrYuto commented 7 months ago

Unfortunately, vaxry is not interested in chromium issues, so hopefully #5342 will also fix this.