112 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util.profiling.jfr;
 | |
| 
 | |
| import com.mojang.logging.LogUtils;
 | |
| import java.net.SocketAddress;
 | |
| import java.nio.file.Path;
 | |
| import net.minecraft.core.Holder;
 | |
| import net.minecraft.network.ConnectionProtocol;
 | |
| import net.minecraft.network.protocol.PacketType;
 | |
| import net.minecraft.resources.ResourceKey;
 | |
| import net.minecraft.util.profiling.jfr.callback.ProfiledDuration;
 | |
| import net.minecraft.world.level.ChunkPos;
 | |
| import net.minecraft.world.level.Level;
 | |
| import net.minecraft.world.level.chunk.storage.RegionFileVersion;
 | |
| import net.minecraft.world.level.chunk.storage.RegionStorageInfo;
 | |
| import net.minecraft.world.level.levelgen.structure.Structure;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| import org.slf4j.Logger;
 | |
| 
 | |
| public interface JvmProfiler {
 | |
| 	JvmProfiler INSTANCE = (JvmProfiler)(Runtime.class.getModule().getLayer().findModule("jdk.jfr").isPresent()
 | |
| 		? JfrProfiler.getInstance()
 | |
| 		: new JvmProfiler.NoOpProfiler());
 | |
| 
 | |
| 	boolean start(Environment environment);
 | |
| 
 | |
| 	Path stop();
 | |
| 
 | |
| 	boolean isRunning();
 | |
| 
 | |
| 	boolean isAvailable();
 | |
| 
 | |
| 	void onServerTick(float currentAverageTickTime);
 | |
| 
 | |
| 	void onPacketReceived(ConnectionProtocol protocol, PacketType<?> packetType, SocketAddress address, int size);
 | |
| 
 | |
| 	void onPacketSent(ConnectionProtocol protocol, PacketType<?> packetType, SocketAddress address, int size);
 | |
| 
 | |
| 	void onRegionFileRead(RegionStorageInfo regionStorageInfo, ChunkPos chunkPos, RegionFileVersion version, int bytes);
 | |
| 
 | |
| 	void onRegionFileWrite(RegionStorageInfo regionStorageInfo, ChunkPos chunkPos, RegionFileVersion version, int bytes);
 | |
| 
 | |
| 	@Nullable
 | |
| 	ProfiledDuration onWorldLoadedStarted();
 | |
| 
 | |
| 	@Nullable
 | |
| 	ProfiledDuration onChunkGenerate(ChunkPos chunkPos, ResourceKey<Level> level, String name);
 | |
| 
 | |
| 	@Nullable
 | |
| 	ProfiledDuration onStructureGenerate(ChunkPos chunkPos, ResourceKey<Level> level, Holder<Structure> structure);
 | |
| 
 | |
| 	public static class NoOpProfiler implements JvmProfiler {
 | |
| 		private static final Logger LOGGER = LogUtils.getLogger();
 | |
| 		static final ProfiledDuration noOpCommit = bl -> {};
 | |
| 
 | |
| 		@Override
 | |
| 		public boolean start(Environment environment) {
 | |
| 			LOGGER.warn("Attempted to start Flight Recorder, but it's not supported on this JVM");
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public Path stop() {
 | |
| 			throw new IllegalStateException("Attempted to stop Flight Recorder, but it's not supported on this JVM");
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public boolean isRunning() {
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public boolean isAvailable() {
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public void onPacketReceived(ConnectionProtocol protocol, PacketType<?> packetType, SocketAddress address, int size) {
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public void onPacketSent(ConnectionProtocol protocol, PacketType<?> packetType, SocketAddress address, int size) {
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public void onRegionFileRead(RegionStorageInfo regionStorageInfo, ChunkPos chunkPos, RegionFileVersion version, int bytes) {
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public void onRegionFileWrite(RegionStorageInfo regionStorageInfo, ChunkPos chunkPos, RegionFileVersion version, int bytes) {
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public void onServerTick(float currentAverageTickTime) {
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public ProfiledDuration onWorldLoadedStarted() {
 | |
| 			return noOpCommit;
 | |
| 		}
 | |
| 
 | |
| 		@Nullable
 | |
| 		@Override
 | |
| 		public ProfiledDuration onChunkGenerate(ChunkPos chunkPos, ResourceKey<Level> level, String name) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public ProfiledDuration onStructureGenerate(ChunkPos chunkPos, ResourceKey<Level> level, Holder<Structure> structure) {
 | |
| 			return noOpCommit;
 | |
| 		}
 | |
| 	}
 | |
| }
 |