FYI
I found that we can get more information from our profiler with changing
the structure of our code. Basically the class is defined separately
Instead of dynamically. For example:
protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx,
IScalarEvaluator[] args) throws AlgebricksException {
return new NewScalarEvaluator(args);
}
protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx,
IScalarEvaluator[] args) throws AlgebricksException {
return new AbstractTaggedValueArgumentScalarEvaluator(args) {
// NewScalarEvaluator code
}
}
The first option allows the profiler to find NewScalarEvaluator instead of
AbstractTaggedValueArgumentScalarEvaluator. In addition the filter setting
should be altered to always include these evaluator classes.
The change means we can start to see how each individual function
expression is using the cpu instead of just the write actions.