Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
82 lines
2.1 KiB
Java
82 lines
2.1 KiB
Java
package electrosphere.engine.profiler;
|
|
|
|
import org.lwjgl.PointerBuffer;
|
|
import org.lwjgl.system.MemoryStack;
|
|
import org.lwjgl.util.remotery.Remotery;
|
|
|
|
/**
|
|
* A profiler for monitoring engine performance
|
|
*/
|
|
public class Profiler {
|
|
|
|
//controls whether to profile or not
|
|
//!!WARNING!!: when this is turned on, testing can behave weirdly!! IE GET STUCK!
|
|
public static boolean PROFILE = false;
|
|
|
|
//pointer to the global instance
|
|
long pointer = -1;
|
|
|
|
/**
|
|
* Creates the profiler
|
|
*/
|
|
public Profiler(){
|
|
if(PROFILE){
|
|
try(MemoryStack stack = MemoryStack.stackPush()){
|
|
PointerBuffer allocBuffer = stack.mallocPointer(1);
|
|
Remotery.rmt_CreateGlobalInstance(allocBuffer);
|
|
pointer = allocBuffer.get();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Begins a CPU sample
|
|
* @param sampleName The name of the sample
|
|
*/
|
|
public void beginCpuSample(String sampleName){
|
|
if(PROFILE){
|
|
Remotery.rmt_BeginCPUSample(sampleName, Remotery.RMTSF_None, null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Begins an aggregate CPU sample (must create a regular cpu sample of same type outside function this is inside of to encapsule all calls to aggregate)
|
|
* @param sampleName The name of the sample
|
|
*/
|
|
public void beginAggregateCpuSample(String sampleName){
|
|
if(PROFILE){
|
|
Remotery.rmt_BeginCPUSample(sampleName, Remotery.RMTSF_Aggregate, null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Begins a Root CPU sample (will assert if another sample is not ended before this one)
|
|
* @param sampleName The name of the root sample
|
|
*/
|
|
public void beginRootCpuSample(String sampleName){
|
|
if(PROFILE){
|
|
Remotery.rmt_BeginCPUSample(sampleName, Remotery.RMTSF_Root, null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ends a CPU sample
|
|
* @param sampleName The name of the sample
|
|
*/
|
|
public void endCpuSample(){
|
|
if(PROFILE){
|
|
Remotery.rmt_EndCPUSample();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Destroys the profiler
|
|
*/
|
|
public void destroy(){
|
|
if(PROFILE){
|
|
Remotery.rmt_DestroyGlobalInstance(pointer);
|
|
}
|
|
}
|
|
|
|
}
|