void FilterCurrentSetByCurrentMethod() { LoadedMethod currentMethod = (LoadedMethod)Explorer.CurrentListSelection.Statistics.Subject; if (Explorer.CurrentSelection is HeapExplorerTreeModel.Node <HeapObject> ) { FilterCurrentSet <HeapObject> (new HeapItemWasAllocatedByMethod <HeapObject> (currentMethod)); } if (Explorer.CurrentSelection is HeapExplorerTreeModel.Node <AllocatedObject> ) { FilterCurrentSet <AllocatedObject> (new HeapItemWasAllocatedByMethod <AllocatedObject> (currentMethod)); } }
static void PrintExecutionTimeByCallStack(TextWriter writer, ProfilerEventHandler data, StackTrace stackFrame, double callerSeconds, int indentationLevel) { for (int i = 0; i < indentationLevel; i++) { writer.Write(" "); } LoadedMethod currentMethod = stackFrame.TopMethod; double currentSeconds = data.ClicksToSeconds(stackFrame.Clicks); writer.WriteLine("{0,5:F2}% ({1:F6}s, {2} calls) {3}.{4}", ((currentSeconds / callerSeconds) * 100), currentSeconds, stackFrame.Calls, currentMethod.Class.Name, currentMethod.Name); foreach (StackTrace calledFrame in stackFrame.CalledFrames) { PrintExecutionTimeByCallStack(writer, data, calledFrame, currentSeconds, indentationLevel + 1); } }