Warning: session_start(): open(/var/lib/php/sessions/sess_vqq1tn5itsitdfsucgir5oi4bj, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
asclass AbstractProfiler is AutoCloseable {
// config
settable int interval = 40; // 25 Hz
settable bool skipSleeping;
// results
new MultiSet stackTraceMultiSet;
gettable int samples;
// temporary
java.util.Timer timer;
Lock lock = lock();
void start {
lock lock;
assertCanStart();
printWithMS("Starting " + this);
stop();
clear();
timer = doEvery_daemon("Profiler", interval, r stepImpl);
}
void assertCanStart {}
abstract void stepImpl();
public void stop aka close() {
lock lock;
if (timer != null) {
stopTimer(timer);
timer = null;
printWithMS("Stopped " + this);
}
}
void clear() {
lock lock;
stackTraceMultiSet.clear();
samples = 0;
}
MultiSet results() {
lock lock;
ret cloneMultiSet(stackTraceMultiSet);
}
MultiSet stopAndGetResults() {
lock lock;
stop();
ret results();
}
S renderFullResults(bool mostImportantLast) {
var traces = results();
int n = traces.size();
int percent = ratioToIntPercent(l(traces), samples);
ret (samples == 0 ? "Nothing sampled"
: percent + "% core activity [" + n2(samples, "sample") + " taken]") + "\n\n"
+ joinMap(mostImportantLast ? traces.lowestFirst() : traces.highestFirst(), trace ->
traces.get(trace) + "/" + n + "\n" + trace + "\n\n"
);
}
// must be locked first
protected void addSample(StackTraceElement[] stackTrace) {
samples++;
stackTraceMultiSet.add(stackTraceToString(stackTrace));
}
}