Without OpenGL and without shared memory, QEMU does not send a Scanout
to a D-Bus display client when VGA text mode changes its size. The
client gets only Updates for the rows of the new size, although
ui/dbus-display1.xml says that Update is only called after a Scanout
call.
Patch 1 sends a Scanout of the whole surface at the first update after
a surface switch. With shared memory, dbus_scanout_map() already does
the same with ScanoutMap. Patch 2 adds a test case for this to
dbus-display-test.
Tests, each with QEMU master (8967b2fe1b) and with the patches:
- The text mode setup of Windows NT 4.0 Workstation (German CD) with
cirrus-vga and TCG, and a D-Bus display client of my own (not
public). This client follows the Width and Height properties of the
Console, and its new buffer starts black when they change. Every 3
seconds, I saved its picture and a screendump, and compared them.
After about 21 seconds, the setup changes from 720x400 to 720x396.
In the pictures from 3 seconds after the change to the end of the
run:
master 177660 and 83700 of the 285120 pixels (two runs) are
black in the client, where the screendump shows the
blue background. The client got no Scanout of 720x396.
patches The picture of the client is the same as the screendump
(one run). The client got a Scanout of 720x396.
- dbus-display-test: with the series, all six test cases pass. With
patch 2 alone on master, the new test case text-resize fails
("Update" == "Scanout"). With patch 1 alone, the five other test
cases pass.
checkpatch.pl is clean.
Christian Quante (2):
ui/dbus: send a Scanout before the first Update of a new surface
tests/qtest/dbus-display-test: check the Scanout after a text resize
tests/qtest/dbus-display-test.c | 162 +++++++++++++++++++++++++++++---
ui/dbus-listener.c | 8 +-
2 files changed, 155 insertions(+), 15 deletions(-)
--
2.53.0