Convert NIX_COUNT_CALLS to JSON too
This commit is contained in:
		
							parent
							
								
									0a2545f95c
								
							
						
					
					
						commit
						91405986f4
					
				
					 1 changed files with 41 additions and 35 deletions
				
			
		|  | @ -1728,7 +1728,6 @@ bool EvalState::eqValues(Value & v1, Value & v2) | ||||||
| void EvalState::printStats() | void EvalState::printStats() | ||||||
| { | { | ||||||
|     bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0"; |     bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0"; | ||||||
|     Verbosity v = showStats ? lvlInfo : lvlDebug; |  | ||||||
| 
 | 
 | ||||||
|     struct rusage buf; |     struct rusage buf; | ||||||
|     getrusage(RUSAGE_SELF, &buf); |     getrusage(RUSAGE_SELF, &buf); | ||||||
|  | @ -1779,7 +1778,7 @@ void EvalState::printStats() | ||||||
|             sets.attr("elements", nrAttrsInAttrsets); |             sets.attr("elements", nrAttrsInAttrsets); | ||||||
|         } |         } | ||||||
|         { |         { | ||||||
|             JSONObject sizes = topObj.object("sizes"); |             auto sizes = topObj.object("sizes"); | ||||||
|             sizes.attr("Env", sizeof(Env)); |             sizes.attr("Env", sizeof(Env)); | ||||||
|             sizes.attr("Value", sizeof(Value)); |             sizes.attr("Value", sizeof(Value)); | ||||||
|             sizes.attr("Bindings", sizeof(Bindings)); |             sizes.attr("Bindings", sizeof(Bindings)); | ||||||
|  | @ -1793,40 +1792,47 @@ void EvalState::printStats() | ||||||
|         topObj.attr("nrPrimOpCalls", nrPrimOpCalls); |         topObj.attr("nrPrimOpCalls", nrPrimOpCalls); | ||||||
|         topObj.attr("nrFunctionCalls", nrFunctionCalls); |         topObj.attr("nrFunctionCalls", nrFunctionCalls); | ||||||
| #if HAVE_BOEHMGC | #if HAVE_BOEHMGC | ||||||
|         JSONObject gc = topObj.object("gc"); |         { | ||||||
|         gc.attr("heapSize", heapSize); |             auto gc = topObj.object("gc"); | ||||||
|         gc.attr("totalBytes", totalBytes); |             gc.attr("heapSize", heapSize); | ||||||
|  |             gc.attr("totalBytes", totalBytes); | ||||||
|  |         } | ||||||
| #endif | #endif | ||||||
|     } |         if (countCalls) { | ||||||
| 
 |             { | ||||||
| 
 |                 auto obj = topObj.object("primops"); | ||||||
|     if (countCalls) { |                 for (auto & i : primOpCalls) | ||||||
|         v = lvlInfo; |                     obj.attr(i.first, i.second); | ||||||
| 
 |             } | ||||||
|         printMsg(v, format("calls to %1% primops:") % primOpCalls.size()); |             { | ||||||
|         typedef std::multimap<size_t, Symbol> PrimOpCalls_; |                 auto list = topObj.list("functions"); | ||||||
|         PrimOpCalls_ primOpCalls_; |                 for (auto & i : functionCalls) { | ||||||
|         for (auto & i : primOpCalls) |                     auto obj = list.object(); | ||||||
|             primOpCalls_.insert(std::pair<size_t, Symbol>(i.second, i.first)); |                     if (i.first->name.set()) | ||||||
|         for (auto i = primOpCalls_.rbegin(); i != primOpCalls_.rend(); ++i) |                         obj.attr("name", (const string &) i.first->name); | ||||||
|             printMsg(v, format("%1$10d %2%") % i->first % i->second); |                     else | ||||||
| 
 |                         obj.attr("name", nullptr); | ||||||
|         printMsg(v, format("calls to %1% functions:") % functionCalls.size()); |                     if (i.first->pos) { | ||||||
|         typedef std::multimap<size_t, ExprLambda *> FunctionCalls_; |                         obj.attr("file", (const string &) i.first->pos.file); | ||||||
|         FunctionCalls_ functionCalls_; |                         obj.attr("line", i.first->pos.line); | ||||||
|         for (auto & i : functionCalls) |                         obj.attr("column", i.first->pos.column); | ||||||
|             functionCalls_.insert(std::pair<size_t, ExprLambda *>(i.second, i.first)); |                     } | ||||||
|         for (auto i = functionCalls_.rbegin(); i != functionCalls_.rend(); ++i) |                     obj.attr("count", i.second); | ||||||
|             printMsg(v, format("%1$10d %2%") % i->first % i->second->showNamePos()); |                 } | ||||||
| 
 |             } | ||||||
|         printMsg(v, format("evaluations of %1% attributes:") % attrSelects.size()); |             { | ||||||
|         typedef std::multimap<size_t, Pos> AttrSelects_; |                 auto list = topObj.list("attributes"); | ||||||
|         AttrSelects_ attrSelects_; |                 for (auto & i : attrSelects) { | ||||||
|         for (auto & i : attrSelects) |                     auto obj = list.object(); | ||||||
|             attrSelects_.insert(std::pair<size_t, Pos>(i.second, i.first)); |                     if (i.first) { | ||||||
|         for (auto i = attrSelects_.rbegin(); i != attrSelects_.rend(); ++i) |                         obj.attr("file", (const string &) i.first.file); | ||||||
|             printMsg(v, format("%1$10d %2%") % i->first % i->second); |                         obj.attr("line", i.first.line); | ||||||
| 
 |                         obj.attr("column", i.first.column); | ||||||
|  |                     } | ||||||
|  |                     obj.attr("count", i.second); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue