From d30a76c3d9cbaef31a022259f7f12463e9d22dec Mon Sep 17 00:00:00 2001 From: danij Date: Sun, 14 Aug 2011 03:33:06 +0100 Subject: [PATCH] Added debugging ccmd "varstats" - print detailed statistical info about the PathDirectory used for the console variable database. --- doomsday/engine/api/dd_share.h | 5 ++- doomsday/engine/data/cphelp.txt | 3 ++ doomsday/engine/portable/include/con_main.h | 2 ++ doomsday/engine/portable/src/con_data.c | 37 +++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/doomsday/engine/api/dd_share.h b/doomsday/engine/api/dd_share.h index 290f45a06d..0fa56ae57f 100644 --- a/doomsday/engine/api/dd_share.h +++ b/doomsday/engine/api/dd_share.h @@ -1261,9 +1261,12 @@ typedef enum { CVT_BYTE, CVT_INT, CVT_FLOAT, - CVT_CHARPTR // ptr points to a char*, which points to the string. + CVT_CHARPTR, // ptr points to a char*, which points to the string. + CVARTYPE_COUNT } cvartype_t; +#define VALID_CVARTYPE(val) ((val) >= CVT_NULL && (val) <= CVARTYPE_COUNT) + /** * Console variable template. Used with Con_AddVariable. */ diff --git a/doomsday/engine/data/cphelp.txt b/doomsday/engine/data/cphelp.txt index 68a2e8dd6b..008d9bf6a6 100644 --- a/doomsday/engine/data/cphelp.txt +++ b/doomsday/engine/data/cphelp.txt @@ -533,6 +533,9 @@ inf = Params: uicolor (object) (red) (green) (blue)\nFor example, 'uicolor text desc = Unload the current game or one or more data files. inf = Params: unload (name) ...\nFor example, 'unload mylevel.wad'. +[varstats] +desc = Show detailed statistics for console variables. + [version] desc = Show detailed version information. diff --git a/doomsday/engine/portable/include/con_main.h b/doomsday/engine/portable/include/con_main.h index 0a0364a8c0..3442861eb5 100644 --- a/doomsday/engine/portable/include/con_main.h +++ b/doomsday/engine/portable/include/con_main.h @@ -97,6 +97,8 @@ typedef struct cvar_s { void (*notifyChanged)(void); } cvar_t; +static const ddstring_t* CVar_TypeName(cvartype_t type); + /// @return Type of the variable. cvartype_t CVar_Type(const cvar_t* var); diff --git a/doomsday/engine/portable/src/con_data.c b/doomsday/engine/portable/src/con_data.c index f6e2438bbd..11931f8ecf 100644 --- a/doomsday/engine/portable/src/con_data.c +++ b/doomsday/engine/portable/src/con_data.c @@ -56,6 +56,7 @@ D_CMD(HelpWhat); D_CMD(ListAliases); D_CMD(ListCmds); D_CMD(ListVars); +D_CMD(VarStats); // PRIVATE FUNCTION PROTOTYPES --------------------------------------------- @@ -97,6 +98,7 @@ void Con_DataRegister(void) C_CMD("listaliases", NULL, ListAliases); C_CMD("listcmds", NULL, ListCmds); C_CMD("listvars", NULL, ListVars); + C_CMD("varstats", NULL, VarStats); } static int markStringVariableFreed(struct pathdirectory_node_s* node, void* paramaters) @@ -415,6 +417,18 @@ static void updateKnownWords(void) knownWordsNeedUpdate = false; } +static const ddstring_t* CVar_TypeName(cvartype_t type) +{ + static const ddstring_t names[CVARTYPE_COUNT] = { + { "invalid" }, + { "CVT_BYTE" }, + { "CVT_INT" }, + { "CVT_FLOAT" }, + { "CVT_CHATPTR"}, + }; + return &names[(VALID_CVARTYPE(type)? type : 0)]; +} + cvartype_t CVar_Type(const cvar_t* var) { assert(NULL != var); @@ -1537,6 +1551,29 @@ D_CMD(ListVars) return true; } +D_CMD(VarStats) +{ + cvartype_t type; + countvariableparams_t p; + Con_FPrintf(CBLF_YELLOW, "Console Variable Statistics:\n"); + p.hidden = false; + p.ignoreHidden = false; + for(type = CVT_BYTE; type < CVARTYPE_COUNT; ++type) + { + p.count = 0; + p.type = type; + PathDirectory_Iterate2_Const(cvarDirectory, PCF_NO_BRANCH, NULL, PATHDIRECTORY_PATHHASH_SIZE, countVariable, &p); + Con_Printf("%12s: %u\n", Str_Text(CVar_TypeName(type)), p.count); + } + p.count = 0; + p.type = -1; + p.hidden = true; + PathDirectory_Iterate2_Const(cvarDirectory, PCF_NO_BRANCH, NULL, PATHDIRECTORY_PATHHASH_SIZE, countVariable, &p); + Con_Printf(" Total: %u\n Hidden: %u\n\n", cvarCount, p.count); + PathDirectory_PrintHashDistribution(cvarDirectory); + return true; +} + D_CMD(ListAliases) { uint numPrinted = 0;