From 230ef3c7856a046bef3a925691e33f499fa305ed Mon Sep 17 00:00:00 2001 From: havoc Date: Fri, 8 Jan 2010 05:04:05 +0000 Subject: [PATCH] reduce memory usage by several megabytes git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9804 d7cf8633-e32d-0410-b094-e92efae38249 ::stable-branch::merge=c7dbbb3b81a102d0bb9af389797209ad980cac1a --- netconn.c | 27 +++++++++++++++++++++++---- progsvm.h | 9 +++++++++ world.h | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/netconn.c b/netconn.c index 657c5120..9da54c77 100755 --- a/netconn.c +++ b/netconn.c @@ -150,8 +150,9 @@ int serverlist_sortflags; int serverlist_viewcount = 0; serverlist_entry_t *serverlist_viewlist[SERVERLIST_VIEWLISTSIZE]; -int serverlist_cachecount; -serverlist_entry_t serverlist_cache[SERVERLIST_TOTALSIZE]; +int serverlist_maxcachecount = 0; +int serverlist_cachecount = 0; +serverlist_entry_t *serverlist_cache = NULL; qboolean serverlist_consoleoutput; @@ -513,6 +514,11 @@ void ServerList_GetPlayerStatistics(int *numplayerspointer, int *maxplayerspoint static void _ServerList_Test(void) { int i; + if (serverlist_maxcachecount <= 1024) + { + serverlist_maxcachecount = 1024; + serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount); + } for( i = 0 ; i < 1024 ; i++ ) { memset( &serverlist_cache[serverlist_cachecount], 0, sizeof( serverlist_entry_t ) ); serverlist_cache[serverlist_cachecount].info.ping = 1000 + 1024 - i; @@ -535,6 +541,8 @@ void ServerList_QueryList(qboolean resetcache, qboolean querydp, qboolean queryq serverreplycount = 0; serverlist_cachecount = 0; serverlist_viewcount = 0; + serverlist_maxcachecount = 0; + serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount); } else { // refresh all entries int n; @@ -1376,6 +1384,11 @@ static int NetConn_ClientParsePacket_ServerList_ProcessReply(const char *address if (serverlist_cachecount == SERVERLIST_TOTALSIZE) return -1; + if (serverlist_maxcachecount <= serverlist_cachecount) + { + serverlist_maxcachecount += 64; + serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount); + } entry = &serverlist_cache[n]; memset(entry, 0, sizeof(*entry)); @@ -1451,13 +1464,19 @@ static qboolean NetConn_ClientParsePacket_ServerList_PrepareQuery( int protocol, if( !strcmp( ipstring, serverlist_cache[ n ].info.cname ) ) break; - entry = &serverlist_cache[n]; - if( n < serverlist_cachecount ) { // the entry has already been queried once or return true; } + if (serverlist_maxcachecount <= n) + { + serverlist_maxcachecount += 64; + serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount); + } + + entry = &serverlist_cache[n]; + memset(entry, 0, sizeof(entry)); entry->protocol = protocol; // store the data the engine cares about (address and ping) diff --git a/progsvm.h b/progsvm.h index cab3b749..64df5155 100644 --- a/progsvm.h +++ b/progsvm.h @@ -116,12 +116,21 @@ typedef struct prvm_edict_s //============================================================================ #define PRVM_OP_STATE 1 +#ifdef DP_SMALLMEMORY +#define PRVM_MAX_STACK_DEPTH 128 +#define PRVM_LOCALSTACK_SIZE 2048 + +#define PRVM_MAX_OPENFILES 16 +#define PRVM_MAX_OPENSEARCHES 8 +#define PRVM_MAX_GECKOINSTANCES 1 +#else #define PRVM_MAX_STACK_DEPTH 1024 #define PRVM_LOCALSTACK_SIZE 16384 #define PRVM_MAX_OPENFILES 256 #define PRVM_MAX_OPENSEARCHES 128 #define PRVM_MAX_GECKOINSTANCES 32 +#endif typedef void (*prvm_builtin_t) (void); diff --git a/world.h b/world.h index 4dad70ba..2f2c8a78 100644 --- a/world.h +++ b/world.h @@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MOVE_WORLDONLY 3 #define MOVE_HITMODEL 4 -#define AREA_GRID 512 +#define AREA_GRID 128 #define AREA_GRIDNODES (AREA_GRID * AREA_GRID) typedef struct link_s -- 2.39.2