Strange zoom effect when using unscaled HiDPI

Discussions related to using VirtualBox on Mac OS X hosts.
Post Reply
zlatkig
Posts: 5
Joined: 5. May 2017, 22:34

Strange zoom effect when using unscaled HiDPI

Post by zlatkig »

Here are macOS host 10.12.5 and VirtualBox test-build 5.1.23 r115786. What I am about to write appears on all macOS 10.12.x and all VirtualBox 5.1.x releases. I am using several guests: Linux, FreeBSD and Windows. I'll explain first what I am trying to do, then what the results are.

The host has a HiDPI display. This gives crispy clear fonts and other niceties. I run all guests in a window (i.e. not fullscreen and not in seamless mode). Each guest has one virtual monitor at 1600x900. Each pixel in the virtual monitor, as seen by the guest, is represented by four device pixels on the host. This makes the guest look a bit pixelated compared to the host, but it is far from unusable.

I wanted to try out having a HiDPI virtual display and thus enjoy the same display quality in the guest as it is on the host. To do that I thought to:
  • 1. Turn on "Use unscaled HiDPI output" in the display settings of the VM.
    2. When guest boots, use "vboxmanage controlvm setvideomodehint" to double guest's virtual resolution to 3200x1800.
    3. Let the guest handle HiDPI scaling as it would on a real HiDPI monitor.
I expected that after step 2, the window where the guest is living will occupy the same surface on the host's display as it did before, but now the guest will see four times as many pixels. Here is how this worked with different guests.

Guest: Arch Linux with GNOME desktop on Wayland
Everything worked as expected. The guest runs GA 5.1.22 packaged by Arch.

Guest: Ubuntu 17.04
If I install GA packaged by Ubuntu, which is presently at version 5.1.18, then everything works as expected. If I however install GA using host's image (Devices -> Insert Guest Additions CD image...) then everything works fine until the guest reboots. Then the virtual monitor appears exactly as if it had 1 Hz refresh rate. The guest seems to receive and process all mouse and keyboard input as usual, but does not manage to update the virtual display more than once per second. Investigating this I observed that this problem only appears if VBoxClient is started in the guest while the guest is at high resolution. If VBoxClient is started at lower resolution and then the resolution changes to high (by using the method outlined in 2 above), then the problem does not surface. Typically VBoxClient is started as a part of the login process and accordingly the issue surfaces after a successful login (if the resolution is high) but it is not present on the login screen.

Guest: Windows 10
In this instance the guest runs GA version 5.1.23 installed from the host's image (its the only available source so it generally runs GA the same version as host's VirtualBox). I cannot begin to explain what happens here, so I recorded a video of a session: https://zlatkovic.com/vboxunscaledwin.mp4
I never reach the step 2 from above because step 1 already renders the guest unusable. In the video you can see the guest booting with "Use unscaled HiDPI output" turned on. At first everything appears okay. But as soon as I move the mouse over the virtual display, it performs a bizarre vertical zoom, moving available input elements out of the screen area. Observe that those input elements (buttons, edit boxes) are still where they should be and can respond to mouse if you know where to click. Also observe the small preview window in the VirtualBox Manager GUI, which shows the correct picture all the time. This effect likewise cannot be recorded using VirtualBox's own video capture feature - the video shows normal picture as seen in the small preview.

This last issue with Windows 10 guest is the one worth investigating because it stops the show. The issue with Ubuntu guest is probably interesting for the developers too, but can be perfectly worked around. I am attaching the log of the last session with the Windows 10 guest.

Does anyone have an idea what is happening here? Is there more I can do to help investigating?

Thanks a lot for reading.
Attachments
VBox.log.7z
Log of the session recorded in the linked video
(21.29 KiB) Downloaded 12 times
Post Reply