mirror of
https://github.com/gnustep/libs-performance.git
synced 2025-02-16 00:21:29 +00:00
fix size of cache reporting
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/performance/trunk@38806 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
3c90224c87
commit
3859653420
2 changed files with 15 additions and 36 deletions
|
@ -86,7 +86,12 @@
|
|||
- (unsigned) currentObjects;
|
||||
|
||||
/**
|
||||
* Return the total size of the objects currently in the cache.
|
||||
* Return the total size of the objects currently in the cache.<br />
|
||||
* NB. Object sizes are considered independently ... so where cached
|
||||
* objects are containers with common content, the size of the cache
|
||||
* may appear larger than is actually used.<br />
|
||||
* Also, this figure does not consider memmory used by the cache itself
|
||||
* or by the keys, only the memory used by the objects cached.
|
||||
*/
|
||||
- (NSUInteger) currentSize;
|
||||
|
||||
|
|
44
GSCache.m
44
GSCache.m
|
@ -244,36 +244,7 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
|
||||
- (NSUInteger) currentSize
|
||||
{
|
||||
NSUInteger size = 0;
|
||||
NSMapEnumerator e;
|
||||
GSCacheItem *i;
|
||||
id k;
|
||||
|
||||
[my->lock lock];
|
||||
if (nil == my->exclude)
|
||||
{
|
||||
my->exclude = NSCreateHashTable(NSNonOwnedPointerHashCallBacks, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
[my->exclude removeAllObjects];
|
||||
}
|
||||
e = NSEnumerateMapTable(my->contents);
|
||||
while (NSNextMapEnumeratorPair(&e, (void**)&k, (void**)&i) != 0)
|
||||
{
|
||||
size += [i->object sizeInBytesExcluding: my->exclude];
|
||||
}
|
||||
NSEndMapTableEnumeration(&e);
|
||||
if (my->maxSize > 0)
|
||||
{
|
||||
my->currentSize = size;
|
||||
}
|
||||
else
|
||||
{
|
||||
DESTROY(my->exclude);
|
||||
}
|
||||
[my->lock unlock];
|
||||
return size;
|
||||
return my->currentSize;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
|
@ -619,7 +590,7 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
id k;
|
||||
NSUInteger size = 0;
|
||||
|
||||
if (my->exclude == nil)
|
||||
if (nil == my->exclude)
|
||||
{
|
||||
my->exclude
|
||||
= NSCreateHashTable(NSNonOwnedPointerHashCallBacks, 0);
|
||||
|
@ -628,8 +599,8 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
{
|
||||
if (i->size == 0)
|
||||
{
|
||||
[my->exclude removeAllObjects];
|
||||
i->size = [i->object sizeInBytesExcluding: my->exclude];
|
||||
[my->exclude removeAllObjects];
|
||||
}
|
||||
if (i->size > max)
|
||||
{
|
||||
|
@ -703,13 +674,13 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
{
|
||||
if (maxSize > 0)
|
||||
{
|
||||
if (my->exclude == nil)
|
||||
if (nil == my->exclude)
|
||||
{
|
||||
my->exclude
|
||||
= NSCreateHashTable(NSNonOwnedPointerHashCallBacks, 0);
|
||||
}
|
||||
[my->exclude removeAllObjects];
|
||||
addSize = [anObject sizeInBytesExcluding: my->exclude];
|
||||
[my->exclude removeAllObjects];
|
||||
if (addSize > maxSize)
|
||||
{
|
||||
addObjects = 0; // Object too big to cache.
|
||||
|
@ -807,8 +778,10 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
|
||||
- (NSUInteger) sizeInBytesExcluding: (NSHashTable*)exclude
|
||||
{
|
||||
NSUInteger size = [super sizeInBytesExcluding: exclude];
|
||||
NSUInteger size;
|
||||
|
||||
[my->lock lock];
|
||||
size = [super sizeInBytesExcluding: exclude];
|
||||
if (size > 0)
|
||||
{
|
||||
size += sizeof(Item)
|
||||
|
@ -817,6 +790,7 @@ static void removeItem(GSCacheItem *item, GSCacheItem **first)
|
|||
+ [my->name sizeInBytesExcluding: exclude]
|
||||
+ [my->lock sizeInBytesExcluding: exclude];
|
||||
}
|
||||
[my->lock unlock];
|
||||
return size;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue