[Spice-devel] [PATCH spice-gtk 2/3] Drop frames if the backlog is above some limit
Marc-André Lureau
marcandre.lureau at redhat.com
Thu Jul 13 15:03:26 UTC 2017
----- Original Message -----
> From: Christophe de Dinechin <dinechin at redhat.com>
>
> Experience has shown that if the machine running the guest is overloaded,
> it may pile up a lot of backlog in the frames queue. This patch clears
> the queue if it exceeds 100 entries. This value is arbitrary. It
> corresponds to a few seconds on a highly overloaded machine.
>
> Signed-off-by: Christophe de Dinechin <dinechin at redhat.com>
> ---
> src/channel-display-gst.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index 3cf451b..17c2847 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -498,6 +498,9 @@ static void spice_gst_decoder_destroy(VideoDecoder
> *video_decoder)
> * 9) display_frame() then frees the SpiceGstFrame, which frees the
> SpiceFrame
> * and decompressed frame with it.
> */
> +
> +SPICE_TWEAK_DEFINE(gst_queue_max_length, 100, "Max length of GStreamer
> queue");
> +
> static gboolean spice_gst_decoder_queue_frame(VideoDecoder *video_decoder,
> SpiceFrame *frame, int
> latency)
> {
> @@ -541,6 +544,16 @@ static gboolean
> spice_gst_decoder_queue_frame(VideoDecoder *video_decoder,
> }
> #endif
>
> + if (SPICE_TWEAK(gst_queue_max_length) &&
> + decoder->decoding_queue->length > SPICE_TWEAK(gst_queue_max_length))
> {
> + SpiceGstFrame *gstframe;
> + g_mutex_lock(&decoder->queues_mutex);
> + while ((gstframe = g_queue_pop_head(decoder->decoding_queue)))
> + free_gst_frame(gstframe);
> + g_mutex_unlock(&decoder->queues_mutex);
> + return TRUE;
> + }
> +
I am surprised that GStreamer queues are not smart enough to deal with this kind of situation. Oh wait, why is the queue in spice-gtk side? Perhaps Francois can comment on this?
> /* ref() the frame data for the buffer */
> frame->ref_data(frame->data_opaque);
> GstBuffer *buffer =
> gst_buffer_new_wrapped_full(GST_MEMORY_FLAG_PHYSICALLY_CONTIGUOUS,
> --
> 2.11.0 (Apple Git-81)
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list