void (final @NotNull Runnable runnable, final long waitedInQueueNs, final int queueSize, final long executionDurationNs, final boolean wasInSkippedItems) { final long finishedAtMs = System.currentTimeMillis(); final long startedExecutionAtMs = finishedAtMs - NANOSECONDS.toMillis(executionDurationNs); Class<?> runnableOrCallableClass = getCallableOrRunnableClass(runnable); InvocationDescription description = new InvocationDescription(runnableOrCallableClass.getName(), startedExecutionAtMs, finishedAtMs); myRunnables.offer(description); myDurationsByFqn.compute(description.getProcessId(), (fqn, info) -> InvocationInfo.computeNext(fqn, description.getDuration(), info)); logTimeMillis(description, runnableOrCallableClass); }