* Better stats.
This commit is contained in:
		
							parent
							
								
									d39d3c6264
								
							
						
					
					
						commit
						e41b5828db
					
				
					 2 changed files with 16 additions and 5 deletions
				
			
		|  | @ -102,7 +102,8 @@ EvalState::EvalState() | ||||||
|     , baseEnvDispl(0) |     , baseEnvDispl(0) | ||||||
|     , staticBaseEnv(false, 0) |     , staticBaseEnv(false, 0) | ||||||
| { | { | ||||||
|     nrValues = nrEnvs = nrEvaluated = recursionDepth = maxRecursionDepth = 0; |     nrEnvs = nrValuesInEnvs = nrValuesInLists = nrValues = 0; | ||||||
|  |     nrEvaluated = recursionDepth = maxRecursionDepth = 0; | ||||||
|     deepestStack = (char *) -1; |     deepestStack = (char *) -1; | ||||||
| 
 | 
 | ||||||
|     createBaseEnv(); |     createBaseEnv(); | ||||||
|  | @ -250,7 +251,6 @@ Value * EvalState::lookupVar(Env * env, const VarRef & var) | ||||||
| 
 | 
 | ||||||
| Value * EvalState::allocValues(unsigned int count) | Value * EvalState::allocValues(unsigned int count) | ||||||
| { | { | ||||||
|     nrValues += count; |  | ||||||
|     return new Value[count]; // !!! check destructor
 |     return new Value[count]; // !!! check destructor
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -258,6 +258,7 @@ Value * EvalState::allocValues(unsigned int count) | ||||||
| Env & EvalState::allocEnv(unsigned int size) | Env & EvalState::allocEnv(unsigned int size) | ||||||
| { | { | ||||||
|     nrEnvs++; |     nrEnvs++; | ||||||
|  |     nrValuesInEnvs += size; | ||||||
|     Env * env = (Env *) malloc(sizeof(Env) + size * sizeof(Value)); |     Env * env = (Env *) malloc(sizeof(Env) + size * sizeof(Value)); | ||||||
|     return *env; |     return *env; | ||||||
| } | } | ||||||
|  | @ -268,6 +269,7 @@ void EvalState::mkList(Value & v, unsigned int length) | ||||||
|     v.type = tList; |     v.type = tList; | ||||||
|     v.list.length = length; |     v.list.length = length; | ||||||
|     v.list.elems = allocValues(length); |     v.list.elems = allocValues(length); | ||||||
|  |     nrValuesInLists += length; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -541,6 +543,7 @@ void EvalState::callFunction(Value & fun, Value & arg, Value & v) | ||||||
|             primOp->primOp.fun(*this, vArgs, v); |             primOp->primOp.fun(*this, vArgs, v); | ||||||
|         } else { |         } else { | ||||||
|             Value * v2 = allocValues(2); |             Value * v2 = allocValues(2); | ||||||
|  |             nrValues += 2; | ||||||
|             v2[0] = fun; |             v2[0] = fun; | ||||||
|             v2[1] = arg; |             v2[1] = arg; | ||||||
|             v.type = tPrimOpApp; |             v.type = tPrimOpApp; | ||||||
|  | @ -1039,8 +1042,14 @@ void EvalState::printStats() | ||||||
|     printMsg(v, format("  stack space used: %1% bytes") % (&x - deepestStack)); |     printMsg(v, format("  stack space used: %1% bytes") % (&x - deepestStack)); | ||||||
|     printMsg(v, format("  max eval() nesting depth: %1%") % maxRecursionDepth); |     printMsg(v, format("  max eval() nesting depth: %1%") % maxRecursionDepth); | ||||||
|     printMsg(v, format("  stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth)); |     printMsg(v, format("  stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth)); | ||||||
|     printMsg(v, format("  values allocated: %1%") % nrValues); |     printMsg(v, format("  environments allocated: %1% (%2% bytes)") | ||||||
|     printMsg(v, format("  environments allocated: %1%") % nrEnvs); |         % nrEnvs % (nrEnvs * sizeof(Env))); | ||||||
|  |     printMsg(v, format("  values allocated in environments: %1% (%2% bytes)") | ||||||
|  |         % nrValuesInEnvs % (nrValuesInEnvs * sizeof(Value))); | ||||||
|  |     printMsg(v, format("  values allocated in lists: %1% (%2% bytes)") | ||||||
|  |         % nrValuesInLists % (nrValuesInLists * sizeof(Value))); | ||||||
|  |     printMsg(v, format("  misc. values allocated: %1% (%2% bytes) ") | ||||||
|  |         % nrValues % (nrValues * sizeof(Value))); | ||||||
|     printMsg(v, format("  symbols in symbol table: %1%") % symbols.size()); |     printMsg(v, format("  symbols in symbol table: %1%") % symbols.size()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -280,8 +280,10 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|      |      | ||||||
|     unsigned long nrValues; |  | ||||||
|     unsigned long nrEnvs; |     unsigned long nrEnvs; | ||||||
|  |     unsigned long nrValuesInEnvs; | ||||||
|  |     unsigned long nrValuesInLists; | ||||||
|  |     unsigned long nrValues; | ||||||
|     unsigned long nrEvaluated; |     unsigned long nrEvaluated; | ||||||
|     unsigned int recursionDepth; |     unsigned int recursionDepth; | ||||||
|     unsigned int maxRecursionDepth; |     unsigned int maxRecursionDepth; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue