Renderer/src/main/java/electrosphere/engine/profiler/Profiler.java
austin 8430439509
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
foliage manager fixes
2024-09-11 19:02:53 -04:00

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);
}
}
}