Hi Ben,
Remembering an observation we made in our ICSE paper, namely that the
creation of stack traces is our main performance bottleneck, which
primarily affects tradesoap (cf. Section 3.3/Figure 8,
<
http://www.bodden.de/pubs/bss+11taming.pdf>, I did some further
experiments. And indeed it seems like the slow-down incurred by repeated
calls to ReflLogger.getInvokingFrame() triggers some timing-related
change in the behaviour of tradesoap (either a race condition or an
explicit time-out); at least, the failures disappear (with all
transformations enabled) if I change said method as follows:
private static final StackTraceElement DUMMY_FRAME =
Thread.currentThread().getStackTrace()[0];
private static StackTraceElement getInvokingFrame() {
return DUMMY_FRAME;
}
Can you try this workaround on your machine as well, to confirm that my
suspicion is correct?
Unfortunately, I am unaware of a way to obtain a partial stack trace
only on the JVM (we only a handful of frames), which would speed up this
method considerably and hence avoid timing perturbations. And
sun.reflect.Reflection.getCallerClass(int) only gives us a class some
frames further up, but not the call site (besides, this method is not
portable).
Hope this helps anyway.
Andreas