Эх сурвалжийг харах

[cpp] Fixed up Pool to not be dumb, added more stats to test harness.

badlogic 7 жил өмнө
parent
commit
3cf3312180

+ 14 - 9
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<Allocation>::iterator it = allocated.begin(); it != allocated.end(); it++) {
+	for (std::vector<Allocation>::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<Allocation>::iterator it = allocated.begin(); it != allocated.end(); it++) {
+	for (std::vector<Allocation>::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<Allocation>::iterator it = allocated.begin(); it != allocated.end(); it++) {
+	for (std::vector<Allocation>::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);
 }

+ 4 - 1
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<Allocation> allocated;
+		std::vector<Allocation> _allocated;
+		size_t _allocations;
+		size_t _reallocations;
+		size_t _frees;
 	};
 }
 

+ 2 - 2
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;
             }