forked from bartvdbraak/blender
Cache limiter will now work properly with limits >= 4Gb
This commit is contained in:
parent
54dc5f1654
commit
f07f59c760
@ -65,8 +65,8 @@ class MEM_CacheLimiter;
|
||||
|
||||
#ifndef __MEM_cache_limiter_c_api_h_included__
|
||||
extern "C" {
|
||||
extern void MEM_CacheLimiter_set_maximum(intptr_t m);
|
||||
extern intptr_t MEM_CacheLimiter_get_maximum();
|
||||
extern void MEM_CacheLimiter_set_maximum(size_t m);
|
||||
extern size_t MEM_CacheLimiter_get_maximum();
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -125,7 +125,7 @@ class MEM_CacheLimiter {
|
||||
public:
|
||||
typedef typename std::list<MEM_CacheLimiterHandle<T> *,
|
||||
MEM_Allocator<MEM_CacheLimiterHandle<T> *> >::iterator iterator;
|
||||
typedef intptr_t (*MEM_CacheLimiter_DataSize_Func) (void *data);
|
||||
typedef size_t (*MEM_CacheLimiter_DataSize_Func) (void *data);
|
||||
MEM_CacheLimiter(MEM_CacheLimiter_DataSize_Func getDataSize_)
|
||||
: getDataSize(getDataSize_) {
|
||||
}
|
||||
@ -146,8 +146,8 @@ public:
|
||||
delete handle;
|
||||
}
|
||||
void enforce_limits() {
|
||||
intptr_t max = MEM_CacheLimiter_get_maximum();
|
||||
intptr_t mem_in_use, cur_size;
|
||||
size_t max = MEM_CacheLimiter_get_maximum();
|
||||
size_t mem_in_use, cur_size;
|
||||
|
||||
if (max == 0) {
|
||||
return;
|
||||
@ -188,8 +188,8 @@ public:
|
||||
handle->me = it;
|
||||
}
|
||||
private:
|
||||
intptr_t total_size() {
|
||||
intptr_t size = 0;
|
||||
size_t total_size() {
|
||||
size_t size = 0;
|
||||
for (iterator it = queue.begin(); it != queue.end(); it++) {
|
||||
size+= getDataSize((*it)->get()->get_data());
|
||||
}
|
||||
|
@ -42,10 +42,10 @@ typedef struct MEM_CacheLimiterHandle_s MEM_CacheLimiterHandleC;
|
||||
typedef void(*MEM_CacheLimiter_Destruct_Func)(void*);
|
||||
|
||||
/* function used to measure stored data element size */
|
||||
typedef intptr_t(*MEM_CacheLimiter_DataSize_Func) (void*);
|
||||
typedef size_t(*MEM_CacheLimiter_DataSize_Func) (void*);
|
||||
|
||||
#ifndef MEM_CACHELIMITER_H
|
||||
extern void MEM_CacheLimiter_set_maximum(int m);
|
||||
extern void MEM_CacheLimiter_set_maximum(size_t m);
|
||||
extern int MEM_CacheLimiter_get_maximum(void);
|
||||
#endif // MEM_CACHELIMITER_H
|
||||
/**
|
||||
|
@ -29,18 +29,18 @@
|
||||
#include "MEM_CacheLimiter.h"
|
||||
#include "MEM_CacheLimiterC-Api.h"
|
||||
|
||||
static intptr_t & get_max()
|
||||
static size_t & get_max()
|
||||
{
|
||||
static intptr_t m = 32*1024*1024;
|
||||
static size_t m = 32*1024*1024;
|
||||
return m;
|
||||
}
|
||||
|
||||
void MEM_CacheLimiter_set_maximum(intptr_t m)
|
||||
void MEM_CacheLimiter_set_maximum(size_t m)
|
||||
{
|
||||
get_max() = m;
|
||||
}
|
||||
|
||||
intptr_t MEM_CacheLimiter_get_maximum()
|
||||
size_t MEM_CacheLimiter_get_maximum()
|
||||
{
|
||||
return get_max();
|
||||
}
|
||||
|
@ -147,10 +147,10 @@ static void IMB_moviecache_destructor(void *p)
|
||||
}
|
||||
|
||||
/* approximate size of ImBuf in memory */
|
||||
static intptr_t IMB_get_size_in_memory(ImBuf *ibuf)
|
||||
static size_t IMB_get_size_in_memory(ImBuf *ibuf)
|
||||
{
|
||||
int a;
|
||||
intptr_t size= 0, channel_size= 0;
|
||||
size_t size= 0, channel_size= 0;
|
||||
|
||||
size+= sizeof(ImBuf);
|
||||
|
||||
@ -176,9 +176,9 @@ static intptr_t IMB_get_size_in_memory(ImBuf *ibuf)
|
||||
return size;
|
||||
}
|
||||
|
||||
static intptr_t get_item_size (void *p)
|
||||
static size_t get_item_size (void *p)
|
||||
{
|
||||
intptr_t size= sizeof(MovieCacheItem);
|
||||
size_t size= sizeof(MovieCacheItem);
|
||||
MovieCacheItem *item= (MovieCacheItem *) p;
|
||||
|
||||
if(item->ibuf)
|
||||
|
@ -277,7 +277,7 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
|
||||
static void wm_init_userdef(bContext *C)
|
||||
{
|
||||
UI_init_userdef();
|
||||
MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
|
||||
MEM_CacheLimiter_set_maximum(((size_t)U.memcachelimit) * 1024 * 1024);
|
||||
sound_init(CTX_data_main(C));
|
||||
|
||||
/* needed so loading a file from the command line respects user-pref [#26156] */
|
||||
|
Loading…
Reference in New Issue
Block a user