[cpp] Fixes #1444. SpineObject was using the wrong calloc.

This commit is contained in:
badlogic 2019-09-18 17:29:21 +02:00
parent 372b8ff425
commit e89043b1f6
3 changed files with 14 additions and 3 deletions

View File

@ -112,7 +112,7 @@ bool AppDelegate::applicationDidFinishLaunching () {
// create a scene. it's an autorelease object // create a scene. it's an autorelease object
//auto scene = RaptorExample::scene(); //auto scene = RaptorExample::scene();
auto scene = MixAndMatchExample::scene(); auto scene = BatchingExample::scene();
// run // run
director->runWithScene(scene); director->runWithScene(scene);

View File

@ -63,12 +63,14 @@ public:
void clearAllocations() { void clearAllocations() {
_allocated.clear(); _allocated.clear();
_usedMemory = 0;
} }
virtual void *_alloc(size_t size, const char *file, int line) { virtual void *_alloc(size_t size, const char *file, int line) {
void *result = _extension->_alloc(size, file, line); void *result = _extension->_alloc(size, file, line);
_allocated[result] = Allocation(result, size, file, line); _allocated[result] = Allocation(result, size, file, line);
_allocations++; _allocations++;
_usedMemory += size;
return result; return result;
} }
@ -76,14 +78,17 @@ public:
void *result = _extension->_calloc(size, file, line); void *result = _extension->_calloc(size, file, line);
_allocated[result] = Allocation(result, size, file, line); _allocated[result] = Allocation(result, size, file, line);
_allocations++; _allocations++;
_usedMemory += size;
return result; return result;
} }
virtual void *_realloc(void *ptr, size_t size, const char *file, int line) { virtual void *_realloc(void *ptr, size_t size, const char *file, int line) {
if (_allocated.count(ptr)) _usedMemory -= _allocated[ptr].size;
_allocated.erase(ptr); _allocated.erase(ptr);
void *result = _extension->_realloc(ptr, size, file, line); void *result = _extension->_realloc(ptr, size, file, line);
_reallocations++; _reallocations++;
_allocated[result] = Allocation(result, size, file, line); _allocated[result] = Allocation(result, size, file, line);
_usedMemory += size;
return result; return result;
} }
@ -91,6 +96,7 @@ public:
if (_allocated.count(mem)) { if (_allocated.count(mem)) {
_extension->_free(mem, file, line); _extension->_free(mem, file, line);
_frees++; _frees++;
_usedMemory -= _allocated[mem].size;
_allocated.erase(mem); _allocated.erase(mem);
return; return;
} }
@ -103,12 +109,17 @@ public:
return _extension->_readFile(path, length); return _extension->_readFile(path, length);
} }
size_t getUsedMemory() {
return _usedMemory;
}
private: private:
SpineExtension* _extension; SpineExtension* _extension;
std::map<void*, Allocation> _allocated; std::map<void*, Allocation> _allocated;
size_t _allocations; size_t _allocations;
size_t _reallocations; size_t _reallocations;
size_t _frees; size_t _frees;
size_t _usedMemory;
}; };
} }

View File

@ -36,11 +36,11 @@
using namespace spine; using namespace spine;
void *SpineObject::operator new(size_t sz) { void *SpineObject::operator new(size_t sz) {
return SpineExtension::calloc<SpineObject>(sz, __FILE__, __LINE__); return SpineExtension::getInstance()->_calloc(sz, __FILE__, __LINE__);
} }
void *SpineObject::operator new(size_t sz, const char *file, int line) { void *SpineObject::operator new(size_t sz, const char *file, int line) {
return SpineExtension::calloc<SpineObject>(sz, file, line); return SpineExtension::getInstance()->_calloc(sz, file, line);
} }
void *SpineObject::operator new(size_t sz, void *ptr) { void *SpineObject::operator new(size_t sz, void *ptr) {