Hi,
eina_bench.patch:
fixes a few things so that e17 bench can run
eina_share_common-mem.patch:
use Eina_Rbtree instead of Eina_Share_Common_Head for top level
structs
Cheers, Jérémy
diff --git a/eina/src/tests/Ecore_Data.h b/eina/src/tests/Ecore_Data.h
index 50d42f1..3d4530c 100644
--- a/eina/src/tests/Ecore_Data.h
+++ b/eina/src/tests/Ecore_Data.h
@@ -415,8 +415,8 @@ struct _ecore_string
int references;
};
-EAPI int ecore_string_init();
-EAPI void ecore_string_shutdown();
+EAPI int ecore_string_init(void);
+EAPI int ecore_string_shutdown(void);
EAPI const char *ecore_string_instance(const char *string);
EAPI void ecore_string_release(const char *string);
diff --git a/eina/src/tests/ecore_strings.c b/eina/src/tests/ecore_strings.c
index d76e4c5..15deae6 100644
--- a/eina/src/tests/ecore_strings.c
+++ b/eina/src/tests/ecore_strings.c
@@ -33,7 +33,7 @@ static int ecore_string_init_count = 0;
* @return Zero on failure, non-zero on successful initialization.
*/
EAPI int
-ecore_string_init()
+ecore_string_init(void)
{
/*
* No strings have been loaded at this point, so create the hash
@@ -138,9 +138,11 @@ ecore_string_hash_dump_stats(void)
/**
* Shutdown the ecore string internal structures
+ * @return 0 when the module is completely shut down, 1 or
+ * greater otherwise.
*/
-EAPI void
-ecore_string_shutdown()
+EAPI int
+ecore_string_shutdown(void)
{
--ecore_string_init_count;
if (!ecore_string_init_count)
@@ -148,6 +150,7 @@ ecore_string_shutdown()
ecore_hash_destroy(ecore_strings);
ecore_strings = NULL;
}
+ return ecore_string_init_count;
}
static void
diff --git a/eina/src/tests/eina_bench_stringshare_e17.c
b/eina/src/tests/eina_bench_stringshare_e17.c
index 6ab0a80..1c45945 100644
--- a/eina/src/tests/eina_bench_stringshare_e17.c
+++ b/eina/src/tests/eina_bench_stringshare_e17.c
@@ -57,10 +57,10 @@ static Eina_Stringshare_Test eina_str = {
static Eina_Stringshare_Test evas_str = {
"evas",
-/* evas_stringshare_init, */
+ NULL,
evas_stringshare_add,
- evas_stringshare_del
-/* evas_stringshare_shutdown */
+ evas_stringshare_del,
+ NULL
};
static Eina_Stringshare_Test ecore_str = {
@@ -71,7 +71,7 @@ static Eina_Stringshare_Test ecore_str = {
ecore_string_shutdown
};
-static Eina_Stringshare_Test *str[] = {
+static Eina_Stringshare_Test *tests[] = {
&eina_str,
&evas_str,
&ecore_str,
@@ -87,16 +87,17 @@ eina_bench_e17_stringshare(Eina_Stringshare_Test *str)
eina_counter_start(cnt);
- str->init();
+ if (str->init)
+ str->init();
#include "strlog"
- str->shutdown();
+ if (str->shutdown)
+ str->shutdown();
eina_counter_stop(cnt, 1);
- fprintf(stderr, "For `%s`:\n", str->name);
- eina_counter_dump(cnt);
+ fprintf(stderr, "For `%s`:\n%s\n", str->name,eina_counter_dump(cnt));
eina_counter_free(cnt);
}
@@ -110,8 +111,8 @@ eina_bench_e17(void)
eina_init();
- for (i = 0; str[i]; ++i)
- eina_bench_e17_stringshare(str[i]);
+ for (i = 0; tests[i]; ++i)
+ eina_bench_e17_stringshare(tests[i]);
eina_shutdown();
#endif
diff --git a/eina/src/lib/eina_share_common.c b/eina/src/lib/eina_share_common.c
index 91ad0db..f7e477a 100644
--- a/eina/src/lib/eina_share_common.c
+++ b/eina/src/lib/eina_share_common.c
@@ -90,7 +90,7 @@
* @cond LOCAL
*/
-#define EINA_SHARE_COMMON_BUCKETS 256
+#define EINA_SHARE_COMMON_TREES 256
#define EINA_SHARE_COMMON_MASK 0xFF
static const char EINA_MAGIC_SHARE_STR[] = "Eina Share";
@@ -137,7 +137,7 @@ struct _Eina_Share
struct _Eina_Share_Common
{
- Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS];
+ Eina_Rbtree *trees[EINA_SHARE_COMMON_TREES];
EINA_MAGIC
};
@@ -406,13 +406,12 @@ _eina_share_common_head_alloc(int slen)
static const char *
_eina_share_common_add_head(Eina_Share *share,
- Eina_Share_Common_Head **p_bucket,
+ Eina_Rbtree **p_tree,
int hash,
const char *str,
unsigned int slen,
unsigned int null_size)
{
- Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
Eina_Share_Common_Head *head;
head = _eina_share_common_head_alloc(slen + null_size);
@@ -439,11 +438,9 @@ _eina_share_common_add_head(Eina_Share *share,
}
static void
-_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket,
+_eina_share_common_del_head(Eina_Rbtree **p_tree,
Eina_Share_Common_Head *head)
{
- Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
-
*p_tree = eina_rbtree_inline_remove
(*p_tree, EINA_RBTREE_GET(head),
EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
@@ -512,10 +509,10 @@
_eina_share_common_head_remove_node(Eina_Share_Common_Head *head,
}
static Eina_Share_Common_Head *
-_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash)
+_eina_share_common_find_hash(Eina_Rbtree *p_tree, int hash)
{
- return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup
- (EINA_RBTREE_GET(bucket), &hash, 0,
+ return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup(
+ p_tree, &hash, 0,
EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL);
}
@@ -644,13 +641,12 @@ eina_share_common_shutdown(Eina_Share **_share)
_eina_share_common_population_stats(share);
/* remove any string still in the table */
- for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
+ for (i = 0; i < EINA_SHARE_COMMON_TREES; i++)
{
- eina_rbtree_delete(EINA_RBTREE_GET(
- share->share->buckets[i]),
+ eina_rbtree_delete(share->share->trees[i],
EINA_RBTREE_FREE_CB(
_eina_share_common_head_free), NULL);
- share->share->buckets[i] = NULL;
+ share->share->trees[i] = NULL;
}
MAGIC_FREE(share->share);
@@ -718,7 +714,8 @@ eina_share_common_add_length(Eina_Share *share,
unsigned int slen,
unsigned int null_size)
{
- Eina_Share_Common_Head **p_bucket, *ed;
+ Eina_Rbtree **tree;
+ Eina_Share_Common_Head *ed;
Eina_Share_Common_Node *el;
int hash_num, hash;
@@ -735,13 +732,13 @@ eina_share_common_add_length(Eina_Share *share,
hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
eina_lock_take(&_mutex_big);
- p_bucket = share->share->buckets + hash_num;
+ tree = share->share->trees + hash_num;
- ed = _eina_share_common_find_hash(*p_bucket, hash);
+ ed = _eina_share_common_find_hash(*tree, hash);
if (!ed)
{
const char *s = _eina_share_common_add_head(share,
- p_bucket,
+ tree,
hash,
str,
slen,
@@ -809,8 +806,8 @@ Eina_Bool
eina_share_common_del(Eina_Share *share, const char *str)
{
unsigned int slen;
+ Eina_Rbtree**tree;
Eina_Share_Common_Head *ed;
- Eina_Share_Common_Head **p_bucket;
Eina_Share_Common_Node *node;
int hash_num, hash;
@@ -838,8 +835,8 @@ eina_share_common_del(Eina_Share *share, const char *str)
hash_num = hash & 0xFF;
hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
- p_bucket = share->share->buckets + hash_num;
- ed = _eina_share_common_find_hash(*p_bucket, hash);
+ tree = share->share->trees + hash_num;
+ ed = _eina_share_common_find_hash(*tree, hash);
if (!ed)
goto on_error;
@@ -852,7 +849,7 @@ eina_share_common_del(Eina_Share *share, const char *str)
MAGIC_FREE(node);
if (!ed->head)
- _eina_share_common_del_head(p_bucket, ed);
+ _eina_share_common_del_head(tree, ed);
else
_eina_share_common_population_head_del(share, ed);
@@ -898,9 +895,9 @@ eina_share_common_dump(Eina_Share *share, void
(*additional_dump)(
printf("DDD:-------------------\n");
eina_lock_take(&_mutex_big);
- for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
+ for (i = 0; i < EINA_SHARE_COMMON_TREES; i++)
{
- if (!share->share->buckets[i])
+ if (!share->share->trees[i])
{
continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n",
i,
@@ -908,7 +905,7 @@ eina_share_common_dump(Eina_Share *share, void
(*additional_dump)(
// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node));
it = eina_rbtree_iterator_prefix(
- (Eina_Rbtree *)share->share->buckets[i]);
+ (Eina_Rbtree *)share->share->trees[i]);
eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check),
&di);
eina_iterator_free(it);
}
------------------------------------------------------------------------------
WINDOWS 8 is here.
Millions of people. Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel