Example #1
0
        /// <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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }