[Spice-devel] [PATCH 05/15] server: move renderer members to DisplayChannel
Frediano Ziglio
fziglio at redhat.com
Tue Nov 3 09:20:40 PST 2015
>
>
> > From: Marc-André Lureau <marcandre.lureau at gmail.com>
> >
> > ---
> > server/red_worker.c | 31 +++++++++++++++----------------
> > 1 file changed, 15 insertions(+), 16 deletions(-)
> >
> > diff --git a/server/red_worker.c b/server/red_worker.c
> > index bad8e47..491e55e 100644
> > --- a/server/red_worker.c
> > +++ b/server/red_worker.c
> > @@ -376,6 +376,10 @@ Ring glz_dictionary_list = {&glz_dictionary_list,
> > &glz_dictionary_list};
> > struct DisplayChannel {
> > CommonChannel common; // Must be the first thing
> >
> > + uint32_t num_renderers;
> > + uint32_t renderers[RED_RENDERER_LAST];
> > + uint32_t renderer;
> > +
> > int enable_jpeg;
> > int jpeg_quality;
> > int enable_zlib_glz_wrap;
> > @@ -481,10 +485,6 @@ typedef struct RedWorker {
> > CursorChannel *cursor_channel;
> > uint32_t cursor_poll_tries;
> >
> > - uint32_t num_renderers;
> > - uint32_t renderers[RED_RENDERER_LAST];
> > - uint32_t renderer;
> > -
> > RedSurface surfaces[NUM_SURFACES];
> > uint32_t n_surfaces;
> > SpiceImageSurfaces image_surfaces;
> > @@ -8302,6 +8302,7 @@ static inline void red_create_surface(RedWorker
> > *worker, uint32_t surface_id, ui
> > void *line_0, int data_is_valid, int
> > send_client)
> > {
> > RedSurface *surface = &worker->surfaces[surface_id];
> > + DisplayChannel*display = worker->display_channel;
> > uint32_t i;
> >
> > spice_warn_if(surface->context.canvas);
> > @@ -8326,8 +8327,8 @@ static inline void red_create_surface(RedWorker
> > *worker, uint32_t surface_id, ui
> > ring_init(&surface->depend_on_me);
> > region_init(&surface->draw_dirty_region);
> > surface->refs = 1;
> > - if (worker->renderer != RED_RENDERER_INVALID) {
> > - surface->context.canvas = create_canvas_for_surface(worker,
> > surface,
> > worker->renderer,
> > + if (display->renderer != RED_RENDERER_INVALID) {
> > + surface->context.canvas = create_canvas_for_surface(worker,
> > surface,
> > display->renderer,
> > width, height,
> > stride,
> > surface->context.format,
> > line_0);
> > if (!surface->context.canvas) {
> > @@ -8343,12 +8344,12 @@ static inline void red_create_surface(RedWorker
> > *worker, uint32_t surface_id, ui
> > return;
> > }
> >
> > - for (i = 0; i < worker->num_renderers; i++) {
> > - surface->context.canvas = create_canvas_for_surface(worker,
> > surface,
> > worker->renderers[i],
> > + for (i = 0; i < display->num_renderers; i++) {
> > + surface->context.canvas = create_canvas_for_surface(worker,
> > surface,
> > display->renderers[i],
> > width, height,
> > stride,
> > surface->context.format,
> > line_0);
> > if (surface->context.canvas) { //no need canvas check
> > - worker->renderer = worker->renderers[i];
> > + display->renderer = display->renderers[i];
> > if (send_client) {
> > red_worker_create_surface_item(worker, surface_id);
> > if (data_is_valid) {
> > @@ -9260,9 +9261,7 @@ static void display_channel_create(RedWorker *worker,
> > int migrate)
> > .handle_migrate_data_get_serial =
> > display_channel_handle_migrate_data_get_serial
> > };
> >
> > - if (worker->display_channel) {
> > - return;
> > - }
> > + spice_return_if_fail(num_renderers > 0);
> >
> > spice_info("create display channel");
> > if (!(worker->display_channel = (DisplayChannel
> > *)red_worker_new_channel(
> > @@ -9290,6 +9289,10 @@ static void display_channel_create(RedWorker
> > *worker,
> > int migrate)
> > stat_compress_init(&display_channel->zlib_glz_stat, zlib_stat_name);
> > stat_compress_init(&display_channel->jpeg_alpha_stat,
> > jpeg_alpha_stat_name);
> > stat_compress_init(&display_channel->lz4_stat, lz4_stat_name);
> > +
> > + display_channel->num_renderers = num_renderers;
> > + memcpy(display_channel->renderers, renderers,
> > sizeof(display_channel->renderers));
> > + display_channel->renderer = RED_RENDERER_INVALID;
> > }
> >
> > static void guest_set_client_capabilities(RedWorker *worker)
> > @@ -10545,10 +10548,6 @@ RedWorker* red_worker_new(QXLInstance *qxl,
> > RedDispatcher *red_dispatcher)
> > if (worker->record_fd) {
> > dispatcher_register_universal_handler(dispatcher,
> > worker_dispatcher_record);
> > }
> > - spice_assert(num_renderers > 0);
> > - worker->num_renderers = num_renderers;
> > - memcpy(worker->renderers, renderers, sizeof(worker->renderers));
> > - worker->renderer = RED_RENDERER_INVALID;
> > worker->image_compression = image_compression;
> > worker->jpeg_state = jpeg_state;
> > worker->zlib_glz_state = zlib_glz_state;
>
> Ack
>
Merged
Frediano
More information about the Spice-devel
mailing list