aboutsummaryrefslogtreecommitdiff
path: root/ui/console.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2022-02-15 00:13:37 +0400
committerGerd Hoffmann <kraxel@redhat.com>2022-03-04 11:28:37 +0100
commitcb8962c146b2633a4b04562281de9b2703bba849 (patch)
treeec6ca5203268d9d5d037342984712e5d5b68d1b8 /ui/console.c
parent6cdcf8810744cbc67074468b7f3c2f50f8e3539c (diff)
downloadqemu-cb8962c146b2633a4b04562281de9b2703bba849.zip
qemu-cb8962c146b2633a4b04562281de9b2703bba849.tar.gz
qemu-cb8962c146b2633a4b04562281de9b2703bba849.tar.bz2
ui: do not create a surface when resizing a GL scanout
qemu_console_resize() will create a blank surface and replace the current scanout with it if called while the current scanout is GL (texture or dmabuf). This is not only very costly, but also can produce glitches on the display/listener side. Instead, compare the current console size with the fitting console functions, which also works when the scanout is GL. Note: there might be still an unnecessary surface creation on calling qemu_console_resize() when the size is actually changing, but display backends currently rely on DisplaySurface details during dpy_gfx_switch() to handle various resize aspects. We would need more refactoring to handle resize without DisplaySurface, this is left for a future improvement. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20220214201337.1814787-4-marcandre.lureau@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui/console.c')
-rw-r--r--ui/console.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/ui/console.c b/ui/console.c
index 79a01af..365a2c1 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -2400,13 +2400,12 @@ static void vc_chr_open(Chardev *chr,
void qemu_console_resize(QemuConsole *s, int width, int height)
{
- DisplaySurface *surface = qemu_console_surface(s);
+ DisplaySurface *surface;
assert(s->console_type == GRAPHIC_CONSOLE);
- if (surface && (surface->flags & QEMU_ALLOCATED_FLAG) &&
- pixman_image_get_width(surface->image) == width &&
- pixman_image_get_height(surface->image) == height) {
+ if (qemu_console_get_width(s, -1) == width &&
+ qemu_console_get_height(s, -1) == height) {
return;
}