From: Vivek Kasireddy <vivek.kasireddy@intel.com>
To: qemu-devel@nongnu.org
Cc: "Vivek Kasireddy" <vivek.kasireddy@intel.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Frediano Ziglio" <freddy77@gmail.com>,
"Dongwon Kim" <dongwon.kim@intel.com>
Subject: [PATCH v1 3/7] ui/spice: Submit the gl_draw requests at 60 FPS for remote clients
Date: Fri, 19 Jan 2024 16:30:09 -0800 [thread overview]
Message-ID: <20240120003013.1829757-4-vivek.kasireddy@intel.com> (raw)
In-Reply-To: <20240120003013.1829757-1-vivek.kasireddy@intel.com>
In the specific case where the display layer (virtio-gpu) is using
dmabuf, and if remote clients are enabled (-spice gl=on,port=xxxx),
it makes sense to limit the maximum (streaming) rate to 60 FPS
using the GUI timer. This matches the behavior of GTK UI where the
display updates are submitted at 60 FPS (assuming the underlying
mode is WxY@60).
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Frediano Ziglio <freddy77@gmail.com>
Cc: Dongwon Kim <dongwon.kim@intel.com>
Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
---
ui/spice-display.c | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/ui/spice-display.c b/ui/spice-display.c
index 384b8508d4..90c04623ec 100644
--- a/ui/spice-display.c
+++ b/ui/spice-display.c
@@ -841,12 +841,31 @@ static void qemu_spice_gl_block_timer(void *opaque)
warn_report("spice: no gl-draw-done within one second");
}
+static void spice_gl_draw(SimpleSpiceDisplay *ssd,
+ uint32_t x, uint32_t y, uint32_t w, uint32_t h)
+{
+ uint64_t cookie;
+
+ cookie = (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE, 0);
+ spice_qxl_gl_draw_async(&ssd->qxl, x, y, w, h, cookie);
+}
+
static void spice_gl_refresh(DisplayChangeListener *dcl)
{
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
- uint64_t cookie;
+ QemuDmaBuf *dmabuf = ssd->guest_dmabuf;
- if (!ssd->ds || qemu_console_is_gl_blocked(ssd->dcl.con)) {
+ if (!ssd->ds) {
+ return;
+ }
+
+ if (qemu_console_is_gl_blocked(ssd->dcl.con)) {
+ if (remote_client && ssd->gl_updates && dmabuf) {
+ spice_gl_draw(ssd, 0, 0, dmabuf->width, dmabuf->height);
+ ssd->gl_updates = 0;
+ /* To stream at 60 FPS, the (GUI) timer delay needs to be ~17 ms */
+ dcl->update_interval = 1000 / (2 * GUI_REFRESH_INTERVAL_DEFAULT) + 1;
+ }
return;
}
@@ -854,11 +873,8 @@ static void spice_gl_refresh(DisplayChangeListener *dcl)
if (ssd->gl_updates && ssd->have_surface) {
qemu_spice_gl_block(ssd, true);
glFlush();
- cookie = (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE, 0);
- spice_qxl_gl_draw_async(&ssd->qxl, 0, 0,
- surface_width(ssd->ds),
- surface_height(ssd->ds),
- cookie);
+ spice_gl_draw(ssd, 0, 0,
+ surface_width(ssd->ds), surface_height(ssd->ds));
ssd->gl_updates = 0;
}
}
@@ -1025,7 +1041,6 @@ static void qemu_spice_gl_update(DisplayChangeListener *dcl,
EGLint stride = 0, fourcc = 0;
bool render_cursor = false;
bool y_0_top = false; /* FIXME */
- uint64_t cookie;
int fd;
if (!ssd->have_scanout) {
@@ -1098,8 +1113,11 @@ static void qemu_spice_gl_update(DisplayChangeListener *dcl,
trace_qemu_spice_gl_update(ssd->qxl.id, w, h, x, y);
qemu_spice_gl_block(ssd, true);
glFlush();
- cookie = (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE, 0);
- spice_qxl_gl_draw_async(&ssd->qxl, x, y, w, h, cookie);
+ if (remote_client) {
+ ssd->gl_updates++;
+ } else {
+ spice_gl_draw(ssd, x, y, w, h);
+ }
}
static const DisplayChangeListenerOps display_listener_gl_ops = {
--
2.39.2
next prev parent reply other threads:[~2024-01-20 0:55 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-20 0:30 [PATCH v1 0/7] ui/spice: Enable gl=on option for non-local or remote clients Vivek Kasireddy
2024-01-20 0:30 ` [PATCH v1 1/7] ui/spice: Add an option for users to provide a preferred codec Vivek Kasireddy
2024-01-22 8:41 ` Marc-André Lureau
2024-01-26 7:41 ` Kasireddy, Vivek
2024-01-20 0:30 ` [PATCH v1 2/7] ui/spice: Enable gl=on option for non-local or remote clients Vivek Kasireddy
2024-01-22 8:40 ` Marc-André Lureau
2024-01-26 7:38 ` Kasireddy, Vivek
2024-01-20 0:30 ` Vivek Kasireddy [this message]
2024-01-22 8:40 ` [PATCH v1 3/7] ui/spice: Submit the gl_draw requests at 60 FPS for " Marc-André Lureau
2024-01-26 7:38 ` Kasireddy, Vivek
2024-01-20 0:30 ` [PATCH v1 4/7] ui/console-gl: Add an option to override a surface's glformat Vivek Kasireddy
2024-01-20 0:30 ` [PATCH v1 5/7] ui/spice: Override the surface's glformat when gl=on is enabled Vivek Kasireddy
2024-01-20 0:30 ` [PATCH v1 6/7] ui/console-gl: Add a helper to create a texture with linear memory layout Vivek Kasireddy
2024-01-20 0:30 ` [PATCH v1 7/7] ui/spice: Create another texture with linear layout when gl=on is enabled Vivek Kasireddy
2024-01-22 8:40 ` Marc-André Lureau
2024-01-26 7:36 ` Kasireddy, Vivek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240120003013.1829757-4-vivek.kasireddy@intel.com \
--to=vivek.kasireddy@intel.com \
--cc=dongwon.kim@intel.com \
--cc=freddy77@gmail.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).