!7 cmodule2 > DynPrintLogAndEnabled { switchable double interval = 1.0; // seconds transient volatile Map stackTraces; // weakHashMap transient volatile Map runnableStackTraces; start { dm_reloadOnFieldChange enabled(); if (enabled) dm_doEvery(interval, r { if (!enabled) ret; setField(stackTraces := toWeakHashMap(allThreadsWithStackTraces()); setField(runnableStackTraces := filterMap isThreadRunnable_x(stackTraces)); vmBus_send freshStackTraces(stackTraces, weakRef(me())); }); } S renderStats() { ret stackTraces == null ? "" : n2(stackTraces, "thread") + " / " + n2(runnableStackTraces) + " runnable"; } visual dm_calculatedCenteredLabel renderStats(); }