[Spice-devel] [PATCH 01/10] server: move display_channel_client_create() to dcc_new()
Fabiano FidĂȘncio
fidencio at redhat.com
Mon Nov 2 05:50:49 PST 2015
On Mon, Nov 2, 2015 at 11:02 AM, Frediano Ziglio <fziglio at redhat.com> wrote:
>
>>
>> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>>
>> Move function from server/red_worker.c to new server/display-channel.c.
>> ---
>> server/Makefile.am | 1 +
>> server/display-channel.c | 38 +++++++++++++++++++++++++++
>> server/display-channel.h | 50 ++++++++++++++++++++++++++++++++---
>> server/red_worker.c | 68
>> +++---------------------------------------------
>> 4 files changed, 89 insertions(+), 68 deletions(-)
>> create mode 100644 server/display-channel.c
>>
>> diff --git a/server/Makefile.am b/server/Makefile.am
>> index 87288cc..428417b 100644
>> --- a/server/Makefile.am
>> +++ b/server/Makefile.am
>> @@ -105,6 +105,7 @@ libspice_server_la_SOURCES = \
>> red_parse_qxl.h \
>> red_worker.c \
>> red_worker.h \
>> + display-channel.c \
>> display-channel.h \
>> cursor-channel.c \
>> cursor-channel.h \
>> diff --git a/server/display-channel.c b/server/display-channel.c
>> new file mode 100644
>> index 0000000..00be665
>> --- /dev/null
>> +++ b/server/display-channel.c
>> @@ -0,0 +1,38 @@
>> +/*
>> + Copyright (C) 2009-2015 Red Hat, Inc.
>> +
>> + This library is free software; you can redistribute it and/or
>> + modify it under the terms of the GNU Lesser General Public
>> + License as published by the Free Software Foundation; either
>> + version 2.1 of the License, or (at your option) any later version.
>> +
>> + This library is distributed in the hope that it will be useful,
>> + but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + Lesser General Public License for more details.
>> +
>> + You should have received a copy of the GNU Lesser General Public
>> + License along with this library; if not, see
>> <http://www.gnu.org/licenses/>.
>> +*/
>> +#include "display-channel.h"
>> +
>> +DisplayChannelClient *dcc_new(DisplayChannel *display,
>> + RedClient *client, RedsStream *stream,
>> + int mig_target,
>> + uint32_t *common_caps, int num_common_caps,
>> + uint32_t *caps, int num_caps)
>> +{
>> + DisplayChannelClient *dcc;
>> +
>> + dcc = (DisplayChannelClient*)common_channel_new_client(
>> + (CommonChannel *)display, sizeof(DisplayChannelClient),
>> + client, stream, mig_target, TRUE,
>> + common_caps, num_common_caps,
>> + caps, num_caps);
>> + spice_return_val_if_fail(dcc, NULL);
>> +
>> + ring_init(&dcc->palette_cache_lru);
>> + dcc->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
>> +
>> + return dcc;
>> +}
>> diff --git a/server/display-channel.h b/server/display-channel.h
>> index e1ddc11..5d2eee5 100644
>> --- a/server/display-channel.h
>> +++ b/server/display-channel.h
>> @@ -15,14 +15,47 @@
>> You should have received a copy of the GNU Lesser General Public
>> License along with this library; if not, see
>> <http://www.gnu.org/licenses/>.
>> */
>> -#ifndef RED_WORKER_CLIENT_H_
>> -# define RED_WORKER_CLIENT_H_
>> +#ifndef DISPLAY_CHANNEL_H_
>> +# define DISPLAY_CHANNEL_H_
>> +
>> +#include <setjmp.h>
>>
>> #include "red_worker.h"
>> +#include "reds_stream.h"
>> #include "cache-item.h"
>> #include "pixmap-cache.h"
>> +#ifdef USE_OPENGL
>> +#include "common/ogl_ctx.h"
>> +#include "reds_gl_canvas.h"
>> +#endif /* USE_OPENGL */
>> +#include "reds_sw_canvas.h"
>> +#include "glz_encoder_dictionary.h"
>> +#include "glz_encoder.h"
>> +#include "stat.h"
>> +#include "reds.h"
>> +#include "mjpeg_encoder.h"
>> +#include "red_memslots.h"
>> +#include "red_parse_qxl.h"
>> +#include "red_record_qxl.h"
>> +#include "jpeg_encoder.h"
>> +#ifdef USE_LZ4
>> +#include "lz4_encoder.h"
>> +#endif
>> +#include "demarshallers.h"
>> +#include "zlib_encoder.h"
>> +#include "red_channel.h"
>> +#include "red_dispatcher.h"
>> +#include "dispatcher.h"
>> +#include "main_channel.h"
>> +#include "migration_protocol.h"
>> +#include "main_dispatcher.h"
>> +#include "spice_server_utils.h"
>> +#include "spice_bitmap_utils.h"
>> +#include "spice_image_cache.h"
>> #include "utils.h"
>>
>> +typedef struct DisplayChannel DisplayChannel;
>> +
>> typedef struct Drawable Drawable;
>>
>> #define PALETTE_CACHE_HASH_SHIFT 8
>> @@ -30,6 +63,8 @@ typedef struct Drawable Drawable;
>> #define PALETTE_CACHE_HASH_MASK (PALETTE_CACHE_HASH_SIZE - 1)
>> #define PALETTE_CACHE_HASH_KEY(id) ((id) & PALETTE_CACHE_HASH_MASK)
>>
>> +#define CLIENT_PALETTE_CACHE_SIZE 128
>> +
>> /* Each drawable can refer to at most 3 images: src, brush and mask */
>> #define MAX_DRAWABLE_PIXMAP_CACHE_ITEMS 3
>>
>> @@ -193,4 +228,13 @@ struct DisplayChannelClient {
>> uint64_t streams_max_bit_rate;
>> };
>>
>> -#endif /* RED_WORKER_CLIENT_H_ */
>> +DisplayChannelClient* dcc_new
>> (DisplayChannel *display,
>> +
>> RedClient
>> *client,
>> +
>> RedsStream
>> *stream,
>> + int
>> mig_target,
>> +
>> uint32_t
>> *common_caps,
>> + int
>> num_common_caps,
>> +
>> uint32_t
>> *caps,
>> + int
>> num_caps);
>> +
>> +#endif /* DISPLAY_CHANNEL_H_ */
>> diff --git a/server/red_worker.c b/server/red_worker.c
>> index 68cb153..89cb25c 100644
>> --- a/server/red_worker.c
>> +++ b/server/red_worker.c
>> @@ -43,7 +43,6 @@
>> #include <poll.h>
>> #include <pthread.h>
>> #include <netinet/tcp.h>
>> -#include <setjmp.h>
>> #include <openssl/ssl.h>
>> #include <inttypes.h>
>> #include <glib.h>
>> @@ -58,41 +57,11 @@
>> #include "common/ring.h"
>> #include "common/generated_server_marshallers.h"
>>
>> -#ifdef USE_OPENGL
>> -#include "common/ogl_ctx.h"
>> -#include "reds_gl_canvas.h"
>> -#endif /* USE_OPENGL */
>> +#include "display-channel.h"
>>
>> #include "spice.h"
>> #include "red_worker.h"
>> -#include "reds_stream.h"
>> -#include "reds_sw_canvas.h"
>> -#include "glz_encoder_dictionary.h"
>> -#include "glz_encoder.h"
>> -#include "stat.h"
>> -#include "reds.h"
>> -#include "mjpeg_encoder.h"
>> -#include "red_memslots.h"
>> -#include "red_parse_qxl.h"
>> -#include "red_record_qxl.h"
>> -#include "jpeg_encoder.h"
>> -#ifdef USE_LZ4
>> -#include "lz4_encoder.h"
>> -#endif
>> -#include "demarshallers.h"
>> -#include "zlib_encoder.h"
>> -#include "red_channel.h"
>> -#include "red_dispatcher.h"
>> -#include "dispatcher.h"
>> -#include "main_channel.h"
>> -#include "migration_protocol.h"
>> #include "spice_timer_queue.h"
>> -#include "main_dispatcher.h"
>> -#include "spice_server_utils.h"
>> -#include "spice_bitmap_utils.h"
>> -#include "spice_image_cache.h"
>> -#include "pixmap-cache.h"
>> -#include "display-channel.h"
>> #include "cursor-channel.h"
>>
>> //#define COMPRESS_STAT
>> @@ -294,8 +263,6 @@ typedef struct StreamActivateReportItem {
>> #define WIDE_CLIENT_ACK_WINDOW 40
>> #define NARROW_CLIENT_ACK_WINDOW 20
>>
>> -#define CLIENT_PALETTE_CACHE_SIZE 128
>> -
>> typedef struct ImageItem {
>> PipeItem link;
>> int refs;
>> @@ -311,8 +278,6 @@ typedef struct ImageItem {
>> uint8_t data[0];
>> } ImageItem;
>>
>> -typedef struct DisplayChannel DisplayChannel;
>> -
>> enum {
>> STREAM_FRAME_NONE,
>> STREAM_FRAME_NATIVE,
>> @@ -9472,28 +9437,6 @@ CommonChannelClient
>> *common_channel_new_client(CommonChannel *common,
>> }
>>
>>
>> -DisplayChannelClient *display_channel_client_create(CommonChannel *common,
>> - RedClient *client,
>> RedsStream *stream,
>> - int mig_target,
>> - uint32_t *common_caps,
>> int num_common_caps,
>> - uint32_t *caps, int
>> num_caps)
>> -{
>> - DisplayChannelClient *dcc =
>> - (DisplayChannelClient*)common_channel_new_client(
>> - common, sizeof(DisplayChannelClient), client, stream,
>> - mig_target,
>> - TRUE,
>> - common_caps, num_common_caps,
>> - caps, num_caps);
>> -
>> - if (!dcc) {
>> - return NULL;
>> - }
>> - ring_init(&dcc->palette_cache_lru);
>> - dcc->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
>> - return dcc;
>> -}
>> -
>> RedChannel *red_worker_new_channel(RedWorker *worker, int size,
>> uint32_t channel_type, int
>> migration_flags,
>> ChannelCbs *channel_cbs,
>> @@ -9776,13 +9719,8 @@ static void handle_new_display_channel(RedWorker
>> *worker, RedClient *client, Red
>> }
>> display_channel = worker->display_channel;
>> spice_info("add display channel client");
>> - dcc = display_channel_client_create(&display_channel->common, client,
>> stream,
>> - migrate,
>> - common_caps, num_common_caps,
>> - caps, num_caps);
>> - if (!dcc) {
>> - return;
>> - }
>
> The removal of this test does not make sense looking at same test in
> display-channel.c. If can be NULL inside dcc_new why not checking here?
> Or are we just going to accept the core in next lines?
>
> I would add again these lines and ack it.
Same feeling here. common_channel_new_client() can return NULL inside
the dcc_new(), so the check is still valid.
ACK keeping the check.
>
>> + dcc = dcc_new(display_channel, client, stream, migrate,
>> + common_caps, num_common_caps, caps, num_caps);
>> spice_info("New display (client %p) dcc %p stream %p", client, dcc,
>> stream);
>> stream_buf_size = 32*1024;
>> dcc->send_data.stream_outbuf = spice_malloc(stream_buf_size);
>
> Frediano
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list