[Scummvm-cvs-logs] SF.net SVN: scummvm:[40292] scummvm/trunk/common/memorypool.cpp

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon May 4 00:45:47 CEST 2009


Revision: 40292
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40292&view=rev
Author:   fingolfin
Date:     2009-05-03 22:45:46 +0000 (Sun, 03 May 2009)

Log Message:
-----------
COMMON: Optimized MemoryPool::freeUnusedPages (if many pages are phased out at once, don't copy everything multiple times around)

Modified Paths:
--------------
    scummvm/trunk/common/memorypool.cpp

Modified: scummvm/trunk/common/memorypool.cpp
===================================================================
--- scummvm/trunk/common/memorypool.cpp	2009-05-03 22:45:31 UTC (rev 40291)
+++ scummvm/trunk/common/memorypool.cpp	2009-05-03 22:45:46 UTC (rev 40292)
@@ -149,14 +149,16 @@
 
 //	printf("freed %d pages out of %d\n", (int)freedPagesCount, (int)_pages.size());
 
-	for (size_t i = 0; i < _pages.size(); )  {
-		if (_pages[i].start == NULL) {
-			_pages.remove_at(i);
-			// We just removed an entry, so we do not advance "i"
-		} else {
-			++i;
+	// Remove all now unused pages
+	size_t newSize = 0;
+	for (size_t i = 0; i < _pages.size(); ++i) {
+		if (_pages[i].start != NULL) {
+			if (newSize != i)
+				_pages[newSize] = _pages[i];
+			++newSize;
 		}
 	}
+	_pages.resize(newSize);
 
 	// Reset _chunksPerPage
 	_chunksPerPage = INITIAL_CHUNKS_PER_PAGE;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list