29 #define DISABLE_DEBUGLOG
31 #include "multicache_p.h"
33 #include <gwenhywfar/debug.h>
45 GWEN_MULTICACHE_ENTRY *e;
189 assert(ct->_refCount);
190 if (ct->_refCount==1) {
192 GWEN_MultiCache_Entry_IdMap_free(ct->entryMap);
205 GWEN_MULTICACHE_ENTRY *e;
208 assert(ct->_refCount);
210 e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap,
id);
225 uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) {
227 GWEN_MULTICACHE_ENTRY *e;
230 assert(ct->_refCount);
232 e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap,
id);
254 uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4,
257 GWEN_MULTICACHE_ENTRY *e;
260 assert(ct->_refCount);
262 e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap,
id);
285 GWEN_MULTICACHE_ENTRY *e;
288 assert(ct->_refCount);
293 GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap,
id, (
void*) e);
299 uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) {
300 GWEN_MULTICACHE_ENTRY *e;
303 assert(ct->_refCount);
313 GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap,
id, (
void*) e);
319 uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4,
321 GWEN_MULTICACHE_ENTRY *e;
324 assert(ct->_refCount);
335 GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap,
id, (
void*) e);
341 GWEN_MULTICACHE_ENTRY *e;
344 assert(ct->_refCount);
346 e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap,
id);
355 assert(ct->_refCount);
364 assert(ct->_refCount);
373 assert(ct->_refCount);
382 assert(ct->_refCount);
385 return ct->attachFn(p);
394 assert(ct->_refCount);
397 return ct->freeFn(p);
405 assert(ct->_refCount);
424 mc->typeList=GWEN_MultiCache_Type_List_new();
425 mc->entryList=GWEN_MultiCache_Entry_List_new();
434 assert(mc->_refCount);
436 if (mc->_refCount==1) {
437 GWEN_MULTICACHE_ENTRY *ce;
439 ce=GWEN_MultiCache_Entry_List_First(mc->entryList);
442 ce=GWEN_MultiCache_Entry_List_First(mc->entryList);
445 GWEN_MultiCache_Entry_List_free(mc->entryList);
446 GWEN_MultiCache_Type_List_free(mc->typeList);
448 DBG_NOTICE(
GWEN_LOGDOMAIN,
"MultiCache usage: %lld hits, %lld misses, %lld drops, %lld mb max memory used from %lld mb (%d %%)",
449 (
unsigned long long int) mc->cacheHits,
450 (
unsigned long long int) mc->cacheMisses,
451 (
unsigned long long int) mc->cacheDrops,
452 (
unsigned long long int) ((mc->maxSizeUsed)/(1024*1024)),
453 (
unsigned long long int) ((mc->maxSize)/(1024*1024)),
454 (
int)((mc->maxSizeUsed)*100.0/mc->maxSize));
468 assert(mc->_refCount);
469 return mc->maxSizeUsed;
478 assert(mc->_refCount);
482 if ((mc->currentSize+esize)>mc->maxSize) {
486 nsize=(mc->currentSize+esize)-mc->maxSize;
488 GWEN_MULTICACHE_ENTRY *ce;
490 ce=GWEN_MultiCache_Entry_List_First(mc->entryList);
503 mc->currentSize+=esize;
504 if (mc->currentSize>mc->maxSizeUsed)
505 mc->maxSizeUsed=mc->currentSize;
507 GWEN_MultiCache_Entry_List_Add(e, mc->entryList);
517 assert(mc->_refCount);
519 assert(e->cacheType);
522 GWEN_MultiCache_Entry_List_Del(e);
531 mc->currentSize-=esize;
537 GWEN_MULTICACHE_ENTRY *ce;
540 assert(mc->_refCount);
544 ce=GWEN_MultiCache_Entry_List_First(mc->entryList);
546 GWEN_MULTICACHE_ENTRY *ceNext;
548 ceNext=GWEN_MultiCache_Entry_List_Next(ce);
559 assert(mc->_refCount);
562 GWEN_MultiCache_Entry_List_Del(e);
563 GWEN_MultiCache_Entry_List_Add(e, mc->entryList);
570 assert(mc->_refCount);
578 assert(mc->_refCount);