mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-12-24 17:47:40 +01:00
Remove thread safety implementation for java 17, since it seems to not be needed anymore and improves render time by 8-10%
This commit is contained in:
parent
247e81bc61
commit
b8166a9122
@ -107,9 +107,15 @@ public class ImageIOManager {
|
||||
}
|
||||
|
||||
public static BufferOutputStream imageIOEncode(BufferedImage img, ImageFormat fmt) {
|
||||
BufferOutputStream bos = new BufferOutputStream();
|
||||
|
||||
if(isRequiredJDKVersion(17,-1,-1)){
|
||||
return imageIOEncodeUnsafe(img, fmt); //we can skip Thread safety for more performance
|
||||
}
|
||||
synchronized(imageioLock) {
|
||||
return imageIOEncodeUnsafe(img, fmt);
|
||||
}
|
||||
}
|
||||
private static BufferOutputStream imageIOEncodeUnsafe(BufferedImage img, ImageFormat fmt) {
|
||||
BufferOutputStream bos = new BufferOutputStream();
|
||||
try {
|
||||
ImageIO.setUseCache(false); /* Don't use file cache - too small to be worth it */
|
||||
|
||||
@ -158,17 +164,69 @@ public class ImageIOManager {
|
||||
Log.info("Error encoding image - " + iox.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return bos;
|
||||
}
|
||||
|
||||
public static BufferedImage imageIODecode(MapStorageTile.TileRead tr) throws IOException {
|
||||
if(isRequiredJDKVersion(17,-1,-1)){
|
||||
return imageIODecodeUnsafe(tr); //we can skip Thread safety for more performance
|
||||
}
|
||||
synchronized(imageioLock) {
|
||||
return imageIODecodeUnsafe(tr);
|
||||
}
|
||||
}
|
||||
|
||||
private static BufferedImage imageIODecodeUnsafe(MapStorageTile.TileRead tr) throws IOException {
|
||||
ImageIO.setUseCache(false); /* Don't use file cache - too small to be worth it */
|
||||
if (tr.format == ImageEncoding.WEBP) {
|
||||
return doWEBPDecode(tr.image);
|
||||
}
|
||||
return ImageIO.read(tr.image);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the current JDK is running at least a specific version
|
||||
* targetMinor and targetBuild can be set to -1, if the java.version only provides a Major release this will then only check for the major release
|
||||
* @param targetMajor the required minimum major version
|
||||
* @param targetMinor the required minimum minor version
|
||||
* @param targetBuild the required minimum build version
|
||||
* @return true if the current JDK version is the required minimum version
|
||||
*/
|
||||
private static boolean isRequiredJDKVersion(int targetMajor, int targetMinor, int targetBuild){
|
||||
String javaVersion = System.getProperty("java.version");
|
||||
String[] versionParts = javaVersion.split("\\.");
|
||||
if(versionParts.length < 3){
|
||||
if(versionParts.length == 1
|
||||
&& targetMinor == -1
|
||||
&& targetBuild == -1
|
||||
&& parseInt(versionParts[0], -1) >= targetMajor){
|
||||
return true;//we only have a major version and thats ok
|
||||
}
|
||||
return false; //can not evaluate
|
||||
}
|
||||
int major = parseInt(versionParts[0], -1);
|
||||
int minor = parseInt(versionParts[1], -1);
|
||||
int build = parseInt(versionParts[2], -1);
|
||||
if(major != -1 && major >= targetMajor &&
|
||||
minor != -1 && minor >= targetMinor &&
|
||||
build != -1 && build >= targetBuild
|
||||
){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a string to int, with a dynamic fallback value if not parsable
|
||||
* @param input the String to parse
|
||||
* @param fallback the Fallback value to use
|
||||
* @return the parsed integer or the fallback value if unparsable
|
||||
*/
|
||||
private static int parseInt(String input, int fallback){
|
||||
int output = fallback;
|
||||
try{
|
||||
output = Integer.parseInt(input);
|
||||
} catch (NumberFormatException e) {}
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user