From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> --- server/red_worker.c | 75 +++++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/server/red_worker.c b/server/red_worker.c index 2ec05f1..584c553 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -576,7 +576,8 @@ DrawablePipeItem *drawable_pipe_item_new(DisplayChannelClient *dcc, dpi->dcc = dcc; ring_item_init(&dpi->base); ring_add(&drawable->pipes, &dpi->base); - red_channel_pipe_item_init(dcc->common.base.channel, &dpi->dpi_pipe_item, PIPE_ITEM_TYPE_DRAW); + red_channel_pipe_item_init(RED_CHANNEL_CLIENT(dcc)->channel, + &dpi->dpi_pipe_item, PIPE_ITEM_TYPE_DRAW); dpi->refs++; drawable->refs++; return dpi; @@ -709,7 +710,7 @@ static void dcc_add_drawable(DisplayChannelClient *dcc, Drawable *drawable) red_handle_drawable_surfaces_client_synced(dcc, drawable); dpi = drawable_pipe_item_new(dcc, drawable); - red_channel_client_pipe_add(&dcc->common.base, &dpi->dpi_pipe_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &dpi->dpi_pipe_item); } static void red_pipes_add_drawable(RedWorker *worker, Drawable *drawable) @@ -732,7 +733,7 @@ static void dcc_add_drawable_to_tail(DisplayChannelClient *dcc, Drawable *drawab } red_handle_drawable_surfaces_client_synced(dcc, drawable); dpi = drawable_pipe_item_new(dcc, drawable); - red_channel_client_pipe_add_tail(&dcc->common.base, &dpi->dpi_pipe_item); + red_channel_client_pipe_add_tail(RED_CHANNEL_CLIENT(dcc), &dpi->dpi_pipe_item); } static inline void red_pipes_add_drawable_after(RedWorker *worker, @@ -748,7 +749,7 @@ static inline void red_pipes_add_drawable_after(RedWorker *worker, dcc = dpi_pos_after->dcc; red_handle_drawable_surfaces_client_synced(dcc, drawable); dpi = drawable_pipe_item_new(dcc, drawable); - red_channel_client_pipe_add_after(&dcc->common.base, &dpi->dpi_pipe_item, + red_channel_client_pipe_add_after(RED_CHANNEL_CLIENT(dcc), &dpi->dpi_pipe_item, &dpi_pos_after->dpi_pipe_item); } if (num_other_linked == 0) { @@ -779,7 +780,7 @@ static inline PipeItem *red_pipe_get_tail(DisplayChannelClient *dcc) return NULL; } - return (PipeItem*)ring_get_tail(&dcc->common.base.pipe); + return (PipeItem*)ring_get_tail(&RED_CHANNEL_CLIENT(dcc)->pipe); } static inline void red_destroy_surface(RedWorker *worker, uint32_t surface_id); @@ -804,7 +805,7 @@ static inline void red_pipe_add_image_item(DisplayChannelClient *dcc, ImageItem return; } item->refs++; - red_channel_client_pipe_add(&dcc->common.base, &item->link); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &item->link); } static inline void red_pipe_add_image_item_after(DisplayChannelClient *dcc, ImageItem *item, @@ -814,7 +815,7 @@ static inline void red_pipe_add_image_item_after(DisplayChannelClient *dcc, Imag return; } item->refs++; - red_channel_client_pipe_add_after(&dcc->common.base, &item->link, pos); + red_channel_client_pipe_add_after(RED_CHANNEL_CLIENT(dcc), &item->link, pos); } static void release_image_item(ImageItem *item) @@ -925,7 +926,7 @@ static inline void red_destroy_surface_item(RedWorker *worker, dcc->surface_client_created[surface_id] = FALSE; channel = RED_CHANNEL(worker->display_channel); destroy = get_surface_destroy_item(channel, surface_id); - red_channel_client_pipe_add(&dcc->common.base, &destroy->pipe_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy->pipe_item); } static inline void red_destroy_surface(RedWorker *worker, uint32_t surface_id) @@ -1216,8 +1217,8 @@ static int red_clear_surface_drawables_from_pipe(DisplayChannelClient *dcc, int /* removing the newest drawables that their destination is surface_id and no other drawable depends on them */ - rcc = &dcc->common.base; - ring = &dcc->common.base.pipe; + rcc = RED_CHANNEL_CLIENT(dcc); + ring = &rcc->pipe; item = (PipeItem *) ring; while ((item = (PipeItem *)ring_next(ring, (RingItem *)item))) { Drawable *drawable; @@ -1265,14 +1266,14 @@ static int red_clear_surface_drawables_from_pipe(DisplayChannelClient *dcc, int } if (item) { - return red_channel_client_wait_pipe_item_sent(&dcc->common.base, item, + return red_channel_client_wait_pipe_item_sent(RED_CHANNEL_CLIENT(dcc), item, DISPLAY_CLIENT_TIMEOUT); } else { /* * in case that the pipe didn't contain any item that is dependent on the surface, but * there is one during sending. Use a shorter timeout, since it is just one item */ - return red_channel_client_wait_outgoing_item(&dcc->common.base, + return red_channel_client_wait_outgoing_item(RED_CHANNEL_CLIENT(dcc), DISPLAY_CLIENT_SHORT_TIMEOUT); } return TRUE; @@ -1287,7 +1288,7 @@ static void red_clear_surface_drawables_from_pipes(RedWorker *worker, FOREACH_DCC(worker->display_channel, item, next, dcc) { if (!red_clear_surface_drawables_from_pipe(dcc, surface_id, wait_if_used)) { - red_channel_client_disconnect(&dcc->common.base); + red_channel_client_disconnect(RED_CHANNEL_CLIENT(dcc)); } } } @@ -1608,7 +1609,7 @@ static void push_stream_clip(DisplayChannelClient* dcc, StreamAgent *agent) item->rects = spice_malloc_n_m(n_rects, sizeof(SpiceRect), sizeof(SpiceClipRects)); item->rects->num_rects = n_rects; region_ret_rects(&agent->clip, item->rects->rects, n_rects); - red_channel_client_pipe_add(&dcc->common.base, (PipeItem *)item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), (PipeItem *)item); } static void red_display_release_stream_clip(RedWorker *worker, StreamClipItem *item) @@ -1731,7 +1732,7 @@ static void red_stop_stream(RedWorker *worker, Stream *stream) } } stream->refs++; - red_channel_client_pipe_add(&dcc->common.base, &stream_agent->destroy_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &stream_agent->destroy_item); red_print_stream_stats(dcc, stream_agent); } worker->streams_size_total -= stream->width * stream->height; @@ -1791,7 +1792,7 @@ static inline void red_display_detach_stream_gracefully(DisplayChannelClient *dc spice_debug("stream %d: upgrade by drawable. sized %d, box ==>", stream_id, stream->current->sized_stream != NULL); rect_debug(&stream->current->red_drawable->bbox); - rcc = &dcc->common.base; + rcc = RED_CHANNEL_CLIENT(dcc); channel = rcc->channel; upgrade_item = spice_new(UpgradeItem, 1); upgrade_item->refs = 1; @@ -2132,16 +2133,16 @@ static void red_display_create_stream(DisplayChannelClient *dcc, Stream *stream) } else { agent->mjpeg_encoder = mjpeg_encoder_new(0, NULL, NULL); } - red_channel_client_pipe_add(&dcc->common.base, &agent->create_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &agent->create_item); - if (red_channel_client_test_remote_cap(&dcc->common.base, SPICE_DISPLAY_CAP_STREAM_REPORT)) { + if (red_channel_client_test_remote_cap(RED_CHANNEL_CLIENT(dcc), SPICE_DISPLAY_CAP_STREAM_REPORT)) { StreamActivateReportItem *report_pipe_item = spice_malloc0(sizeof(*report_pipe_item)); agent->report_id = rand(); red_channel_pipe_item_init(dcc->common.base.channel, &report_pipe_item->pipe_item, PIPE_ITEM_TYPE_STREAM_ACTIVATE_REPORT); report_pipe_item->stream_id = get_stream_id(dcc->common.worker, stream); - red_channel_client_pipe_add(&dcc->common.base, &report_pipe_item->pipe_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &report_pipe_item->pipe_item); } #ifdef STREAM_STATS memset(&agent->stats, 0, sizeof(StreamStats)); @@ -2217,7 +2218,7 @@ static void red_display_client_init_streams(DisplayChannelClient *dcc) red_channel_pipe_item_init(channel, &agent->destroy_item, PIPE_ITEM_TYPE_STREAM_DESTROY); } dcc->use_mjpeg_encoder_rate_control = - red_channel_client_test_remote_cap(&dcc->common.base, SPICE_DISPLAY_CAP_STREAM_REPORT); + red_channel_client_test_remote_cap(RED_CHANNEL_CLIENT(dcc), SPICE_DISPLAY_CAP_STREAM_REPORT); } static void red_display_destroy_streams_agents(DisplayChannelClient *dcc) @@ -3990,7 +3991,7 @@ static void red_push_surface_image(DisplayChannelClient *dcc, int surface_id) /* not allowing lossy compression because probably, especially if it is a primary surface, it combines both "picture-like" areas with areas that are more "artificial"*/ red_add_surface_area_image(dcc, surface_id, &area, NULL, FALSE); - red_channel_client_push(&dcc->common.base); + red_channel_client_push(RED_CHANNEL_CLIENT(dcc)); } static void marshaller_add_compressed(SpiceMarshaller *m, @@ -5274,12 +5275,12 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id, uint32 spice_assert(size > 0); item = spice_new(NewCacheItem, 1); - serial = red_channel_client_get_message_serial(&dcc->common.base); + serial = red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc)); if (cache->generation != dcc->pixmap_cache_generation) { if (!dcc->pending_pixmaps_sync) { red_channel_client_pipe_add_type( - &dcc->common.base, PIPE_ITEM_TYPE_PIXMAP_SYNC); + RED_CHANNEL_CLIENT(dcc), PIPE_ITEM_TYPE_PIXMAP_SYNC); dcc->pending_pixmaps_sync = TRUE; } free(item); @@ -5360,7 +5361,7 @@ static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id, NewCacheItem *item; uint64_t serial; - serial = red_channel_client_get_message_serial(&dcc->common.base); + serial = red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc)); item = cache->hash_table[BITS_CACHE_HASH_KEY(id)]; while (item) { @@ -5405,7 +5406,7 @@ typedef enum { static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m, SpiceImage *simage, Drawable *drawable, int can_lossy) { - RedChannelClient *rcc = &dcc->common.base; + RedChannelClient *rcc = RED_CHANNEL_CLIENT(dcc); DisplayChannel *display_channel = SPICE_CONTAINEROF(rcc->channel, DisplayChannel, common.base); RedWorker *worker = dcc->common.worker; SpiceImage image; @@ -5808,7 +5809,7 @@ static int pipe_rendered_drawables_intersect_with_areas(RedWorker *worker, Ring *pipe; spice_assert(num_surfaces); - pipe = &dcc->common.base.pipe; + pipe = &RED_CHANNEL_CLIENT(dcc)->pipe; for (pipe_item = (PipeItem *)ring_get_head(pipe); pipe_item; @@ -5847,7 +5848,7 @@ static void red_pipe_replace_rendered_drawables_with_images(RedWorker *worker, resent_areas[0] = *first_area; num_resent = 1; - pipe = &dcc->common.base.pipe; + pipe = &RED_CHANNEL_CLIENT(dcc)->pipe; // going from the oldest to the newest for (pipe_item = (PipeItem *)ring_get_tail(pipe); @@ -5882,7 +5883,7 @@ static void red_pipe_replace_rendered_drawables_with_images(RedWorker *worker, num_resent++; spice_assert(image); - red_channel_client_pipe_remove_and_release(&dcc->common.base, &dpi->dpi_pipe_item); + red_channel_client_pipe_remove_and_release(RED_CHANNEL_CLIENT(dcc), &dpi->dpi_pipe_item); pipe_item = &image->link; } } @@ -7380,7 +7381,7 @@ static void dcc_pixmap_cache_reset(DisplayChannelClient *dcc, SpiceMsgWaitForCha uint64_t serial; uint32_t i; - serial = red_channel_client_get_message_serial(&dcc->common.base); + serial = red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc)); pthread_mutex_lock(&cache->lock); pixmap_cache_clear(cache); @@ -8039,7 +8040,7 @@ static inline void red_create_surface_item(DisplayChannelClient *dcc, int surfac surface_id, surface->context.width, surface->context.height, surface->context.format, flags); dcc->surface_client_created[surface_id] = TRUE; - red_channel_client_pipe_add(&dcc->common.base, &create->pipe_item); + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &create->pipe_item); } static void red_worker_create_surface_item(RedWorker *worker, int surface_id) @@ -8227,7 +8228,7 @@ static inline void flush_all_qxl_commands(RedWorker *worker) static void push_new_primary_surface(DisplayChannelClient *dcc) { - RedChannelClient *rcc = &dcc->common.base; + RedChannelClient *rcc = RED_CHANNEL_CLIENT(dcc); red_channel_client_pipe_add_type(rcc, PIPE_ITEM_TYPE_INVAL_PALETTE_CACHE); red_create_surface_item(dcc, 0); @@ -8240,8 +8241,8 @@ static int display_channel_client_wait_for_init(DisplayChannelClient *dcc) dcc->expect_init = TRUE; uint64_t end_time = red_get_monotonic_time() + DISPLAY_CLIENT_TIMEOUT; for (;;) { - red_channel_client_receive(&dcc->common.base); - if (!red_channel_client_is_connected(&dcc->common.base)) { + red_channel_client_receive(RED_CHANNEL_CLIENT(dcc)); + if (!red_channel_client_is_connected(RED_CHANNEL_CLIENT(dcc))) { break; } if (dcc->pixmap_cache && dcc->glz_dict) { @@ -8256,7 +8257,7 @@ static int display_channel_client_wait_for_init(DisplayChannelClient *dcc) } if (red_get_monotonic_time() > end_time) { spice_warning("timeout"); - red_channel_client_disconnect(&dcc->common.base); + red_channel_client_disconnect(RED_CHANNEL_CLIENT(dcc)); break; } usleep(DISPLAY_CLIENT_RETRY_INTERVAL); @@ -8268,9 +8269,9 @@ static void on_new_display_channel_client(DisplayChannelClient *dcc) { DisplayChannel *display_channel = DCC_TO_DC(dcc); RedWorker *worker = display_channel->common.worker; - RedChannelClient *rcc = &dcc->common.base; + RedChannelClient *rcc = RED_CHANNEL_CLIENT(dcc); - red_channel_client_push_set_ack(&dcc->common.base); + red_channel_client_push_set_ack(RED_CHANNEL_CLIENT(dcc)); if (red_channel_client_waits_for_migrate_data(rcc)) { return; @@ -8279,7 +8280,7 @@ static void on_new_display_channel_client(DisplayChannelClient *dcc) if (!display_channel_client_wait_for_init(dcc)) { return; } - red_channel_client_ack_zero_messages_window(&dcc->common.base); + red_channel_client_ack_zero_messages_window(RED_CHANNEL_CLIENT(dcc)); if (worker->surfaces[0].context.canvas) { red_current_flush(worker, 0); push_new_primary_surface(dcc); -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel