/// <summary> /// Unwind the wrapped sources to get to a TraceEventStackSource if possible. /// </summary> private static TraceEventStackSource GetTraceEventStackSource(StackSource source) { StackSourceStacks rawSource = source; TraceEventStackSource asTraceEventStackSource = null; for (; ;) { asTraceEventStackSource = rawSource as TraceEventStackSource; if (asTraceEventStackSource != null) { return(asTraceEventStackSource); } var asCopyStackSource = rawSource as CopyStackSource; if (asCopyStackSource != null) { rawSource = asCopyStackSource.SourceStacks; continue; } var asStackSource = rawSource as StackSource; if (asStackSource != null && asStackSource != asStackSource.BaseStackSource) { rawSource = asStackSource.BaseStackSource; continue; } return(null); } }
public bool LookupWarmSymbols(int minCount) { StackSourceStacks rawSource = this.stackSource.BaseStackSource; for (;;) { if (rawSource is TraceEventStackSource asTraceEventStackSource) { asTraceEventStackSource.LookupWarmSymbols(minCount, this.symbolReader); return(true); } if (rawSource is CopyStackSource asCopyStackSource) { rawSource = asCopyStackSource.SourceStacks; continue; } if (rawSource is StackSource asStackSource && asStackSource != asStackSource.BaseStackSource) { rawSource = asStackSource.BaseStackSource; continue; } return(false); } }
private static TraceEventStackSource GetTraceEventStackSource(StackSource source) { StackSourceStacks rawSource = source; while (true) { if (rawSource is TraceEventStackSource asTraceEventStackSource) { return(asTraceEventStackSource); } if (rawSource is CopyStackSource asCopyStackSource) { rawSource = asCopyStackSource.SourceStacks; continue; } if (rawSource is StackSource asStackSource && asStackSource != asStackSource.BaseStackSource) { rawSource = asStackSource.BaseStackSource; continue; } return(null); } }