50 lines
1.8 KiB
Java
50 lines
1.8 KiB
Java
|
package net.minecraft.util.profiling;
|
||
|
|
||
|
import com.mojang.logging.LogUtils;
|
||
|
import java.io.File;
|
||
|
import java.util.function.LongSupplier;
|
||
|
import javax.annotation.Nullable;
|
||
|
import net.minecraft.Util;
|
||
|
import org.slf4j.Logger;
|
||
|
|
||
|
public class SingleTickProfiler {
|
||
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||
|
private final LongSupplier realTime;
|
||
|
private final long saveThreshold;
|
||
|
private int tick;
|
||
|
private final File location;
|
||
|
private ProfileCollector profiler = InactiveProfiler.INSTANCE;
|
||
|
|
||
|
public SingleTickProfiler(LongSupplier p_145963_, String p_145964_, long p_145965_) {
|
||
|
this.realTime = p_145963_;
|
||
|
this.location = new File("debug", p_145964_);
|
||
|
this.saveThreshold = p_145965_;
|
||
|
}
|
||
|
|
||
|
public ProfilerFiller startTick() {
|
||
|
this.profiler = new ActiveProfiler(this.realTime, () -> this.tick, () -> true);
|
||
|
this.tick++;
|
||
|
return this.profiler;
|
||
|
}
|
||
|
|
||
|
public void endTick() {
|
||
|
if (this.profiler != InactiveProfiler.INSTANCE) {
|
||
|
ProfileResults profileresults = this.profiler.getResults();
|
||
|
this.profiler = InactiveProfiler.INSTANCE;
|
||
|
if (profileresults.getNanoDuration() >= this.saveThreshold) {
|
||
|
File file1 = new File(this.location, "tick-results-" + Util.getFilenameFormattedDateTime() + ".txt");
|
||
|
profileresults.saveResults(file1.toPath());
|
||
|
LOGGER.info("Recorded long tick -- wrote info to: {}", file1.getAbsolutePath());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
public static SingleTickProfiler createTickProfiler(String p_18633_) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static ProfilerFiller decorateFiller(ProfilerFiller p_18630_, @Nullable SingleTickProfiler p_18631_) {
|
||
|
return p_18631_ != null ? ProfilerFiller.combine(p_18631_.startTick(), p_18630_) : p_18630_;
|
||
|
}
|
||
|
}
|