[Spice-devel] [PATCH 09/10] Add DisplayChannelClientPrivate and CursorChannelPrivate structs

Victor Toso lists at victortoso.com
Thu Sep 1 11:13:07 UTC 2016


Hi,

On Wed, Aug 31, 2016 at 11:54:45AM -0500, Jonathon Jongsma wrote:
> These need to be introduced at the same time since cache-item.tmpl.c
> assumes that both of these classes will have a cache in the same place:
> either within the channel client struct itself or (now) within a priv
> struct owned by the channel client.
> 
> This encapsulates private data and prepares for porting to GObject.
> ---
>  server/cache-item.tmpl.c       |  38 +++++-----
>  server/cursor-channel-client.c |  14 +++-
>  server/dcc-private.h           |  10 ++-
>  server/dcc-send.c              | 114 ++++++++++++++--------------
>  server/dcc.c                   | 166 +++++++++++++++++++++--------------------
>  5 files changed, 181 insertions(+), 161 deletions(-)
> 
> diff --git a/server/cache-item.tmpl.c b/server/cache-item.tmpl.c
> index d1310a5..ce38a2a 100644
> --- a/server/cache-item.tmpl.c
> +++ b/server/cache-item.tmpl.c
> @@ -46,12 +46,12 @@
>  
>  static RedCacheItem *FUNC_NAME(find)(CHANNELCLIENT *channel_client, uint64_t id)
>  {
> -    RedCacheItem *item = channel_client->CACHE_NAME[CACHE_HASH_KEY(id)];
> +    RedCacheItem *item = channel_client->priv->CACHE_NAME[CACHE_HASH_KEY(id)];
>  
>      while (item) {
>          if (item->id == id) {
>              ring_remove(&item->u.cache_data.lru_link);
> -            ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
> +            ring_add(&channel_client->priv->VAR_NAME(lru), &item->u.cache_data.lru_link);
>              break;
>          }
>          item = item->u.cache_data.next;
> @@ -64,7 +64,7 @@ static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, RedCacheItem *item)
>      RedCacheItem **now;
>      spice_assert(item);
>  
> -    now = &channel_client->CACHE_NAME[CACHE_HASH_KEY(item->id)];
> +    now = &channel_client->priv->CACHE_NAME[CACHE_HASH_KEY(item->id)];
>      for (;;) {
>          spice_assert(*now);
>          if (*now == item) {
> @@ -74,8 +74,8 @@ static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, RedCacheItem *item)
>          now = &(*now)->u.cache_data.next;
>      }
>      ring_remove(&item->u.cache_data.lru_link);
> -    channel_client->VAR_NAME(items)--;
> -    channel_client->VAR_NAME(available) += item->u.cache_data.size;
> +    channel_client->priv->VAR_NAME(items)--;
> +    channel_client->priv->VAR_NAME(available) += item->u.cache_data.size;
>  
>      red_pipe_item_init(&item->u.pipe_data, RED_PIPE_ITEM_TYPE_INVAL_ONE);
>      red_channel_client_pipe_add_tail_and_push(&channel_client->base, &item->u.pipe_data); // for now
> @@ -88,22 +88,22 @@ static int FUNC_NAME(add)(CHANNELCLIENT *channel_client, uint64_t id, size_t siz
>  
>      item = spice_new(RedCacheItem, 1);
>  
> -    channel_client->VAR_NAME(available) -= size;
> +    channel_client->priv->VAR_NAME(available) -= size;
>      verify(SPICE_OFFSETOF(RedCacheItem, u.cache_data.lru_link) == 0);
> -    while (channel_client->VAR_NAME(available) < 0) {
> -        RedCacheItem *tail = (RedCacheItem *)ring_get_tail(&channel_client->VAR_NAME(lru));
> +    while (channel_client->priv->VAR_NAME(available) < 0) {
> +        RedCacheItem *tail = (RedCacheItem *)ring_get_tail(&channel_client->priv->VAR_NAME(lru));
>          if (!tail) {
> -            channel_client->VAR_NAME(available) += size;
> +            channel_client->priv->VAR_NAME(available) += size;
>              free(item);
>              return FALSE;
>          }
>          FUNC_NAME(remove)(channel_client, tail);
>      }
> -    ++channel_client->VAR_NAME(items);
> -    item->u.cache_data.next = channel_client->CACHE_NAME[(key = CACHE_HASH_KEY(id))];
> -    channel_client->CACHE_NAME[key] = item;
> +    ++channel_client->priv->VAR_NAME(items);
> +    item->u.cache_data.next = channel_client->priv->CACHE_NAME[(key = CACHE_HASH_KEY(id))];
> +    channel_client->priv->CACHE_NAME[key] = item;
>      ring_item_init(&item->u.cache_data.lru_link);
> -    ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
> +    ring_add(&channel_client->priv->VAR_NAME(lru), &item->u.cache_data.lru_link);
>      item->id = id;
>      item->u.cache_data.size = size;
>      return TRUE;
> @@ -114,15 +114,15 @@ static void FUNC_NAME(reset)(CHANNELCLIENT *channel_client, long size)
>      int i;
>  
>      for (i = 0; i < CACHE_HASH_SIZE; i++) {
> -        while (channel_client->CACHE_NAME[i]) {
> -            RedCacheItem *item = channel_client->CACHE_NAME[i];
> -            channel_client->CACHE_NAME[i] = item->u.cache_data.next;
> +        while (channel_client->priv->CACHE_NAME[i]) {
> +            RedCacheItem *item = channel_client->priv->CACHE_NAME[i];
> +            channel_client->priv->CACHE_NAME[i] = item->u.cache_data.next;
>              free(item);
>          }
>      }
> -    ring_init(&channel_client->VAR_NAME(lru));
> -    channel_client->VAR_NAME(available) = size;
> -    channel_client->VAR_NAME(items) = 0;
> +    ring_init(&channel_client->priv->VAR_NAME(lru));
> +    channel_client->priv->VAR_NAME(available) = size;
> +    channel_client->priv->VAR_NAME(items) = 0;
>  }
>  
>  
> diff --git a/server/cursor-channel-client.c b/server/cursor-channel-client.c
> index 8c26d43..dceb2d0 100644
> --- a/server/cursor-channel-client.c
> +++ b/server/cursor-channel-client.c
> @@ -39,9 +39,16 @@ enum {
>      RED_PIPE_ITEM_TYPE_INVAL_CURSOR_CACHE,
>  };
>  
> -struct CursorChannelClient {
> +typedef struct CursorChannelClientPrivate CursorChannelClientPrivate;
> +struct CursorChannelClient
> +{
>      RedChannelClient base;
>  
> +    CursorChannelClientPrivate *priv;
> +};
> +
> +struct CursorChannelClientPrivate
> +{
>      RedCacheItem *cursor_cache[CURSOR_CACHE_HASH_SIZE];
>      Ring cursor_cache_lru;
>      long cursor_cache_available;
> @@ -99,10 +106,11 @@ CursorChannelClient* cursor_channel_client_new(CursorChannel *cursor, RedClient
>                                                          num_caps,
>                                                          caps);
>      spice_return_val_if_fail(ccc != NULL, NULL);
> +    ccc->priv = g_new0(CursorChannelClientPrivate, 1);
>      COMMON_GRAPHICS_CHANNEL(cursor)->during_target_migrate = mig_target;
>  
> -    ring_init(&ccc->cursor_cache_lru);
> -    ccc->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE;
> +    ring_init(&ccc->priv->cursor_cache_lru);
> +    ccc->priv->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE;
>  
>      return ccc;
>  }
> diff --git a/server/dcc-private.h b/server/dcc-private.h
> index d5aad3f..1c8fe9a 100644
> --- a/server/dcc-private.h
> +++ b/server/dcc-private.h
> @@ -24,9 +24,17 @@
>  #include "stream.h"
>  #include "red-channel-client.h"
>  
> -struct DisplayChannelClient {
> +typedef struct DisplayChannelClientPrivate DisplayChannelClientPrivate;
> +struct DisplayChannelClient
> +{
>      RedChannelClient base;
>      int is_low_bandwidth;

Shouldn't it be on priv too?

  toso

> +
> +    DisplayChannelClientPrivate *priv;
> +};
> +
> +struct DisplayChannelClientPrivate
> +{
>      uint32_t id;
>      SpiceImageCompression image_compression;
>      spice_wan_compression_t jpeg_state;
> diff --git a/server/dcc-send.c b/server/dcc-send.c
> index 032fb0f..d6b9b41 100644
> --- a/server/dcc-send.c
> +++ b/server/dcc-send.c
> @@ -51,7 +51,7 @@ typedef struct BitmapData {
>  
>  static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id, int *lossy)
>  {
> -    PixmapCache *cache = dcc->pixmap_cache;
> +    PixmapCache *cache = dcc->priv->pixmap_cache;
>      NewCacheItem *item;
>      uint64_t serial;
>  
> @@ -62,9 +62,9 @@ static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id,
>          if (item->id == id) {
>              ring_remove(&item->lru_link);
>              ring_add(&cache->lru, &item->lru_link);
> -            spice_assert(dcc->id < MAX_CACHE_CLIENTS);
> -            item->sync[dcc->id] = serial;
> -            cache->sync[dcc->id] = serial;
> +            spice_assert(dcc->priv->id < MAX_CACHE_CLIENTS);
> +            item->sync[dcc->priv->id] = serial;
> +            cache->sync[dcc->priv->id] = serial;
>              *lossy = item->lossy;
>              break;
>          }
> @@ -77,7 +77,7 @@ static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id,
>  static int dcc_pixmap_cache_hit(DisplayChannelClient *dcc, uint64_t id, int *lossy)
>  {
>      int hit;
> -    PixmapCache *cache = dcc->pixmap_cache;
> +    PixmapCache *cache = dcc->priv->pixmap_cache;
>  
>      pthread_mutex_lock(&cache->lock);
>      hit = dcc_pixmap_cache_unlocked_hit(dcc, id, lossy);
> @@ -97,7 +97,7 @@ static int is_surface_area_lossy(DisplayChannelClient *dcc, uint32_t surface_id,
>      spice_return_val_if_fail(validate_surface(display, surface_id), FALSE);
>  
>      surface = &display->surfaces[surface_id];
> -    surface_lossy_region = &dcc->surface_client_lossy_region[surface_id];
> +    surface_lossy_region = &dcc->priv->surface_client_lossy_region[surface_id];
>  
>      if (!area) {
>          if (region_is_empty(surface_lossy_region)) {
> @@ -207,7 +207,7 @@ static void red_display_add_image_to_pixmap_cache(RedChannelClient *rcc,
>                                                image->descriptor.width * image->descriptor.height,
>                                                is_lossy)) {
>                  io_image->descriptor.flags |= SPICE_IMAGE_FLAGS_CACHE_ME;
> -                dcc->send_data.pixmap_cache_items[dcc->send_data.num_pixmap_cache_items++] =
> +                dcc->priv->send_data.pixmap_cache_items[dcc->priv->send_data.num_pixmap_cache_items++] =
>                                                                                 image->descriptor.id;
>                  stat_inc_counter(reds, display_channel->add_to_cache_counter, 1);
>              }
> @@ -243,7 +243,7 @@ static void marshal_sub_msg_inval_list_wait(SpiceMarshaller *m,
>  static void send_free_list_legacy(RedChannelClient *rcc)
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> -    FreeList *free_list = &dcc->send_data.free_list;
> +    FreeList *free_list = &dcc->priv->send_data.free_list;
>      SpiceMarshaller *marshaller;
>      int sub_list_len = 1;
>      SpiceMarshaller *wait_m = NULL;
> @@ -274,7 +274,7 @@ static void send_free_list_legacy(RedChannelClient *rcc)
>  static void send_free_list(RedChannelClient *rcc)
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> -    FreeList *free_list = &dcc->send_data.free_list;
> +    FreeList *free_list = &dcc->priv->send_data.free_list;
>      int sub_list_len = 1;
>      SpiceMarshaller *urgent_marshaller;
>      SpiceMarshaller *wait_m = NULL;
> @@ -285,14 +285,14 @@ static void send_free_list(RedChannelClient *rcc)
>      int i;
>  
>      urgent_marshaller = red_channel_client_switch_to_urgent_sender(rcc);
> -    for (i = 0; i < dcc->send_data.num_pixmap_cache_items; i++) {
> +    for (i = 0; i < dcc->priv->send_data.num_pixmap_cache_items; i++) {
>          int dummy;
>          /* When using the urgent marshaller, the serial number of the message that is
>           * going to be sent right after the SPICE_MSG_LIST, is increased by one.
>           * But all this message pixmaps cache references used its old serial.
>           * we use pixmap_cache_items to collect these pixmaps, and we update their serial
>           * by calling pixmap_cache_hit. */
> -        dcc_pixmap_cache_hit(dcc, dcc->send_data.pixmap_cache_items[i], &dummy);
> +        dcc_pixmap_cache_hit(dcc, dcc->priv->send_data.pixmap_cache_items[i], &dummy);
>      }
>  
>      if (free_list->wait.header.wait_count) {
> @@ -378,13 +378,13 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>      if (simage->descriptor.flags & SPICE_IMAGE_FLAGS_HIGH_BITS_SET) {
>          image.descriptor.flags = SPICE_IMAGE_FLAGS_HIGH_BITS_SET;
>      }
> -    pthread_mutex_lock(&dcc->pixmap_cache->lock);
> +    pthread_mutex_lock(&dcc->priv->pixmap_cache->lock);
>  
>      if ((simage->descriptor.flags & SPICE_IMAGE_FLAGS_CACHE_ME)) {
>          int lossy_cache_item;
>          if (dcc_pixmap_cache_unlocked_hit(dcc, image.descriptor.id, &lossy_cache_item)) {
> -            dcc->send_data.pixmap_cache_items[dcc->send_data.num_pixmap_cache_items++] =
> -                                                                               image.descriptor.id;
> +            dcc->priv->send_data.pixmap_cache_items[dcc->priv->send_data.num_pixmap_cache_items++] =
> +                image.descriptor.id;
>              if (can_lossy || !lossy_cache_item) {
>                  if (!display->enable_jpeg || lossy_cache_item) {
>                      image.descriptor.type = SPICE_IMAGE_TYPE_FROM_CACHE;
> @@ -399,10 +399,10 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>                  spice_assert(bitmap_palette_out == NULL);
>                  spice_assert(lzplt_palette_out == NULL);
>                  stat_inc_counter(reds, display->cache_hits_counter, 1);
> -                pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +                pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>                  return FILL_BITS_TYPE_CACHE;
>              } else {
> -                pixmap_cache_unlocked_set_lossy(dcc->pixmap_cache, simage->descriptor.id,
> +                pixmap_cache_unlocked_set_lossy(dcc->priv->pixmap_cache, simage->descriptor.id,
>                                                  FALSE);
>                  image.descriptor.flags |= SPICE_IMAGE_FLAGS_CACHE_REPLACE_ME;
>              }
> @@ -417,7 +417,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>          surface_id = simage->u.surface.surface_id;
>          if (!validate_surface(display, surface_id)) {
>              spice_warning("Invalid surface in SPICE_IMAGE_TYPE_SURFACE");
> -            pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +            pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>              return FILL_BITS_TYPE_SURFACE;
>          }
>  
> @@ -432,7 +432,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>                               &bitmap_palette_out, &lzplt_palette_out);
>          spice_assert(bitmap_palette_out == NULL);
>          spice_assert(lzplt_palette_out == NULL);
> -        pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +        pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>          return FILL_BITS_TYPE_SURFACE;
>      }
>      case SPICE_IMAGE_TYPE_BITMAP: {
> @@ -464,7 +464,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>              }
>  
>              spice_marshaller_add_ref_chunks(m, bitmap->data);
> -            pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +            pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>              return FILL_BITS_TYPE_BITMAP;
>          } else {
>              red_display_add_image_to_pixmap_cache(rcc, simage, &image,
> @@ -482,7 +482,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>              }
>  
>              spice_assert(!comp_send_data.is_lossy || can_lossy);
> -            pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +            pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>              return (comp_send_data.is_lossy ? FILL_BITS_TYPE_COMPRESS_LOSSY :
>                                                FILL_BITS_TYPE_COMPRESS_LOSSLESS);
>          }
> @@ -496,12 +496,12 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
>          spice_assert(bitmap_palette_out == NULL);
>          spice_assert(lzplt_palette_out == NULL);
>          spice_marshaller_add_ref_chunks(m, image.u.quic.data);
> -        pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +        pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>          return FILL_BITS_TYPE_COMPRESS_LOSSLESS;
>      default:
>          spice_error("invalid image type %u", image.descriptor.type);
>      }
> -    pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +    pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>      return FILL_BITS_TYPE_INVALID;
>  }
>  
> @@ -511,12 +511,12 @@ static void fill_mask(RedChannelClient *rcc, SpiceMarshaller *m,
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
>  
>      if (mask_bitmap && m) {
> -        if (dcc->image_compression != SPICE_IMAGE_COMPRESSION_OFF) {
> +        if (dcc->priv->image_compression != SPICE_IMAGE_COMPRESSION_OFF) {
>              /* todo: pass compression argument */
> -            SpiceImageCompression save_img_comp = dcc->image_compression;
> -            dcc->image_compression = SPICE_IMAGE_COMPRESSION_OFF;
> +            SpiceImageCompression save_img_comp = dcc->priv->image_compression;
> +            dcc->priv->image_compression = SPICE_IMAGE_COMPRESSION_OFF;
>              fill_bits(dcc, m, mask_bitmap, drawable, FALSE);
> -            dcc->image_compression = save_img_comp;
> +            dcc->priv->image_compression = save_img_comp;
>          } else {
>              fill_bits(dcc, m, mask_bitmap, drawable, FALSE);
>          }
> @@ -570,7 +570,7 @@ static void surface_lossy_region_update(DisplayChannelClient *dcc,
>          return;
>      }
>  
> -    surface_lossy_region = &dcc->surface_client_lossy_region[item->surface_id];
> +    surface_lossy_region = &dcc->priv->surface_client_lossy_region[item->surface_id];
>      drawable = item->red_drawable;
>  
>      if (drawable->clip.type == SPICE_CLIP_TYPE_RECTS ) {
> @@ -1707,10 +1707,10 @@ static int red_marshall_stream_data(RedChannelClient *rcc,
>          return FALSE;
>      }
>  
> -    StreamAgent *agent = &dcc->stream_agents[get_stream_id(display, stream)];
> +    StreamAgent *agent = &dcc->priv->stream_agents[get_stream_id(display, stream)];
>      uint64_t time_now = spice_get_monotonic_time_ns();
>  
> -    if (!dcc->use_video_encoder_rate_control) {
> +    if (!dcc->priv->use_video_encoder_rate_control) {
>          if (time_now - agent->last_send_time < (1000 * 1000 * 1000) / agent->fps) {
>              agent->frames--;
>  #ifdef STREAM_STATS
> @@ -1734,7 +1734,7 @@ static int red_marshall_stream_data(RedChannelClient *rcc,
>                                               &outbuf);
>      switch (ret) {
>      case VIDEO_ENCODER_FRAME_DROP:
> -        spice_assert(dcc->use_video_encoder_rate_control);
> +        spice_assert(dcc->priv->use_video_encoder_rate_control);
>  #ifdef STREAM_STATS
>          agent->stats.num_drops_fps++;
>  #endif
> @@ -1812,7 +1812,7 @@ static void display_channel_marshall_migrate_data_surfaces(DisplayChannelClient
>      for (i = 0; i < NUM_SURFACES; i++) {
>          SpiceRect lossy_rect;
>  
> -        if (!dcc->surface_client_created[i]) {
> +        if (!dcc->priv->surface_client_created[i]) {
>              continue;
>          }
>          spice_marshaller_add_uint32(m2, i);
> @@ -1821,7 +1821,7 @@ static void display_channel_marshall_migrate_data_surfaces(DisplayChannelClient
>          if (!lossy) {
>              continue;
>          }
> -        region_extents(&dcc->surface_client_lossy_region[i], &lossy_rect);
> +        region_extents(&dcc->priv->surface_client_lossy_region[i], &lossy_rect);
>          spice_marshaller_add_int32(m2, lossy_rect.left);
>          spice_marshaller_add_int32(m2, lossy_rect.top);
>          spice_marshaller_add_int32(m2, lossy_rect.right);
> @@ -1834,6 +1834,7 @@ static void display_channel_marshall_migrate_data(RedChannelClient *rcc,
>  {
>      DisplayChannel *display_channel;
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> +    ImageEncoders *encoders = dcc_get_encoders(dcc);
>      SpiceMigrateDataDisplay display_data = {0,};
>  
>      display_channel = DCC_TO_DC(dcc);
> @@ -1842,20 +1843,20 @@ static void display_channel_marshall_migrate_data(RedChannelClient *rcc,
>      spice_marshaller_add_uint32(base_marshaller, SPICE_MIGRATE_DATA_DISPLAY_MAGIC);
>      spice_marshaller_add_uint32(base_marshaller, SPICE_MIGRATE_DATA_DISPLAY_VERSION);
>  
> -    spice_assert(dcc->pixmap_cache);
> +    spice_assert(dcc->priv->pixmap_cache);
>      spice_assert(MIGRATE_DATA_DISPLAY_MAX_CACHE_CLIENTS == 4 &&
>                   MIGRATE_DATA_DISPLAY_MAX_CACHE_CLIENTS == MAX_CACHE_CLIENTS);
>  
>      display_data.message_serial = red_channel_client_get_message_serial(rcc);
> -    display_data.low_bandwidth_setting = dcc->is_low_bandwidth;
> +    display_data.low_bandwidth_setting = dcc_is_low_bandwidth(dcc);
>  
> -    display_data.pixmap_cache_freezer = pixmap_cache_freeze(dcc->pixmap_cache);
> -    display_data.pixmap_cache_id = dcc->pixmap_cache->id;
> -    display_data.pixmap_cache_size = dcc->pixmap_cache->size;
> -    memcpy(display_data.pixmap_cache_clients, dcc->pixmap_cache->sync,
> +    display_data.pixmap_cache_freezer = pixmap_cache_freeze(dcc->priv->pixmap_cache);
> +    display_data.pixmap_cache_id = dcc->priv->pixmap_cache->id;
> +    display_data.pixmap_cache_size = dcc->priv->pixmap_cache->size;
> +    memcpy(display_data.pixmap_cache_clients, dcc->priv->pixmap_cache->sync,
>             sizeof(display_data.pixmap_cache_clients));
>  
> -    image_encoders_glz_get_restore_data(&dcc->encoders, &display_data.glz_dict_id,
> +    image_encoders_glz_get_restore_data(encoders, &display_data.glz_dict_id,
>                                          &display_data.glz_dict_data);
>  
>      /* all data besided the surfaces ref */
> @@ -1873,7 +1874,7 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
>      PixmapCache *pixmap_cache;
>  
>      red_channel_client_init_send_data(rcc, SPICE_MSG_WAIT_FOR_CHANNELS, NULL);
> -    pixmap_cache = dcc->pixmap_cache;
> +    pixmap_cache = dcc->priv->pixmap_cache;
>  
>      pthread_mutex_lock(&pixmap_cache->lock);
>  
> @@ -1881,8 +1882,8 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
>      wait.wait_list[0].channel_type = SPICE_CHANNEL_DISPLAY;
>      wait.wait_list[0].channel_id = pixmap_cache->generation_initiator.client;
>      wait.wait_list[0].message_serial = pixmap_cache->generation_initiator.message;
> -    dcc->pixmap_cache_generation = pixmap_cache->generation;
> -    dcc->pending_pixmaps_sync = FALSE;
> +    dcc->priv->pixmap_cache_generation = pixmap_cache->generation;
> +    dcc->priv->pending_pixmaps_sync = FALSE;
>  
>      pthread_mutex_unlock(&pixmap_cache->lock);
>  
> @@ -1891,7 +1892,7 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
>  
>  static void dcc_pixmap_cache_reset(DisplayChannelClient *dcc, SpiceMsgWaitForChannels* sync_data)
>  {
> -    PixmapCache *cache = dcc->pixmap_cache;
> +    PixmapCache *cache = dcc->priv->pixmap_cache;
>      uint8_t wait_count;
>      uint64_t serial;
>      uint32_t i;
> @@ -1900,14 +1901,14 @@ static void dcc_pixmap_cache_reset(DisplayChannelClient *dcc, SpiceMsgWaitForCha
>      pthread_mutex_lock(&cache->lock);
>      pixmap_cache_clear(cache);
>  
> -    dcc->pixmap_cache_generation = ++cache->generation;
> -    cache->generation_initiator.client = dcc->id;
> +    dcc->priv->pixmap_cache_generation = ++cache->generation;
> +    cache->generation_initiator.client = dcc->priv->id;
>      cache->generation_initiator.message = serial;
> -    cache->sync[dcc->id] = serial;
> +    cache->sync[dcc->priv->id] = serial;
>  
>      wait_count = 0;
>      for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
> -        if (cache->sync[i] && i != dcc->id) {
> +        if (cache->sync[i] && i != dcc->priv->id) {
>              sync_data->wait_list[wait_count].channel_type = SPICE_CHANNEL_DISPLAY;
>              sync_data->wait_list[wait_count].channel_id = i;
>              sync_data->wait_list[wait_count++].message_serial = cache->sync[i];
> @@ -1994,7 +1995,7 @@ static void red_marshall_image(RedChannelClient *rcc,
>  
>      int comp_succeeded = dcc_compress_image(dcc, &red_image, &bitmap, NULL, item->can_lossy, &comp_send_data);
>  
> -    surface_lossy_region = &dcc->surface_client_lossy_region[item->surface_id];
> +    surface_lossy_region = &dcc->priv->surface_client_lossy_region[item->surface_id];
>      if (comp_succeeded) {
>          spice_marshall_Image(src_bitmap_out, &red_image,
>                               &bitmap_palette_out, &lzplt_palette_out);
> @@ -2261,7 +2262,7 @@ static void marshall_surface_create(RedChannelClient *rcc,
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
>  
> -    region_init(&dcc->surface_client_lossy_region[surface_create->surface_id]);
> +    region_init(&dcc->priv->surface_client_lossy_region[surface_create->surface_id]);
>      red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_SURFACE_CREATE, NULL);
>  
>      spice_marshall_msg_display_surface_create(base_marshaller, surface_create);
> @@ -2273,7 +2274,7 @@ static void marshall_surface_destroy(RedChannelClient *rcc,
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
>      SpiceMsgSurfaceDestroy surface_destroy;
>  
> -    region_destroy(&dcc->surface_client_lossy_region[surface_id]);
> +    region_destroy(&dcc->priv->surface_client_lossy_region[surface_id]);
>      red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_SURFACE_DESTROY, NULL);
>  
>      surface_destroy.surface_id = surface_id;
> @@ -2313,7 +2314,7 @@ static void marshall_stream_activate_report(RedChannelClient *rcc,
>                                              uint32_t stream_id)
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> -    StreamAgent *agent = &dcc->stream_agents[stream_id];
> +    StreamAgent *agent = &dcc->priv->stream_agents[stream_id];
>      SpiceMsgDisplayStreamActivateReport msg;
>  
>      red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT, NULL);
> @@ -2354,14 +2355,14 @@ static void marshall_gl_draw(RedChannelClient *rcc,
>  static void begin_send_message(RedChannelClient *rcc)
>  {
>      DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> -    FreeList *free_list = &dcc->send_data.free_list;
> +    FreeList *free_list = &dcc->priv->send_data.free_list;
>  
>      if (free_list->res->count) {
>          int sync_count = 0;
>          int i;
>  
>          for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
> -            if (i != dcc->id && free_list->sync[i] != 0) {
> +            if (i != dcc->priv->id && free_list->sync[i] != 0) {
>                  free_list->wait.header.wait_list[sync_count].channel_type = SPICE_CHANNEL_DISPLAY;
>                  free_list->wait.header.wait_list[sync_count].channel_id = i;
>                  free_list->wait.header.wait_list[sync_count++].message_serial = free_list->sync[i];
> @@ -2380,9 +2381,10 @@ static void begin_send_message(RedChannelClient *rcc)
>  
>  static void reset_send_data(DisplayChannelClient *dcc)
>  {
> -    dcc->send_data.free_list.res->count = 0;
> -    dcc->send_data.num_pixmap_cache_items = 0;
> -    memset(dcc->send_data.free_list.sync, 0, sizeof(dcc->send_data.free_list.sync));
> +    dcc->priv->send_data.free_list.res->count = 0;
> +    dcc->priv->send_data.num_pixmap_cache_items = 0;
> +    memset(dcc->priv->send_data.free_list.sync, 0,
> +           sizeof(dcc->priv->send_data.free_list.sync));
>  }
>  
>  void dcc_send_item(RedChannelClient *rcc, RedPipeItem *pipe_item)
> diff --git a/server/dcc.c b/server/dcc.c
> index 87ef145..9972d75 100644
> --- a/server/dcc.c
> +++ b/server/dcc.c
> @@ -154,7 +154,7 @@ void dcc_create_surface(DisplayChannelClient *dcc, int surface_id)
>  
>      /* don't send redundant create surface commands to client */
>      if (!dcc || display->common.during_target_migrate ||
> -        dcc->surface_client_created[surface_id]) {
> +        dcc->priv->surface_client_created[surface_id]) {
>          return;
>      }
>      surface = &display->surfaces[surface_id];
> @@ -162,7 +162,7 @@ void dcc_create_surface(DisplayChannelClient *dcc, int surface_id)
>                                           surface_id, surface->context.width,
>                                           surface->context.height,
>                                           surface->context.format, flags);
> -    dcc->surface_client_created[surface_id] = TRUE;
> +    dcc->priv->surface_client_created[surface_id] = TRUE;
>      red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &create->pipe_item);
>  }
>  
> @@ -264,7 +264,7 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
>  
>          surface_id = drawable->surface_deps[x];
>          if (surface_id != -1) {
> -            if (dcc->surface_client_created[surface_id] == TRUE) {
> +            if (dcc->priv->surface_client_created[surface_id] == TRUE) {
>                  continue;
>              }
>              dcc_create_surface(dcc, surface_id);
> @@ -273,7 +273,7 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
>          }
>      }
>  
> -    if (dcc->surface_client_created[drawable->surface_id] == TRUE) {
> +    if (dcc->priv->surface_client_created[drawable->surface_id] == TRUE) {
>          return;
>      }
>  
> @@ -342,12 +342,12 @@ static void dcc_init_stream_agents(DisplayChannelClient *dcc)
>      DisplayChannel *display = DCC_TO_DC(dcc);
>  
>      for (i = 0; i < NUM_STREAMS; i++) {
> -        StreamAgent *agent = &dcc->stream_agents[i];
> +        StreamAgent *agent = &dcc->priv->stream_agents[i];
>          agent->stream = &display->streams_buf[i];
>          region_init(&agent->vis_region);
>          region_init(&agent->clip);
>      }
> -    dcc->use_video_encoder_rate_control =
> +    dcc->priv->use_video_encoder_rate_control =
>          red_channel_client_test_remote_cap(RED_CHANNEL_CLIENT(dcc), SPICE_DISPLAY_CAP_STREAM_REPORT);
>  }
>  
> @@ -371,27 +371,29 @@ DisplayChannelClient *dcc_new(DisplayChannel *display,
>          client, stream, TRUE,
>          num_common_caps, common_caps,
>          num_caps, caps);
> +    dcc->priv = g_new0(DisplayChannelClientPrivate, 1);
> +
>      display->common.during_target_migrate = mig_target;
> -    dcc->id = display->common.qxl->id;
> +    dcc->priv->id = display->common.qxl->id;
>      spice_return_val_if_fail(dcc, NULL);
>      spice_info("New display (client %p) dcc %p stream %p", client, dcc, stream);
>  
> -    ring_init(&dcc->palette_cache_lru);
> -    dcc->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
> -    dcc->image_compression = image_compression;
> -    dcc->jpeg_state = jpeg_state;
> -    dcc->zlib_glz_state = zlib_glz_state;
> +    ring_init(&dcc->priv->palette_cache_lru);
> +    dcc->priv->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
> +    dcc->priv->image_compression = image_compression;
> +    dcc->priv->jpeg_state = jpeg_state;
> +    dcc->priv->zlib_glz_state = zlib_glz_state;
>      // TODO: tune quality according to bandwidth
> -    dcc->encoders.jpeg_quality = 85;
> +    dcc->priv->encoders.jpeg_quality = 85;
>  
> -    dcc->send_data.free_list.res =
> +    dcc->priv->send_data.free_list.res =
>          spice_malloc(sizeof(SpiceResourceList) +
>                       DISPLAY_FREE_LIST_DEFAULT_SIZE * sizeof(SpiceResourceID));
> -    dcc->send_data.free_list.res_size = DISPLAY_FREE_LIST_DEFAULT_SIZE;
> +    dcc->priv->send_data.free_list.res_size = DISPLAY_FREE_LIST_DEFAULT_SIZE;
>  
>      dcc_init_stream_agents(dcc);
>  
> -    image_encoders_init(&dcc->encoders, &display->encoder_shared_data);
> +    image_encoders_init(&dcc->priv->encoders, &display->encoder_shared_data);
>  
>      return dcc;
>  }
> @@ -410,18 +412,18 @@ static void dcc_create_all_streams(DisplayChannelClient *dcc)
>  /* TODO: this function is evil^Wsynchronous, fix */
>  static int display_channel_client_wait_for_init(DisplayChannelClient *dcc)
>  {
> -    dcc->expect_init = TRUE;
> +    dcc->priv->expect_init = TRUE;
>      uint64_t end_time = spice_get_monotonic_time_ns() + COMMON_CLIENT_TIMEOUT;
>      for (;;) {
>          red_channel_client_receive(RED_CHANNEL_CLIENT(dcc));
>          if (!red_channel_client_is_connected(RED_CHANNEL_CLIENT(dcc))) {
>              break;
>          }
> -        if (dcc->pixmap_cache && dcc->encoders.glz_dict) {
> -            dcc->pixmap_cache_generation = dcc->pixmap_cache->generation;
> +        if (dcc->priv->pixmap_cache && dcc->priv->encoders.glz_dict) {
> +            dcc->priv->pixmap_cache_generation = dcc->priv->pixmap_cache->generation;
>              /* TODO: move common.id? if it's used for a per client structure.. */
> -            spice_info("creating encoder with id == %d", dcc->id);
> -            if (!image_encoders_glz_create(&dcc->encoders, dcc->id)) {
> +            spice_info("creating encoder with id == %d", dcc->priv->id);
> +            if (!image_encoders_glz_create(&dcc->priv->encoders, dcc->priv->id)) {
>                  spice_critical("create global lz failed");
>              }
>              return TRUE;
> @@ -472,7 +474,7 @@ static void dcc_destroy_stream_agents(DisplayChannelClient *dcc)
>      int i;
>  
>      for (i = 0; i < NUM_STREAMS; i++) {
> -        StreamAgent *agent = &dcc->stream_agents[i];
> +        StreamAgent *agent = &dcc->priv->stream_agents[i];
>          region_destroy(&agent->vis_region);
>          region_destroy(&agent->clip);
>          if (agent->video_encoder) {
> @@ -486,14 +488,14 @@ void dcc_stop(DisplayChannelClient *dcc)
>  {
>      DisplayChannel *dc = DCC_TO_DC(dcc);
>  
> -    pixmap_cache_unref(dcc->pixmap_cache);
> -    dcc->pixmap_cache = NULL;
> +    pixmap_cache_unref(dcc->priv->pixmap_cache);
> +    dcc->priv->pixmap_cache = NULL;
>      dcc_palette_cache_reset(dcc);
> -    free(dcc->send_data.free_list.res);
> +    free(dcc->priv->send_data.free_list.res);
>      dcc_destroy_stream_agents(dcc);
> -    image_encoders_free(&dcc->encoders);
> +    image_encoders_free(&dcc->priv->encoders);
>  
> -    if (dcc->gl_draw_ongoing) {
> +    if (dcc->priv->gl_draw_ongoing) {
>          display_channel_gl_draw_done(dc);
>      }
>  }
> @@ -599,7 +601,7 @@ RedPipeItem *dcc_gl_draw_item_new(RedChannelClient *rcc, void *data, int num)
>          return NULL;
>      }
>  
> -    dcc->gl_draw_ongoing = TRUE;
> +    dcc->priv->gl_draw_ongoing = TRUE;
>      item->draw = *draw;
>      red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_GL_DRAW);
>  
> @@ -620,11 +622,11 @@ void dcc_destroy_surface(DisplayChannelClient *dcc, uint32_t surface_id)
>      channel = RED_CHANNEL(display);
>  
>      if (COMMON_GRAPHICS_CHANNEL(display)->during_target_migrate ||
> -        !dcc->surface_client_created[surface_id]) {
> +        !dcc->priv->surface_client_created[surface_id]) {
>          return;
>      }
>  
> -    dcc->surface_client_created[surface_id] = FALSE;
> +    dcc->priv->surface_client_created[surface_id] = FALSE;
>      destroy = red_surface_destroy_item_new(channel, surface_id);
>      red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy->pipe_item);
>  }
> @@ -725,20 +727,20 @@ int dcc_compress_image(DisplayChannelClient *dcc,
>  
>      stat_start_time_init(&start_time, &display_channel->encoder_shared_data.off_stat);
>  
> -    image_compression = get_compression_for_bitmap(src, dcc->image_compression, drawable);
> +    image_compression = get_compression_for_bitmap(src, dcc->priv->image_compression, drawable);
>      switch (image_compression) {
>      case SPICE_IMAGE_COMPRESSION_OFF:
>          break;
>      case SPICE_IMAGE_COMPRESSION_QUIC:
>          if (can_lossy && display_channel->enable_jpeg &&
>              (src->format != SPICE_BITMAP_FMT_RGBA || !bitmap_has_extra_stride(src))) {
> -            success = image_encoders_compress_jpeg(&dcc->encoders, dest, src, o_comp_data);
> +            success = image_encoders_compress_jpeg(&dcc->priv->encoders, dest, src, o_comp_data);
>              break;
>          }
> -        success = image_encoders_compress_quic(&dcc->encoders, dest, src, o_comp_data);
> +        success = image_encoders_compress_quic(&dcc->priv->encoders, dest, src, o_comp_data);
>          break;
>      case SPICE_IMAGE_COMPRESSION_GLZ:
> -        success = image_encoders_compress_glz(&dcc->encoders, dest, src,
> +        success = image_encoders_compress_glz(&dcc->priv->encoders, dest, src,
>                                                drawable->red_drawable, &drawable->glz_retention,
>                                                o_comp_data,
>                                                display_channel->enable_zlib_glz_wrap);
> @@ -750,13 +752,13 @@ int dcc_compress_image(DisplayChannelClient *dcc,
>      case SPICE_IMAGE_COMPRESSION_LZ4:
>          if (red_channel_client_test_remote_cap(&dcc->base,
>                                                 SPICE_DISPLAY_CAP_LZ4_COMPRESSION)) {
> -            success = image_encoders_compress_lz4(&dcc->encoders, dest, src, o_comp_data);
> +            success = image_encoders_compress_lz4(&dcc->priv->encoders, dest, src, o_comp_data);
>              break;
>          }
>  #endif
>  lz_compress:
>      case SPICE_IMAGE_COMPRESSION_LZ:
> -        success = image_encoders_compress_lz(&dcc->encoders, dest, src, o_comp_data);
> +        success = image_encoders_compress_lz(&dcc->priv->encoders, dest, src, o_comp_data);
>          if (success && !bitmap_fmt_is_rgb(src->format)) {
>              dcc_palette_cache_palette(dcc, dest->u.lz_plt.palette, &(dest->u.lz_plt.flags));
>          }
> @@ -802,7 +804,7 @@ void dcc_palette_cache_reset(DisplayChannelClient *dcc)
>  static void dcc_push_release(DisplayChannelClient *dcc, uint8_t type, uint64_t id,
>                               uint64_t* sync_data)
>  {
> -    FreeList *free_list = &dcc->send_data.free_list;
> +    FreeList *free_list = &dcc->priv->send_data.free_list;
>      int i;
>  
>      for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
> @@ -827,7 +829,7 @@ static void dcc_push_release(DisplayChannelClient *dcc, uint8_t type, uint64_t i
>  int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
>                                    uint32_t size, int lossy)
>  {
> -    PixmapCache *cache = dcc->pixmap_cache;
> +    PixmapCache *cache = dcc->priv->pixmap_cache;
>      NewCacheItem *item;
>      uint64_t serial;
>      int key;
> @@ -837,11 +839,11 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
>      item = spice_new(NewCacheItem, 1);
>      serial = red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc));
>  
> -    if (cache->generation != dcc->pixmap_cache_generation) {
> -        if (!dcc->pending_pixmaps_sync) {
> +    if (cache->generation != dcc->priv->pixmap_cache_generation) {
> +        if (!dcc->priv->pending_pixmaps_sync) {
>              red_channel_client_pipe_add_type(
>                                               RED_CHANNEL_CLIENT(dcc), RED_PIPE_ITEM_TYPE_PIXMAP_SYNC);
> -            dcc->pending_pixmaps_sync = TRUE;
> +            dcc->priv->pending_pixmaps_sync = TRUE;
>          }
>          free(item);
>          return FALSE;
> @@ -854,7 +856,7 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
>  
>          verify(SPICE_OFFSETOF(NewCacheItem, lru_link) == 0);
>          if (!(tail = (NewCacheItem *)ring_get_tail(&cache->lru)) ||
> -                                                   tail->sync[dcc->id] == serial) {
> +                                                   tail->sync[dcc->priv->id] == serial) {
>              cache->available += size;
>              free(item);
>              return FALSE;
> @@ -872,7 +874,7 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
>          ring_remove(&tail->lru_link);
>          cache->items--;
>          cache->available += tail->size;
> -        cache->sync[dcc->id] = serial;
> +        cache->sync[dcc->priv->id] = serial;
>          dcc_push_release(dcc, SPICE_RES_TYPE_PIXMAP, tail->id, tail->sync);
>          free(tail);
>      }
> @@ -885,8 +887,8 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
>      item->size = size;
>      item->lossy = lossy;
>      memset(item->sync, 0, sizeof(item->sync));
> -    item->sync[dcc->id] = serial;
> -    cache->sync[dcc->id] = serial;
> +    item->sync[dcc->priv->id] = serial;
> +    cache->sync[dcc->priv->id] = serial;
>      return TRUE;
>  }
>  
> @@ -895,16 +897,16 @@ static int dcc_handle_init(DisplayChannelClient *dcc, SpiceMsgcDisplayInit *init
>      gboolean success;
>      RedClient *client = red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc));
>  
> -    spice_return_val_if_fail(dcc->expect_init, FALSE);
> -    dcc->expect_init = FALSE;
> +    spice_return_val_if_fail(dcc->priv->expect_init, FALSE);
> +    dcc->priv->expect_init = FALSE;
>  
> -    spice_return_val_if_fail(!dcc->pixmap_cache, FALSE);
> -    dcc->pixmap_cache = pixmap_cache_get(client,
> -                                         init->pixmap_cache_id,
> -                                         init->pixmap_cache_size);
> -    spice_return_val_if_fail(dcc->pixmap_cache, FALSE);
> +    spice_return_val_if_fail(!dcc->priv->pixmap_cache, FALSE);
> +    dcc->priv->pixmap_cache = pixmap_cache_get(client,
> +                                               init->pixmap_cache_id,
> +                                               init->pixmap_cache_size);
> +    spice_return_val_if_fail(dcc->priv->pixmap_cache, FALSE);
>  
> -    success = image_encoders_get_glz_dictionary(&dcc->encoders,
> +    success = image_encoders_get_glz_dictionary(&dcc->priv->encoders,
>                                                  client,
>                                                  init->glz_dictionary_id,
>                                                  init->glz_dictionary_window_size);
> @@ -924,7 +926,7 @@ static int dcc_handle_stream_report(DisplayChannelClient *dcc,
>          return FALSE;
>      }
>  
> -    agent = &dcc->stream_agents[report->stream_id];
> +    agent = &dcc->priv->stream_agents[report->stream_id];
>      if (!agent->video_encoder) {
>          spice_info("stream_report: no encoder for stream id %u. "
>                     "The stream has probably been destroyed",
> @@ -962,7 +964,7 @@ static int dcc_handle_preferred_compression(DisplayChannelClient *dcc,
>      case SPICE_IMAGE_COMPRESSION_LZ:
>      case SPICE_IMAGE_COMPRESSION_GLZ:
>      case SPICE_IMAGE_COMPRESSION_OFF:
> -        dcc->image_compression = pc->image_compression;
> +        dcc->priv->image_compression = pc->image_compression;
>          break;
>      default:
>          spice_warning("preferred-compression: unsupported image compression setting");
> @@ -974,13 +976,13 @@ static int dcc_handle_gl_draw_done(DisplayChannelClient *dcc)
>  {
>      DisplayChannel *display = DCC_TO_DC(dcc);
>  
> -    if (G_UNLIKELY(!dcc->gl_draw_ongoing)) {
> +    if (G_UNLIKELY(!dcc->priv->gl_draw_ongoing)) {
>          g_warning("unexpected DRAW_DONE received\n");
>          /* close client connection */
>          return FALSE;
>      }
>  
> -    dcc->gl_draw_ongoing = FALSE;
> +    dcc->priv->gl_draw_ongoing = FALSE;
>      display_channel_gl_draw_done(display);
>  
>      return TRUE;
> @@ -1008,7 +1010,7 @@ int dcc_handle_message(RedChannelClient *rcc, uint32_t size, uint16_t type, void
>  static int dcc_handle_migrate_glz_dictionary(DisplayChannelClient *dcc,
>                                               SpiceMigrateDataDisplay *migrate)
>  {
> -    return image_encoders_restore_glz_dictionary(&dcc->encoders,
> +    return image_encoders_restore_glz_dictionary(&dcc->priv->encoders,
>                                                   red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc)),
>                                                   migrate->glz_dict_id,
>                                                   &migrate->glz_dict_data);
> @@ -1018,11 +1020,11 @@ static int restore_surface(DisplayChannelClient *dcc, uint32_t surface_id)
>  {
>      /* we don't process commands till we receive the migration data, thus,
>       * we should have not sent any surface to the client. */
> -    if (dcc->surface_client_created[surface_id]) {
> +    if (dcc->priv->surface_client_created[surface_id]) {
>          spice_warning("surface %u is already marked as client_created", surface_id);
>          return FALSE;
>      }
> -    dcc->surface_client_created[surface_id] = TRUE;
> +    dcc->priv->surface_client_created[surface_id] = TRUE;
>      return TRUE;
>  }
>  
> @@ -1060,8 +1062,8 @@ static int restore_surfaces_lossy(DisplayChannelClient *dcc,
>          lossy_rect.top = mig_lossy_rect->top;
>          lossy_rect.right = mig_lossy_rect->right;
>          lossy_rect.bottom = mig_lossy_rect->bottom;
> -        region_init(&dcc->surface_client_lossy_region[surface_id]);
> -        region_add(&dcc->surface_client_lossy_region[surface_id], &lossy_rect);
> +        region_init(&dcc->priv->surface_client_lossy_region[surface_id]);
> +        region_add(&dcc->priv->surface_client_lossy_region[surface_id], &lossy_rect);
>      }
>      return TRUE;
>  }
> @@ -1085,26 +1087,26 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
>       * channel client that froze the cache on the src size receives the migrate
>       * data and unfreezes the cache by setting its size > 0 and by triggering
>       * pixmap_cache_reset */
> -    dcc->pixmap_cache = pixmap_cache_get(red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc)),
> -                                         migrate_data->pixmap_cache_id, -1);
> -    spice_return_val_if_fail(dcc->pixmap_cache, FALSE);
> +    dcc->priv->pixmap_cache = pixmap_cache_get(red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc)),
> +                                               migrate_data->pixmap_cache_id, -1);
> +    spice_return_val_if_fail(dcc->priv->pixmap_cache, FALSE);
>  
> -    pthread_mutex_lock(&dcc->pixmap_cache->lock);
> +    pthread_mutex_lock(&dcc->priv->pixmap_cache->lock);
>      for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
> -        dcc->pixmap_cache->sync[i] = MAX(dcc->pixmap_cache->sync[i],
> -                                         migrate_data->pixmap_cache_clients[i]);
> +        dcc->priv->pixmap_cache->sync[i] = MAX(dcc->priv->pixmap_cache->sync[i],
> +                                               migrate_data->pixmap_cache_clients[i]);
>      }
> -    pthread_mutex_unlock(&dcc->pixmap_cache->lock);
> +    pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
>  
>      if (migrate_data->pixmap_cache_freezer) {
>          /* activating the cache. The cache will start to be active after
>           * pixmap_cache_reset is called, when handling RED_PIPE_ITEM_TYPE_PIXMAP_RESET */
> -        dcc->pixmap_cache->size = migrate_data->pixmap_cache_size;
> +        dcc->priv->pixmap_cache->size = migrate_data->pixmap_cache_size;
>          red_channel_client_pipe_add_type(RED_CHANNEL_CLIENT(dcc), RED_PIPE_ITEM_TYPE_PIXMAP_RESET);
>      }
>  
>      if (dcc_handle_migrate_glz_dictionary(dcc, migrate_data)) {
> -        image_encoders_glz_create(&dcc->encoders, dcc->id);
> +        image_encoders_glz_create(&dcc->priv->encoders, dcc->priv->id);
>      } else {
>          spice_critical("restoring global lz dictionary failed");
>      }
> @@ -1113,10 +1115,10 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
>  
>      if (migrate_data->low_bandwidth_setting) {
>          red_channel_client_ack_set_client_window(RED_CHANNEL_CLIENT(dcc), WIDE_CLIENT_ACK_WINDOW);
> -        if (dcc->jpeg_state == SPICE_WAN_COMPRESSION_AUTO) {
> +        if (dcc->priv->jpeg_state == SPICE_WAN_COMPRESSION_AUTO) {
>              display->enable_jpeg = TRUE;
>          }
> -        if (dcc->zlib_glz_state == SPICE_WAN_COMPRESSION_AUTO) {
> +        if (dcc->priv->zlib_glz_state == SPICE_WAN_COMPRESSION_AUTO) {
>              display->enable_zlib_glz_wrap = TRUE;
>          }
>      }
> @@ -1136,47 +1138,47 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
>  
>  StreamAgent* dcc_get_stream_agent(DisplayChannelClient *dcc, int stream_id)
>  {
> -    return &dcc->stream_agents[stream_id];
> +    return &dcc->priv->stream_agents[stream_id];
>  }
>  
>  ImageEncoders* dcc_get_encoders(DisplayChannelClient *dcc)
>  {
> -    return &dcc->encoders;
> +    return &dcc->priv->encoders;
>  }
>  
>  spice_wan_compression_t dcc_get_jpeg_state(DisplayChannelClient *dcc)
>  {
> -    return dcc->jpeg_state;
> +    return dcc->priv->jpeg_state;
>  }
>  
>  spice_wan_compression_t dcc_get_zlib_glz_state(DisplayChannelClient *dcc)
>  {
> -    return dcc->zlib_glz_state;
> +    return dcc->priv->zlib_glz_state;
>  }
>  
>  gboolean dcc_use_video_encoder_rate_control(DisplayChannelClient *dcc)
>  {
> -    return dcc->use_video_encoder_rate_control;
> +    return dcc->priv->use_video_encoder_rate_control;
>  }
>  
>  uint32_t dcc_get_max_stream_latency(DisplayChannelClient *dcc)
>  {
> -    return dcc->streams_max_latency;
> +    return dcc->priv->streams_max_latency;
>  }
>  
>  void dcc_set_max_stream_latency(DisplayChannelClient *dcc, uint32_t latency)
>  {
> -    dcc->streams_max_latency = latency;
> +    dcc->priv->streams_max_latency = latency;
>  }
>  
>  uint64_t dcc_get_max_stream_bit_rate(DisplayChannelClient *dcc)
>  {
> -    return dcc->streams_max_bit_rate;
> +    return dcc->priv->streams_max_bit_rate;
>  }
>  
>  void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate)
>  {
> -    dcc->streams_max_bit_rate = rate;
> +    dcc->priv->streams_max_bit_rate = rate;
>  }
>  
>  int dcc_config_socket(RedChannelClient *rcc)
> -- 
> 2.7.4
> 
> _______________________________________________
> 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