[Spice-devel] [PATCH 5/5] server: rename red_client_cache.h to cache_item.tmpl.c
Frediano Ziglio
fziglio at redhat.com
Fri Oct 16 04:27:39 PDT 2015
>
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>
> ---
> server/Makefile.am | 2 +-
> server/cache_item.tmpl.c | 139
> ++++++++++++++++++++++++++++++++++++++++++++++
> server/red_client_cache.h | 139
> ----------------------------------------------
> server/red_worker.c | 4 +-
> 4 files changed, 142 insertions(+), 142 deletions(-)
> create mode 100644 server/cache_item.tmpl.c
> delete mode 100644 server/red_client_cache.h
>
> diff --git a/server/Makefile.am b/server/Makefile.am
> index dfa9ea9..ed02229 100644
> --- a/server/Makefile.am
> +++ b/server/Makefile.am
> @@ -87,7 +87,6 @@ libspice_server_la_SOURCES = \
> red_bitmap_utils.h \
> red_channel.c \
> red_channel.h \
> - red_client_cache.h \
> red_common.h \
> dispatcher.c \
> dispatcher.h \
> @@ -144,6 +143,7 @@ libspice_server_la_SOURCES += \
> endif
>
> EXTRA_DIST = \
> + cache_item.tmpl.c \
> glz_encode_match_tmpl.c \
> glz_encode_tmpl.c \
> spice-server.syms \
> diff --git a/server/cache_item.tmpl.c b/server/cache_item.tmpl.c
> new file mode 100644
> index 0000000..dc314c0
> --- /dev/null
> +++ b/server/cache_item.tmpl.c
> @@ -0,0 +1,139 @@
> +/*
> + Copyright (C) 2009 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/>.
> +*/
> +
> +#if defined(CLIENT_CURSOR_CACHE)
> +
> +#define CACHE_NAME cursor_cache
> +#define CACHE_HASH_KEY CURSOR_CACHE_HASH_KEY
> +#define CACHE_HASH_SIZE CURSOR_CACHE_HASH_SIZE
> +#define CACHE_INVAL_TYPE SPICE_MSG_CURSOR_INVAL_ONE
> +#define FUNC_NAME(name) red_cursor_cache_##name
> +#define VAR_NAME(name) cursor_cache_##name
> +#define CHANNEL CursorChannel
> +#define CHANNELCLIENT CursorChannelClient
> +
> +#elif defined(CLIENT_PALETTE_CACHE)
> +
> +#define CACHE_NAME palette_cache
> +#define CACHE_HASH_KEY PALETTE_CACHE_HASH_KEY
> +#define CACHE_HASH_SIZE PALETTE_CACHE_HASH_SIZE
> +#define CACHE_INVAL_TYPE SPICE_MSG_DISPLAY_INVAL_PALETTE
> +#define FUNC_NAME(name) red_palette_cache_##name
> +#define VAR_NAME(name) palette_cache_##name
> +#define CHANNEL DisplayChannel
> +#define CHANNELCLIENT DisplayChannelClient
> +#else
> +
> +#error "no cache type."
> +
> +#endif
> +
> +#define CHANNEL_FROM_RCC(rcc) SPICE_CONTAINEROF((rcc)->channel, CHANNEL,
> common.base);
> +
> +static CacheItem *FUNC_NAME(find)(CHANNELCLIENT *channel_client, uint64_t
> id)
> +{
> + CacheItem *item = channel_client->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);
> + break;
> + }
> + item = item->u.cache_data.next;
> + }
> + return item;
> +}
> +
> +static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, CacheItem
> *item)
> +{
> + CacheItem **now;
> + CHANNEL *channel = CHANNEL_FROM_RCC(&channel_client->common.base);
> + spice_assert(item);
> +
> + now = &channel_client->CACHE_NAME[CACHE_HASH_KEY(item->id)];
> + for (;;) {
> + spice_assert(*now);
> + if (*now == item) {
> + *now = item->u.cache_data.next;
> + break;
> + }
> + 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->size;
> +
> + red_channel_pipe_item_init(&channel->common.base, &item->u.pipe_data,
> PIPE_ITEM_TYPE_INVAL_ONE);
> + red_channel_client_pipe_add_tail(&channel_client->common.base,
> &item->u.pipe_data); // for now
> +}
> +
> +static int FUNC_NAME(add)(CHANNELCLIENT *channel_client, uint64_t id, size_t
> size)
> +{
> + CacheItem *item;
> + int key;
> +
> + item = spice_new(CacheItem, 1);
> +
> + channel_client->VAR_NAME(available) -= size;
> + while (channel_client->VAR_NAME(available) < 0) {
> + CacheItem *tail = (CacheItem
> *)ring_get_tail(&channel_client->VAR_NAME(lru));
> + if (!tail) {
> + channel_client->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;
> + ring_item_init(&item->u.cache_data.lru_link);
> + ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
> + item->id = id;
> + item->size = size;
> + item->inval_type = CACHE_INVAL_TYPE;
> + return TRUE;
> +}
> +
> +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]) {
> + CacheItem *item = channel_client->CACHE_NAME[i];
> + channel_client->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;
> +}
> +
> +
> +#undef CACHE_NAME
> +#undef CACHE_HASH_KEY
> +#undef CACHE_HASH_SIZE
> +#undef CACHE_INVAL_TYPE
> +#undef CACHE_MAX_CLIENT_SIZE
> +#undef FUNC_NAME
> +#undef VAR_NAME
> +#undef CHANNEL
> +#undef CHANNELCLIENT
> +#undef CHANNEL_FROM_RCC
> diff --git a/server/red_client_cache.h b/server/red_client_cache.h
> deleted file mode 100644
> index dc314c0..0000000
> --- a/server/red_client_cache.h
> +++ /dev/null
> @@ -1,139 +0,0 @@
> -/*
> - Copyright (C) 2009 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/>.
> -*/
> -
> -#if defined(CLIENT_CURSOR_CACHE)
> -
> -#define CACHE_NAME cursor_cache
> -#define CACHE_HASH_KEY CURSOR_CACHE_HASH_KEY
> -#define CACHE_HASH_SIZE CURSOR_CACHE_HASH_SIZE
> -#define CACHE_INVAL_TYPE SPICE_MSG_CURSOR_INVAL_ONE
> -#define FUNC_NAME(name) red_cursor_cache_##name
> -#define VAR_NAME(name) cursor_cache_##name
> -#define CHANNEL CursorChannel
> -#define CHANNELCLIENT CursorChannelClient
> -
> -#elif defined(CLIENT_PALETTE_CACHE)
> -
> -#define CACHE_NAME palette_cache
> -#define CACHE_HASH_KEY PALETTE_CACHE_HASH_KEY
> -#define CACHE_HASH_SIZE PALETTE_CACHE_HASH_SIZE
> -#define CACHE_INVAL_TYPE SPICE_MSG_DISPLAY_INVAL_PALETTE
> -#define FUNC_NAME(name) red_palette_cache_##name
> -#define VAR_NAME(name) palette_cache_##name
> -#define CHANNEL DisplayChannel
> -#define CHANNELCLIENT DisplayChannelClient
> -#else
> -
> -#error "no cache type."
> -
> -#endif
> -
> -#define CHANNEL_FROM_RCC(rcc) SPICE_CONTAINEROF((rcc)->channel, CHANNEL,
> common.base);
> -
> -static CacheItem *FUNC_NAME(find)(CHANNELCLIENT *channel_client, uint64_t
> id)
> -{
> - CacheItem *item = channel_client->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);
> - break;
> - }
> - item = item->u.cache_data.next;
> - }
> - return item;
> -}
> -
> -static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, CacheItem
> *item)
> -{
> - CacheItem **now;
> - CHANNEL *channel = CHANNEL_FROM_RCC(&channel_client->common.base);
> - spice_assert(item);
> -
> - now = &channel_client->CACHE_NAME[CACHE_HASH_KEY(item->id)];
> - for (;;) {
> - spice_assert(*now);
> - if (*now == item) {
> - *now = item->u.cache_data.next;
> - break;
> - }
> - 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->size;
> -
> - red_channel_pipe_item_init(&channel->common.base, &item->u.pipe_data,
> PIPE_ITEM_TYPE_INVAL_ONE);
> - red_channel_client_pipe_add_tail(&channel_client->common.base,
> &item->u.pipe_data); // for now
> -}
> -
> -static int FUNC_NAME(add)(CHANNELCLIENT *channel_client, uint64_t id, size_t
> size)
> -{
> - CacheItem *item;
> - int key;
> -
> - item = spice_new(CacheItem, 1);
> -
> - channel_client->VAR_NAME(available) -= size;
> - while (channel_client->VAR_NAME(available) < 0) {
> - CacheItem *tail = (CacheItem
> *)ring_get_tail(&channel_client->VAR_NAME(lru));
> - if (!tail) {
> - channel_client->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;
> - ring_item_init(&item->u.cache_data.lru_link);
> - ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
> - item->id = id;
> - item->size = size;
> - item->inval_type = CACHE_INVAL_TYPE;
> - return TRUE;
> -}
> -
> -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]) {
> - CacheItem *item = channel_client->CACHE_NAME[i];
> - channel_client->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;
> -}
> -
> -
> -#undef CACHE_NAME
> -#undef CACHE_HASH_KEY
> -#undef CACHE_HASH_SIZE
> -#undef CACHE_INVAL_TYPE
> -#undef CACHE_MAX_CLIENT_SIZE
> -#undef FUNC_NAME
> -#undef VAR_NAME
> -#undef CHANNEL
> -#undef CHANNELCLIENT
> -#undef CHANNEL_FROM_RCC
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 9a119a3..147c679 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -1581,11 +1581,11 @@ static void common_release_recv_buf(RedChannelClient
> *rcc, uint16_t type, uint32
> }
>
> #define CLIENT_CURSOR_CACHE
> -#include "red_client_cache.h"
> +#include "cache_item.tmpl.c"
> #undef CLIENT_CURSOR_CACHE
>
> #define CLIENT_PALETTE_CACHE
> -#include "red_client_cache.h"
> +#include "cache_item.tmpl.c"
> #undef CLIENT_PALETTE_CACHE
>
> static void red_reset_palette_cache(DisplayChannelClient *dcc)
This is the same diff with --find-copy-harder
diff --git a/server/Makefile.am b/server/Makefile.am
index dfa9ea9..ed02229 100644
--- a/server/Makefile.am
+++ b/server/Makefile.am
@@ -87,7 +87,6 @@ libspice_server_la_SOURCES = \
red_bitmap_utils.h \
red_channel.c \
red_channel.h \
- red_client_cache.h \
red_common.h \
dispatcher.c \
dispatcher.h \
@@ -144,6 +143,7 @@ libspice_server_la_SOURCES += \
endif
EXTRA_DIST = \
+ cache_item.tmpl.c \
glz_encode_match_tmpl.c \
glz_encode_tmpl.c \
spice-server.syms \
diff --git a/server/red_client_cache.h b/server/cache_item.tmpl.c
similarity index 100%
rename from server/red_client_cache.h
rename to server/cache_item.tmpl.c
diff --git a/server/red_worker.c b/server/red_worker.c
index 9a119a3..147c679 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -1581,11 +1581,11 @@ static void common_release_recv_buf(RedChannelClient *rcc, uint16_t type, uint32
}
#define CLIENT_CURSOR_CACHE
-#include "red_client_cache.h"
+#include "cache_item.tmpl.c"
#undef CLIENT_CURSOR_CACHE
#define CLIENT_PALETTE_CACHE
-#include "red_client_cache.h"
+#include "cache_item.tmpl.c"
#undef CLIENT_PALETTE_CACHE
static void red_reset_palette_cache(DisplayChannelClient *dcc)
I think the change from _SOURCES to EXTRA_DIST in the makefile is just style and coherency
(other templates are in EXTRA_DIST).
Frediano
More information about the Spice-devel
mailing list