diff options
| author | Vivek Kasireddy <vivek.kasireddy@intel.com> | 2025-06-16 21:32:28 -0700 |
|---|---|---|
| committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2025-07-15 10:22:33 +0400 |
| commit | 50d135e3779f276eba93c63dff49a940b85e23a5 (patch) | |
| tree | be4dea9d9e8b97923759eb055d81b114117b8113 /ui/spice-core.c | |
| parent | bd46161dd1bef1da9402fa10aa6e8f38b4dfe1d3 (diff) | |
| download | focaccia-qemu-50d135e3779f276eba93c63dff49a940b85e23a5.tar.gz focaccia-qemu-50d135e3779f276eba93c63dff49a940b85e23a5.zip | |
ui/spice: Add an option to submit gl_draw requests at fixed rate
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 (refresh rate) to a fixed value using the GUI refresh timer. Otherwise, the updates or gl_draw requests would be sent as soon as the Guest submits a new frame which is not optimal as it would lead to increased network traffic and wastage of GPU cycles if the frames get dropped. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com> Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Cc: Michael Scherle <michael.scherle@rz.uni-freiburg.de> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Message-Id: <20250617043546.1022779-5-vivek.kasireddy@intel.com>
Diffstat (limited to 'ui/spice-core.c')
| -rw-r--r-- | ui/spice-core.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/ui/spice-core.c b/ui/spice-core.c index 51bdcef1af..5992f9daec 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -56,6 +56,8 @@ struct SpiceTimer { QEMUTimer *timer; }; +#define DEFAULT_MAX_REFRESH_RATE 30 + static SpiceTimer *timer_add(SpiceTimerFunc func, void *opaque) { SpiceTimer *timer; @@ -492,6 +494,9 @@ static QemuOptsList qemu_spice_opts = { .name = "video-codec", .type = QEMU_OPT_STRING, },{ + .name = "max-refresh-rate", + .type = QEMU_OPT_NUMBER, + },{ .name = "agent-mouse", .type = QEMU_OPT_BOOL, },{ @@ -804,6 +809,13 @@ static void qemu_spice_init(void) spice_server_set_streaming_video(spice_server, SPICE_STREAM_VIDEO_OFF); } + spice_max_refresh_rate = qemu_opt_get_number(opts, "max-refresh-rate", + DEFAULT_MAX_REFRESH_RATE); + if (spice_max_refresh_rate <= 0) { + error_report("max refresh rate/fps is invalid"); + exit(1); + } + spice_server_set_agent_mouse (spice_server, qemu_opt_get_bool(opts, "agent-mouse", 1)); spice_server_set_playback_compression |