Page MenuHomePhabricator

Problem with unredirecting some windows
Closed, WontfixPublic

Description

Description

Performance issue with GPU heavy applications using fullscreen windows on dual monitor setup

System details

Dual monitor setup!

OS: Linux 4.17.4-1-ARCH #1 SMP PREEMPT Tue Jul 3 15:45:09 UTC 2018 x86_64 GNU/Linux
GPU: VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] (rev a1)
Driver version: nvidia 396.24-14
EFL version: 1.20.7-1 (tested also on git version from AUR)
Enlightenment version: 0.22.3-1 (tested also on git version from AUR)
Notes: using SDDM and X
Godot version: 3.0.5 (x64) without MONO

Steps to reproduce

Prepare some other WM or DE to compare performance (on BSPWM, GNOME and KDE it works) and decent GPU.

  1. Download Godot Engine
  2. Download some heavy scene
  3. Extract both archives :]
  4. Run Godot
  5. Import downloaded project, and wait a while
  6. Close Godot (it matter to have one instance of scene running, when there is editor running, actual window with game will be second so doubles the GPU usage)
  7. Reopen Godot
  8. Select imported project and click "Run" button
  9. Resize stuck window a little to show content (weird but unconnected with this issue)
  10. Select other "Display resolution" and reselect "Fullscreen" to make window fullscreen (also weird but unconnected with this issue)
  11. Set "Graphic quality" "Ultra" (or "High" but effect will be less visible)
  12. Click "OK" button
  13. Move mouse around and observe choppy rendering despite FPS counter showing decent value (42-60 FPS for me on "Ultra")
  14. Compare results with other DE/WM (on GNOME it looks smooth)

Despite FPS counter showing decent FPS (around 45) it doesn't look like it. On other WM/DE it works. I suspect problems with unredirecting windows. Tested with Software or OpenGL rendering and with "Don't composite fullscreen windows" checked and unechecked without luck.

EDIT: I tried to unplug one of my monitors. With only one monitor issue seems to disappear.

More details

xprop

__E_WINDOW_BORDER_SIZE(CARDINAL) = 0, 0, 1920, 1200
_NET_WM_NAME(UTF8_STRING) = "Sponza"
_NET_WM_ICON(CARDINAL) = Icon (128 x 128):

<icon omitted>

XdndAware(ATOM) = BITMAP
WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW
WM_NAME(STRING) = "Sponza"
_NET_WM_STATE(ATOM) = _NET_WM_STATE_FULLSCREEN
_NET_WM_BYPASS_COMPOSITOR(CARDINAL) = 1
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x0, 0x0, 0x0, 0x0
_E_FRAME_SIZE(CARDINAL) = 0, 0, 0, 0
_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 0, 0
__E_WINDOW_MAPPED(CARDINAL) = 1
WM_STATE(WM_STATE):

window state: Normal
icon window: 0x0

E_WINDOW_MANAGED(CARDINAL) = 1
E_ZONE_GEOMETRY(CARDINAL) = 0, 0, 1920, 1200
E_WINDOW_ZONE(CARDINAL) = 0
__E_WINDOW_DESK(CARDINAL) = 1, 0
WM_CLASS(STRING) = "Godot_Engine", "Godot"

Vulpes created this task.Jul 9 2018, 11:34 AM
Vulpes triaged this task as Normal priority.
Vulpes updated the task description. (Show Details)
Vulpes updated the task description. (Show Details)Jul 9 2018, 11:37 AM
Vulpes updated the task description. (Show Details)Jul 9 2018, 11:48 AM

EDIT: I tried to unplug one of my monitors. With only one monitor issue seems to disappear.

hey @devilhorns this sounds like a job for you :D

zmike closed this task as Wontfix.Jan 17 2019, 11:32 AM
zmike claimed this task.

"Don't composite fullscreen windows" has no use if you have multiple monitors, and this is an X-specific issue.

What you want is to enable advanced compositing features (composite settings -> advanced -> misc), then, from the application's window menu Composite -> Unredirected. This will forcibly unredirect the window and stop compositing it. Note that unless you bind this to an action (Toggle focused client's redirect state), it will be impossible to return the window to normal. This is also potentially dangerous, so it may screw up your session and require you to restart enlightenment in order to fix things.