diff --git a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp index a31fee950..bff8bf2af 100644 --- a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp +++ b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp @@ -33,20 +33,23 @@ void *Spine::TestSpineExtension::_alloc(size_t size, const char *file, int line) { void* result = DefaultSpineExtension::_alloc(size, file, line); - allocated.push_back(Allocation(result, size, file, line)); + _allocated.push_back(Allocation(result, size, file, line)); + _allocations++; return result; } void *Spine::TestSpineExtension::_calloc(size_t size, const char *file, int line) { void* result = DefaultSpineExtension::_calloc(size, file, line); - allocated.push_back(Allocation(result, size, file, line)); + _allocated.push_back(Allocation(result, size, file, line)); + _allocations++; return result; } void *Spine::TestSpineExtension::_realloc(void *ptr, size_t size, const char *file, int line) { void* result = DefaultSpineExtension::_realloc(ptr, size, file, line); + _reallocations++; - for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + for (std::vector::iterator it = _allocated.begin(); it != _allocated.end(); it++) { if (it->address == ptr) { it->address = result; it->size = size; @@ -56,16 +59,17 @@ void *Spine::TestSpineExtension::_realloc(void *ptr, size_t size, const char *fi } } - allocated.push_back(Allocation(result, size, file, line)); + _allocated.push_back(Allocation(result, size, file, line)); return result; } void Spine::TestSpineExtension::_free(void *mem, const char *file, int line) { - for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + for (std::vector::iterator it = _allocated.begin(); it != _allocated.end(); it++) { if (it->address == mem) { DefaultSpineExtension::_free(mem, file, line); - allocated.erase(it); + _frees++; + _allocated.erase(it); return; } } @@ -75,12 +79,13 @@ void Spine::TestSpineExtension::_free(void *mem, const char *file, int line) { } void Spine::TestSpineExtension::reportLeaks() { - for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + for (std::vector::iterator it = _allocated.begin(); it != _allocated.end(); it++) { printf("\"%s:%i (%zu bytes at %p)\n", it->fileName, it->line, it->size, it->address); } - if (allocated.empty()) printf("No leaks detected"); + printf("allocations: %lu, reallocations: %lu, frees: %lu\n", _allocations, _reallocations, _frees); + if (_allocated.empty()) printf("No leaks detected"); } void Spine::TestSpineExtension::clearAllocations() { - allocated.resize(0); + _allocated.resize(0); } diff --git a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h index ee9f49f25..18d97f68f 100644 --- a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h +++ b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h @@ -64,7 +64,10 @@ namespace Spine { virtual void _free(void* mem, const char* file, int line); private: - std::vector allocated; + std::vector _allocated; + size_t _allocations; + size_t _reallocations; + size_t _frees; }; } diff --git a/spine-cpp/spine-cpp/include/spine/Pool.h b/spine-cpp/spine-cpp/include/spine/Pool.h index 2f04c19e5..d14fceb3b 100644 --- a/spine-cpp/spine-cpp/include/spine/Pool.h +++ b/spine-cpp/spine-cpp/include/spine/Pool.h @@ -49,9 +49,9 @@ namespace Spine { T* obtain() { if (_objects.size() > 0) { - T** object = _objects.begin(); + T** object = _objects.end(); T* ret = *object; - _objects.removeAt(0); + _objects.removeAt(_objects.size() - 1); return ret; }