nextcloud / nextcloud/talk-desktop

Performance issue on HiDPI displays / RDP: full window repaint on chat switch causes very slow UI

Open
#1,787 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug os: Windows 🪟
Dominant language
JavaScript
Stars
525
Forks
85
Avg merge
8h 5m
Merged PRs (30d)
35

Description

Performance issue on HiDPI displays / RDP: full window repaint on chat switch causes very slow UI

Description

The desktop client becomes very sluggish on Windows when running on a HiDPI display (or over RDP with HiDPI scaling).

The issue is most noticeable when:

  • switching between conversations;
  • opening Settings;
  • navigating through the application.

The delay is caused by UI rendering rather than network activity or JavaScript execution.

Environment
  • Nextcloud Talk Desktop: 2.2.0
  • Electron: 41
  • Windows 10 (VM)
  • Official desktop client
  • Connection via Microsoft Remote Desktop (also reproducible using the native Windows RDP client from another Windows PC with a 4K monitor)
Expected behavior

Switching between chats and opening dialogs should remain responsive regardless of display scaling.

Actual behavior

The UI becomes noticeably sluggish on HiDPI displays.

Examples:

  • switching chats takes a noticeable amount of time;
  • opening Settings is slow;
  • overall navigation feels delayed.

CPU usage remains relatively low and the VM has plenty of available resources.

Investigation

I tried a number of Electron/Chromium flags:

  • --disable-gpu
  • --use-angle=d3d11
  • --use-angle=d3d11on12
  • --use-vulkan=swiftshader
  • --enable-features=Vulkan
  • --disable-features=UseSkiaRenderer
  • --enable-features=UseSkiaRenderer

None of them produced any significant improvement.

The only option that has a dramatic effect is:

--force-device-scale-factor=1

With this option the application becomes much more responsive.

However, the UI becomes too small to use comfortably.

Even values like:

--force-device-scale-factor=1.5

already make the UI noticeably slower again.

DevTools observations

Using Rendering → Paint Flashing, switching between conversations repaints almost the entire application window instead of only the updated content area.

This seems consistent across navigation actions (chat switching, opening Settings, etc.).

This suggests that the bottleneck may be excessive repaint/compositing of the whole window on HiDPI displays rather than JavaScript execution.

Additional information

The application bundle contains the standard Electron rendering libraries:

  • libEGL.dll
  • libGLESv2.dll
  • d3dcompiler_47.dll
  • vk_swiftshader.dll
  • vulkan-1.dll

Disabling Windows visual effects has no measurable impact on performance.

Since reducing the device scale factor almost completely removes the issue, it appears that rendering cost scales heavily with HiDPI resolution.

Just to add:
v2.1.2 doesn't lag
v2.2.0 lags

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the slowdown in Electron 41 on Windows at HiDPI scaling, using DevTools Rendering → Paint Flashing while switching chats and opening Settings. Compare behavior with version 2.1.2 and 2.2.0, and verify that navigation remains responsive without forcing a smaller device scale factor while limiting repainting to changed content.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, javascript
Domain
desktop, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.