int entryCount = matches.size();
for (int i = 0; i < entryCount; i++)
{
EPStatementHandleCallback handleCallback = (EPStatementHandleCallback) matchArray[i];
EPStatementAgentInstanceHandle handle = handleCallback.getAgentInstanceHandle();
// Self-joins require that the internal dispatch happens after all streams are evaluated.
// Priority or preemptive settings also require special ordering.
if (handle.isCanSelfJoin() || isPrioritized)
{
ArrayDeque<FilterHandleCallback> callbacks = stmtCallbacks.get(handle);
if (callbacks == null)
{
callbacks = new ArrayDeque<FilterHandleCallback>();
stmtCallbacks.put(handle, callbacks);
}
callbacks.add(handleCallback.getFilterCallback());
continue;
}
if ((MetricReportingPath.isMetricsEnabled) && (handle.getStatementHandle().getMetricsHandle().isEnabled()))
{
long cpuTimeBefore = MetricUtil.getCPUCurrentThread();
long wallTimeBefore = MetricUtil.getWall();
processStatementFilterSingle(handle, handleCallback, theEvent, version);
long wallTimeAfter = MetricUtil.getWall();
long cpuTimeAfter = MetricUtil.getCPUCurrentThread();
long deltaCPU = cpuTimeAfter - cpuTimeBefore;
long deltaWall = wallTimeAfter - wallTimeBefore;
services.getMetricsReportingService().accountTime(handle.getStatementHandle().getMetricsHandle(), deltaCPU, deltaWall, 1);
}
else
{
if ((ThreadingOption.isThreadingEnabled) && (services.getThreadingService().isRouteThreading()))
{
services.getThreadingService().submitRoute(new RouteUnitSingle(this, handleCallback, theEvent, version));
}
else
{
processStatementFilterSingle(handle, handleCallback, theEvent, version);
}
}
}
matches.clear();
if (stmtCallbacks.isEmpty())
{
return;
}
for (Map.Entry<EPStatementAgentInstanceHandle, ArrayDeque<FilterHandleCallback>> entry : stmtCallbacks.entrySet())
{
EPStatementAgentInstanceHandle handle = entry.getKey();
ArrayDeque<FilterHandleCallback> callbackList = entry.getValue();
if ((MetricReportingPath.isMetricsEnabled) && (handle.getStatementHandle().getMetricsHandle().isEnabled()))
{
long cpuTimeBefore = MetricUtil.getCPUCurrentThread();
long wallTimeBefore = MetricUtil.getWall();
processStatementFilterMultiple(handle, callbackList, theEvent, version);
long wallTimeAfter = MetricUtil.getWall();
long cpuTimeAfter = MetricUtil.getCPUCurrentThread();
long deltaCPU = cpuTimeAfter - cpuTimeBefore;
long deltaWall = wallTimeAfter - wallTimeBefore;
services.getMetricsReportingService().accountTime(handle.getStatementHandle().getMetricsHandle(), deltaCPU, deltaWall, callbackList.size());
}
else
{
if ((ThreadingOption.isThreadingEnabled) && (services.getThreadingService().isRouteThreading()))
{
services.getThreadingService().submitRoute(new RouteUnitMultiple(this, callbackList, theEvent, handle, version));
}
else
{
processStatementFilterMultiple(handle, callbackList, theEvent, version);
}
if ((isPrioritized) && (handle.isPreemptive()))
{
break;
}
}
}