summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-01-26 15:08:23 -0600
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-02-23 23:00:45 +0100
commitd10f4d16ef1fe38ceebdd0130faca4da06729584 (patch)
tree62a26851ea1ac9b5a22559f1d0446c89c64a8541
parent951e1e0bc70eca2e26df99a2e444640bc610e5b5 (diff)
downloadspice-d10f4d16ef1fe38ceebdd0130faca4da06729584.tar.gz
spice-d10f4d16ef1fe38ceebdd0130faca4da06729584.tar.xz
spice-d10f4d16ef1fe38ceebdd0130faca4da06729584.zip
Store 'renderers' as GArray in RedsState
-rw-r--r--server/display-channel.c13
-rw-r--r--server/display-channel.h3
-rw-r--r--server/reds-private.h2
-rw-r--r--server/reds.c19
-rw-r--r--server/reds.h5
5 files changed, 23 insertions, 19 deletions
diff --git a/server/display-channel.c b/server/display-channel.c
index dcbde74f..8aaa5fb7 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -1831,10 +1831,11 @@ void display_channel_create_surface(DisplayChannel *display, uint32_t surface_id
if (display->renderer == RED_RENDERER_INVALID) {
int i;
- for (i = 0; i < display->num_renderers; i++) {
- surface->context.canvas = create_canvas_for_surface(display, surface, display->renderers[i]);
+ for (i = 0; i < display->renderers->len; i++) {
+ uint32_t renderer = g_array_index(display->renderers, uint32_t, i);
+ surface->context.canvas = create_canvas_for_surface(display, surface, renderer);
if (surface->context.canvas) {
- display->renderer = display->renderers[i];
+ display->renderer = renderer;
break;
}
}
@@ -1956,8 +1957,9 @@ DisplayChannel* display_channel_new(RedWorker *worker, int migrate, uint32_t n_s
static SpiceImageSurfacesOps image_surfaces_ops = {
image_surfaces_get,
};
+ GArray *renderers = reds_get_renderers(reds);
- spice_return_val_if_fail(num_renderers > 0, NULL);
+ spice_return_val_if_fail(renderers->len > 0, NULL);
spice_info("create display channel");
display = (DisplayChannel *)red_worker_new_channel(
@@ -1988,8 +1990,7 @@ DisplayChannel* display_channel_new(RedWorker *worker, int migrate, uint32_t n_s
stat_compress_init(&display_channel->lz4_stat, "lz4");
display->n_surfaces = n_surfaces;
- display->num_renderers = num_renderers;
- memcpy(display->renderers, renderers, sizeof(display->renderers));
+ display->renderers = g_array_ref(renderers);
display->renderer = RED_RENDERER_INVALID;
ring_init(&display->current_list);
diff --git a/server/display-channel.h b/server/display-channel.h
index ee8fef42..b095d482 100644
--- a/server/display-channel.h
+++ b/server/display-channel.h
@@ -155,8 +155,7 @@ struct DisplayChannel {
MonitorsConfig *monitors_config;
- uint32_t num_renderers;
- uint32_t renderers[RED_RENDERER_LAST];
+ GArray *renderers;
uint32_t renderer;
int enable_jpeg;
int enable_zlib_glz_wrap;
diff --git a/server/reds-private.h b/server/reds-private.h
index 59d371ed..8e92eb4b 100644
--- a/server/reds-private.h
+++ b/server/reds-private.h
@@ -180,6 +180,8 @@ struct RedsState {
int default_channel_security;
ChannelSecurityOptions *channels_security;
const char *default_renderer;
+ GArray *renderers;
+
};
#endif
diff --git a/server/reds.c b/server/reds.c
index 84b6da52..d074ee01 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -3325,6 +3325,7 @@ SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void)
reds->default_channel_security =
SPICE_CHANNEL_SECURITY_NONE | SPICE_CHANNEL_SECURITY_SSL;
reds->default_renderer = "sw";
+ reds->renderers = g_array_sized_new(FALSE, TRUE, sizeof(uint32_t), RED_RENDERER_LAST);
return reds;
}
@@ -3338,9 +3339,6 @@ static RendererInfo renderers_info[] = {
{RED_RENDERER_INVALID, NULL},
};
-uint32_t renderers[RED_RENDERER_LAST];
-uint32_t num_renderers = 0;
-
static RendererInfo *find_renderer(const char *name)
{
RendererInfo *inf = renderers_info;
@@ -3353,14 +3351,14 @@ static RendererInfo *find_renderer(const char *name)
return NULL;
}
-static int red_add_renderer(const char *name)
+static int reds_add_renderer(RedsState *reds, const char *name)
{
RendererInfo *inf;
- if (num_renderers == RED_RENDERER_LAST || !(inf = find_renderer(name))) {
+ if (reds->renderers->len == RED_RENDERER_LAST || !(inf = find_renderer(name))) {
return FALSE;
}
- renderers[num_renderers++] = inf->id;
+ g_array_append_val(reds->renderers, inf->id);
return TRUE;
}
@@ -3371,7 +3369,7 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *cor
spice_assert(reds == s);
ret = do_spice_init(s, core);
if (s->default_renderer) {
- red_add_renderer(s->default_renderer);
+ reds_add_renderer(s, s->default_renderer);
}
return ret;
}
@@ -3379,6 +3377,7 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *cor
SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *s)
{
spice_assert(reds == s);
+ g_array_unref(s->renderers);
reds_exit();
}
@@ -3649,7 +3648,7 @@ SPICE_GNUC_VISIBLE int spice_server_is_server_mouse(SpiceServer *s)
SPICE_GNUC_VISIBLE int spice_server_add_renderer(SpiceServer *s, const char *name)
{
spice_assert(reds == s);
- if (!red_add_renderer(name)) {
+ if (!reds_add_renderer(s, name)) {
return -1;
}
s->default_renderer = NULL;
@@ -3905,3 +3904,7 @@ SPICE_GNUC_VISIBLE void spice_server_set_seamless_migration(SpiceServer *s, int
spice_debug("seamless migration enabled=%d", enable);
}
+GArray* reds_get_renderers(RedsState *reds)
+{
+ return reds->renderers;
+}
diff --git a/server/reds.h b/server/reds.h
index 9781e0a2..1624bc94 100644
--- a/server/reds.h
+++ b/server/reds.h
@@ -65,6 +65,8 @@ int reds_get_agent_mouse(void); // used by inputs_channel
int reds_has_vdagent(void); // used by inputs channel
void reds_handle_agent_mouse_event(RedsState *reds, const VDAgentMouseState *mouse_state); // used by inputs_channel
+GArray* reds_get_renderers(RedsState *reds);
+
enum {
RED_RENDERER_INVALID,
RED_RENDERER_SW,
@@ -72,9 +74,6 @@ enum {
RED_RENDERER_LAST
};
-extern uint32_t renderers[RED_RENDERER_LAST];
-extern uint32_t num_renderers;
-
extern struct SpiceCoreInterface *core;
extern uint32_t streaming_video;
extern spice_image_compression_t image_compression;