[Spice-devel] [PATCH spice-server v2 11/12] Move image_compression field from RedWorker to DisplayChannel

Jonathon Jongsma jjongsma at redhat.com
Thu Mar 28 19:39:19 UTC 2019


Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


On Tue, 2019-03-26 at 19:10 +0000, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/display-channel-private.h |  1 +
>  server/display-channel.c         | 10 ++++++++--
>  server/display-channel.h         |  2 ++
>  server/red-worker.c              |  7 +++----
>  4 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/server/display-channel-private.h b/server/display-
> channel-private.h
> index 58179531..4cdae8dc 100644
> --- a/server/display-channel-private.h
> +++ b/server/display-channel-private.h
> @@ -87,6 +87,7 @@ struct DisplayChannelPrivate
>      MonitorsConfig *monitors_config;
>  
>      uint32_t renderer;
> +    SpiceImageCompression image_compression;
>      int enable_jpeg;
>      int enable_zlib_glz_wrap;
>  
> diff --git a/server/display-channel.c b/server/display-channel.c
> index c2129c71..7b833e4c 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -2273,6 +2273,7 @@ display_channel_init(DisplayChannel *self)
>      /* must be manually allocated here since
> g_type_class_add_private() only
>       * supports structs smaller than 64k */
>      self->priv = g_new0(DisplayChannelPrivate, 1);
> +    self->priv->image_compression =
> SPICE_IMAGE_COMPRESSION_AUTO_GLZ;
>      self->priv->pub = self;
>  
>      image_encoder_shared_init(&self->priv->encoder_shared_data);
> @@ -2611,10 +2612,9 @@ display_channel_connect(RedChannel *channel,
> RedClient *client,
>  
>      spice_debug("connect new client");
>  
> -    // FIXME not sure how safe is reading directly from reds
>      SpiceServer *reds = red_channel_get_server(channel);
>      dcc = dcc_new(display, client, stream, migration, caps,
> -                  spice_server_get_image_compression(reds),
> reds_get_jpeg_state(reds),
> +                  display->priv->image_compression,
> reds_get_jpeg_state(reds),
>                    reds_get_zlib_glz_state(reds));
>      if (!dcc) {
>          return;
> @@ -2656,3 +2656,9 @@ static void
> display_channel_migrate(RedChannelClient *rcc)
>      DisplayChannel *display =
> DISPLAY_CHANNEL(red_channel_client_get_channel(rcc));
>      red_migrate_display(display, rcc);
>  }
> +
> +void display_channel_set_image_compression(DisplayChannel *display,
> +                                           SpiceImageCompression
> image_compression)
> +{
> +    display->priv->image_compression = image_compression;
> +}
> diff --git a/server/display-channel.h b/server/display-channel.h
> index 8dfdf523..6af9e129 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -159,6 +159,8 @@ void
> display_channel_reset_image_cache(DisplayChannel *self);
>  void display_channel_debug_oom(DisplayChannel *display, const char
> *msg);
>  
>  void display_channel_update_qxl_running(DisplayChannel *display,
> bool running);
> +void display_channel_set_image_compression(DisplayChannel *display,
> +                                           SpiceImageCompression
> image_compression);
>  
>  G_END_DECLS
>  
> diff --git a/server/red-worker.c b/server/red-worker.c
> index 7382e24d..bc63fc34 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -76,8 +76,6 @@ struct RedWorker {
>  
>      RedMemSlotInfo mem_slots;
>  
> -    SpiceImageCompression image_compression;
> -
>      uint32_t process_display_generation;
>      RedStatNode stat;
>      RedStatCounter wakeup_counter;
> @@ -684,7 +682,7 @@ static void handle_dev_set_compression(void
> *opaque, void *payload)
>      RedWorker *worker = opaque;
>      SpiceImageCompression image_compression = msg-
> >image_compression;
>  
> -    worker->image_compression = image_compression;
> +    display_channel_set_image_compression(worker->display_channel,
> image_compression);
>  
>      display_channel_compress_stats_print(worker->display_channel);
>      display_channel_compress_stats_reset(worker->display_channel);
> @@ -1078,7 +1076,6 @@ RedWorker* red_worker_new(QXLInstance *qxl)
>          dispatcher_register_universal_handler(dispatcher,
> worker_dispatcher_record);
>      }
>  
> -    worker->image_compression =
> spice_server_get_image_compression(reds);
>      worker->driver_cap_monitors_config = 0;
>      char worker_str[SPICE_STAT_NODE_NAME_MAX];
>      snprintf(worker_str, sizeof(worker_str), "display[%d]", worker-
> >qxl->id & 0xff);
> @@ -1120,6 +1117,8 @@ RedWorker* red_worker_new(QXLInstance *qxl)
>                                                    init_info.n_surfac
> es);
>      channel = RED_CHANNEL(worker->display_channel);
>      red_channel_init_stat_node(channel, &worker->stat,
> "display_channel");
> +    display_channel_set_image_compression(worker->display_channel,
> +                                          spice_server_get_image_com
> pression(reds));
>  
>      return worker;
>  }



More information about the Spice-devel mailing list