Fix T37898: blenderplayer painfully slow in recent builds

Issue was caused by recent image cache rewrite and root of
the issue goes to the fact that blender player doesn't
initialize cache limiter and it uses 32meg of memory only.

This leads to infinite image loading/freeing.

For now disabled cache limiter in game engine, this brings
back old behavior.

In theory we might be smarter here, but better caching
policy is to be discussed.
This commit is contained in:
Sergey Sharybin 2013-12-22 15:26:59 +06:00
parent 78698a2ecf
commit ff9974ed69
Notes: blender-bot 2023-02-14 11:27:33 +01:00
Referenced by issue #37898, blenderplayer painfully slow in recent builds
6 changed files with 26 additions and 0 deletions

View File

@ -69,6 +69,8 @@ class MEM_CacheLimiter;
extern "C" {
void MEM_CacheLimiter_set_maximum(size_t m);
size_t MEM_CacheLimiter_get_maximum();
void MEM_CacheLimiter_set_disabled(bool disabled);
bool MEM_CacheLimiter_is_disabled(void);
};
#endif
@ -177,8 +179,13 @@ public:
void enforce_limits() {
size_t max = MEM_CacheLimiter_get_maximum();
bool is_disabled = MEM_CacheLimiter_is_disabled();
size_t mem_in_use, cur_size;
if (is_disabled) {
return;
}
if (max == 0) {
return;
}

View File

@ -53,6 +53,8 @@ typedef bool (*MEM_CacheLimiter_ItemDestroyable_Func) (void*);
#ifndef __MEM_CACHELIMITER_H__
void MEM_CacheLimiter_set_maximum(size_t m);
size_t MEM_CacheLimiter_get_maximum(void);
void MEM_CacheLimiter_set_disabled(bool disabled);
bool MEM_CacheLimiter_is_disabled(void);
#endif /* __MEM_CACHELIMITER_H__ */
/**

View File

@ -29,6 +29,8 @@
#include "MEM_CacheLimiter.h"
#include "MEM_CacheLimiterC-Api.h"
static bool is_disabled = false;
static size_t & get_max()
{
static size_t m = 32 * 1024 * 1024;
@ -45,6 +47,16 @@ size_t MEM_CacheLimiter_get_maximum()
return get_max();
}
void MEM_CacheLimiter_set_disabled(bool disabled)
{
is_disabled = disabled;
}
bool MEM_CacheLimiter_is_disabled(void)
{
return is_disabled;
}
class MEM_CacheLimiterHandleCClass;
class MEM_CacheLimiterCClass;

View File

@ -50,6 +50,7 @@ set(INC
../../../../intern/ghost
../../../../intern/guardedalloc
../../../../intern/string
../../../../intern/memutil
)
set(INC_SYS

View File

@ -52,6 +52,8 @@ extern "C"
{
#endif // __cplusplus
#include "MEM_guardedalloc.h"
#include "MEM_CacheLimiterC-Api.h"
#include "BLI_threads.h"
#include "BLI_mempool.h"
#include "BLI_blenlib.h"
@ -437,6 +439,7 @@ int main(int argc, char** argv)
free_main(G.main);
G.main = NULL;
MEM_CacheLimiter_set_disabled(true);
IMB_init();
BKE_images_init();
BKE_modifier_init();

View File

@ -41,6 +41,7 @@ incs = [
'#intern/string',
'#intern/ghost',
'#intern/guardedalloc',
'#intern/memutil',
'#intern/moto/include',
'#intern/container',
'#intern/audaspace/intern',