sclass SingleThreadProfiler extends AbstractProfiler {
  // config
  settable Thread threadToSample = currentThread();
  
  toString {
    ret threadToSample == null
      ? shortClassName(this)
      : "Profiler for " + threadToSample;
  }

  void stepImpl() {
    samples++;
    StackTraceElement[] stackTrace = threadToSample.getStackTrace();
    if (skipSleeping && !isThreadRunnable_x(stackTrace)) ret;
    lock lock;
    addSample(stackTrace);
  }
  
  @Override void assertCanStart { assertNotNull(+threadToSample); }
}