ProfilingService
interface, add your implementation to the classpath an add the command line argument --profile.service my.impl.class
Example Profiling Service Impl.
public class MyProfiler implements ProfilingService {
private final ConcurrentMap<Long, String> methods = new ConcurrentHashMap<Long, String>(1000);
public ProfileCollection newProfileCollection(ThreadContext threadContext) {
return new MyCollection();
}
public MethodEnhancer newMethodEnhancer(Ruby ruby) {
return new MyMethodEnhancer();
}
public ProfileReporter newProfileReporter(ThreadContext threadContext) {
return new MyReporter();
}
private class MyCollection implements ProfileCollection {
private long serial;
public void profileEnter(long method) {
this.serial = method;
}
public void profileExit(long method, long time) {
String name = methods.get(serial);
serial = method;
System.out.println(name + ": " + (System.nanoTime() - time));
}
}
private class MyMethodEnhancer implements MethodEnhancer {
public DynamicMethod enhance(String name, DynamicMethod delegate) {
if ( isMyApp( delegate ) ) {
methods.putIfAbsent(delegate.getSerialNumber(), name);
return new ProfilingDynamicMethod(delegate);
} else {
return delegate;
}
}
private boolean isMyApp( DynamicMethod method ) {
//if( delegate.getRealMethod() instanceof PositionAware && ((PositionAware)delegate.getRealMethod()).getFile().contains(""))
return method.getRealMethod().getImplementationClass().getId().startsWith("MyApp::");
}
}
private static class MyReporter implements ProfileReporter {
public void report(ProfileCollection profileCollection) {
MyCollection collection = (MyCollection) profileCollection;
// do nothing
}
}
}
| Modifier and Type | Interface and Description |
|---|---|
| public interface | MethodEnhancer
Implementations of this interface will be used to enhance methods with profiling information/ callbacks. |
| public interface | ProfileCollection
Each |
| public interface | ProfileReporter
The used |
| public interface | ProfilingService
A ProfilingService is used to profile jruby programs. |
| Modifier and Type | Class and Description |
|---|---|
| public class | ProfilingServiceLookup
This helper is used to get the configured |