package edu.umd.cs.findbugs.log;
import java.lang.reflect.Method;
import edu.umd.cs.findbugs.SystemProperties;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
public class YourKitController {
private static final boolean ENABLED = SystemProperties.getBoolean("findbugs.yourkit.enabled");
Object controller;
Method advanceGeneration, captureMemorySnapshot, getStatus;
public static final long ALLOCATION_RECORDING = 2L;
public YourKitController() {
if(!ENABLED){
return;
}
try {
Class<?> c = Class.forName("com.yourkit.api.Controller");
controller = c.newInstance();
advanceGeneration = c.getMethod("advanceGeneration", String.class);
captureMemorySnapshot = c.getMethod("captureMemorySnapshot");
getStatus = c.getMethod("getStatus");
} catch (RuntimeException e) {
e.printStackTrace();
} catch (Exception e) {
controller = null;
}
}
public void advanceGeneration(String name) {
if (controller == null) {
return;
}
try {
advanceGeneration.invoke(controller, name);
} catch (Throwable e) {
assert true;
}
}
public long getStatus() {
if (getStatus == null) {
return 0;
}
try {
return (Long) getStatus.invoke(controller);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
return 0;
}
}
@SuppressFBWarnings("DM_GC")
public void captureMemorySnapshot() {
if (controller == null) {
return;
}
try {
System.gc();
captureMemorySnapshot.invoke(controller);
} catch (RuntimeException e) {
throw e;
} catch (Throwable e) {
assert true;
}
}
}