See: Description
Interface | Description |
---|---|
MethodEnhancer |
Implementations of this interface will be used to enhance methods with profiling information/ callbacks.
|
ProfileCollection |
Each
ThreadContext has an ProfileCollection property in profile mode. |
ProfileReporter |
The used
ProfilingService will create an instance of this class
at the end of each RubyThread or at jruby shutdown the ProfileReporter.report(ProfileCollection)
is called with the ProfileCollection associated with the current Thread. |
ProfilingService |
A ProfilingService is used to profile jruby programs.
|
Class | Description |
---|---|
ProfilingServiceLookup |
This helper is used to get the configured
ProfilingService for the current Ruby instance. |
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 ConcurrentMapmethods = new ConcurrentHashMap (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().getName().startsWith("MyApp::"); } } private static class MyReporter implements ProfileReporter { public void report(ProfileCollection profileCollection) { MyCollection collection = (MyCollection) profileCollection; // do nothing } } }
Copyright © 2001-2016 JRuby. All Rights Reserved.