Exemplo n.º 1
0
        /// <summary>
        /// New the specified prefix and logThreadsWithoutStackTrace.
        /// </summary>
        /// <returns>The new.</returns>
        /// <param name="prefix">Prefix.</param>
        /// <param name="logThreadsWithoutStackTrace">If set to <c>true</c> log threads without stack trace.</param>
        public static ANRError New(long duration, string prefix, bool logThreadsWithoutStackTrace)
        {
            var mainThread = Looper.MainLooper.Thread;

            var threadComparer = new _StackTraceComparer(mainThread);

            var stackTraces = new Dictionary <Thread, StackTraceElement[]>(threadComparer);

            foreach (var entry in Thread.AllStackTraces)
            {
                if (entry.Key == mainThread || (entry.Key.Name.StartsWith(prefix, StringComparison.Ordinal) && (logThreadsWithoutStackTrace || entry.Value.Length > 0)))
                {
                    stackTraces.Add(entry.Key, entry.Value);
                }
            }

            // Sometimes main is not returned in Thread.AllStackTraces - ensure that we list it
            if (!stackTraces.ContainsKey(mainThread))
            {
                stackTraces.Add(mainThread, mainThread.GetStackTrace());
            }

            _ThreadTrace._Thread tst = null;
            foreach (var entry in stackTraces)
            {
                var tt = new _ThreadTrace(GetThreadTitle(entry.Key), entry.Value);
                tst = new _ThreadTrace._Thread(tst);
            }

            return(new ANRError(tst, duration));
        }
Exemplo n.º 2
0
        /// <summary>
        /// News the main only.
        /// </summary>
        /// <returns>The main only.</returns>
        public static ANRError NewMainOnly(long duration)
        {
            var mainThread     = Looper.MainLooper.Thread;
            var mainStackTrace = mainThread.GetStackTrace();

            var tt  = new _ThreadTrace(GetThreadTitle(mainThread), mainStackTrace);
            var tst = new _ThreadTrace._Thread(null);

            return(new ANRError(tst, duration));
        }