parent
c9af56a7e8
commit
74cdce3f29
|
@ -9,7 +9,7 @@ evisum_ui_item_cache_new(Evas_Object *parent,
|
||||||
|
|
||||||
cache->parent = parent;
|
cache->parent = parent;
|
||||||
cache->item_create_cb = create_cb;
|
cache->item_create_cb = create_cb;
|
||||||
cache->items = NULL;
|
cache->inactive = cache->active = NULL;
|
||||||
cache->time = time(NULL);
|
cache->time = time(NULL);
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
@ -18,7 +18,7 @@ evisum_ui_item_cache_new(Evas_Object *parent,
|
||||||
if (it)
|
if (it)
|
||||||
{
|
{
|
||||||
it->obj = cache->item_create_cb(parent);
|
it->obj = cache->item_create_cb(parent);
|
||||||
cache->items = eina_list_append(cache->items, it);
|
cache->inactive = eina_list_append(cache->inactive, it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,69 +28,65 @@ evisum_ui_item_cache_new(Evas_Object *parent,
|
||||||
Item_Cache *
|
Item_Cache *
|
||||||
evisum_ui_item_cache_item_get(Evisum_Ui_Cache *cache)
|
evisum_ui_item_cache_item_get(Evisum_Ui_Cache *cache)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l, *l_next;
|
||||||
Item_Cache *it;
|
Item_Cache *it;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(cache->items, l, it)
|
EINA_LIST_FOREACH_SAFE(cache->inactive, l, l_next, it)
|
||||||
{
|
{
|
||||||
if (it->used == 0)
|
cache->inactive = eina_list_remove_list(cache->inactive, l);
|
||||||
{
|
cache->active = eina_list_prepend(cache->active, it);
|
||||||
it->used = 1;
|
return it;
|
||||||
return it;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
it = calloc(1, sizeof(Item_Cache));
|
it = calloc(1, sizeof(Item_Cache));
|
||||||
if (it)
|
if (it)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
Item_Cache *it = calloc(1, sizeof(Item_Cache));
|
||||||
|
if (it)
|
||||||
|
{
|
||||||
|
it->obj = cache->item_create_cb(cache->parent);
|
||||||
|
cache->inactive = eina_list_append(cache->inactive, it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
it->obj = cache->item_create_cb(cache->parent);
|
it->obj = cache->item_create_cb(cache->parent);
|
||||||
it->used = 1;
|
cache->active = eina_list_prepend(cache->active, it);
|
||||||
cache->items = eina_list_append(cache->items, it);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
_clean_cb(const void *p1, const void *p2)
|
|
||||||
{
|
|
||||||
Item_Cache *c1, *c2;
|
|
||||||
|
|
||||||
c1 = (Item_Cache *) p1;
|
|
||||||
c2 = (Item_Cache *) p1;
|
|
||||||
|
|
||||||
if (c1->used == 0 || c2->used == 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
evisum_ui_item_cache_item_release(Evisum_Ui_Cache *cache, Evas_Object *obj)
|
evisum_ui_item_cache_item_release(Evisum_Ui_Cache *cache, Evas_Object *obj)
|
||||||
{
|
{
|
||||||
Item_Cache *it;
|
Item_Cache *it;
|
||||||
Eina_List *l;
|
Eina_List *l, *l_next;
|
||||||
Eina_Bool released = EINA_FALSE;
|
Eina_Bool released = EINA_FALSE;
|
||||||
time_t now = time(NULL);
|
|
||||||
|
|
||||||
if ((now - cache->time) > 60)
|
int n = eina_list_count(cache->inactive);
|
||||||
{
|
|
||||||
cache->items = eina_list_sort(cache->items,
|
|
||||||
eina_list_count(cache->items),
|
|
||||||
_clean_cb);
|
|
||||||
cache->time = now;
|
|
||||||
}
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(cache->items, l, it)
|
EINA_LIST_FOREACH_SAFE(cache->active, l, l_next, it)
|
||||||
{
|
{
|
||||||
if (it->obj == obj)
|
if (it->obj == obj)
|
||||||
{
|
{
|
||||||
it->used = 0;
|
cache->active = eina_list_remove_list(cache->active, l);
|
||||||
evas_object_hide(it->obj);
|
if (n >= 50)
|
||||||
|
{
|
||||||
|
evas_object_del(it->obj);
|
||||||
|
free(it);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evas_object_hide(it->obj);
|
||||||
|
cache->inactive = eina_list_prepend(cache->inactive, it);
|
||||||
|
}
|
||||||
released = EINA_TRUE;
|
released = EINA_TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return released;
|
return released;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,9 +97,9 @@ evisum_ui_item_cache_free(Evisum_Ui_Cache *cache)
|
||||||
|
|
||||||
evas_object_del(cache->parent);
|
evas_object_del(cache->parent);
|
||||||
|
|
||||||
EINA_LIST_FREE(cache->items, it)
|
EINA_LIST_FREE(cache->active, it)
|
||||||
{
|
free(it);
|
||||||
free(it);
|
EINA_LIST_FREE(cache->inactive, it)
|
||||||
}
|
free(it);
|
||||||
free(cache);
|
free(cache);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
#include <Evas.h>
|
#include <Evas.h>
|
||||||
|
|
||||||
typedef struct _Evisum_Ui_Cache {
|
typedef struct _Evisum_Ui_Cache {
|
||||||
Eina_List *items;
|
Eina_List *inactive;
|
||||||
|
Eina_List *active;
|
||||||
Evas_Object *parent;
|
Evas_Object *parent;
|
||||||
Evas_Object *(*item_create_cb)(Evas_Object *);
|
Evas_Object *(*item_create_cb)(Evas_Object *);
|
||||||
time_t time;
|
time_t time;
|
||||||
|
@ -13,7 +14,6 @@ typedef struct _Evisum_Ui_Cache {
|
||||||
|
|
||||||
typedef struct _Item_Cache {
|
typedef struct _Item_Cache {
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
Eina_Bool used;
|
|
||||||
} Item_Cache;
|
} Item_Cache;
|
||||||
|
|
||||||
Evisum_Ui_Cache *
|
Evisum_Ui_Cache *
|
||||||
|
|
|
@ -732,6 +732,8 @@ _process_list(void *data, Ecore_Thread *thread)
|
||||||
}
|
}
|
||||||
|
|
||||||
delay = ui->proc.poll_delay;
|
delay = ui->proc.poll_delay;
|
||||||
|
printf("active %d and inactive %d\n", eina_list_count(pd->cache->active),
|
||||||
|
eina_list_count(pd->cache->inactive));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue