static new MultiSet poorMansProfiling_results; static java.util.Timer poorMansProfiling_timer; static Lock poorMansProfiling_lock = lock(); static void poorMansProfiling(int interval) { lock poorMansProfiling_lock; stopPoorMansProfiling(); poorMansProfiling_timer = doEvery_daemon(interval, r { Map map = runnableThreadsWithStackTraces(); for (Thread t : keys(map)) { continue if isSystemThread(t); new StringBuilder buf; for (StackTraceElement e : map.get(t)) buf.append(e).append("\n"); poorMansProfiling_results.add(str(buf)); } }); } static void stopPoorMansProfiling() { lock poorMansProfiling_lock; if (poorMansProfiling_timer != null) { stopTimer(poorMansProfiling_timer); poorMansProfiling_timer = null; } } static void poorMansProfiling_clear() { poorMansProfiling_results.clear(); } static MultiSet poorMansProfiling_results() { ret new MultiSet(poorMansProfiling_results); }