package io.vertx.core.impl;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;
import io.vertx.core.spi.metrics.PoolMetrics;
class WorkerContext extends ContextImpl {
WorkerContext(VertxInternal vertx, WorkerPool internalBlockingPool, WorkerPool workerPool, String deploymentID,
JsonObject config, ClassLoader tccl) {
super(vertx, internalBlockingPool, workerPool, deploymentID, config, tccl);
}
final <T> Runnable wrapTask(T arg, Handler<T> hTask, PoolMetrics metrics) {
Object queueMetric = metrics != null ? metrics.submitted() : null;
return () -> {
Object execMetric = null;
if (metrics != null) {
execMetric = metrics.begin(queueMetric);
}
boolean succeeded = executeTask(arg, hTask);
if (metrics != null) {
metrics.end(execMetric, succeeded);
}
};
}
@Override
void executeAsync(Handler<Void> task) {
execute(null, task);
}
@Override
public boolean isEventLoopContext() {
return false;
}
@Override
public boolean isMultiThreadedWorkerContext() {
return false;
}
@Override
<T> void execute(T value, Handler<T> task) {
orderedTasks.execute(wrapTask(value, task, workerPool.metrics()), workerPool.executor());
}
}