Cache identifiers files

This commit is contained in:
Nassim Jahnke 2023-03-05 14:45:58 +01:00
parent b3825e637e
commit 3ced95903a
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B
8 changed files with 43 additions and 5 deletions

View File

@ -74,6 +74,7 @@ public class Int2IntMapBiMappings implements BiMappings {
@Override
public Mappings createInverse() {
final Int2IntBiMap inverseCopy = new Int2IntBiHashMap(inverse.mappings.size());
inverseCopy.defaultReturnValue(-1);
for (final Int2IntMap.Entry entry : inverse.mappings.int2IntEntrySet()) {
inverseCopy.put(entry.getIntKey(), entry.getIntValue());
}

View File

@ -66,6 +66,7 @@ public class Int2IntMapMappings implements Mappings {
@Override
public Mappings createInverse() {
final Int2IntMap inverse = new Int2IntOpenHashMap();
inverse.defaultReturnValue(-1);
for (final Int2IntMap.Entry entry : mappings.int2IntEntrySet()) {
inverse.put(entry.getIntValue(), entry.getIntKey());
}

View File

@ -67,7 +67,9 @@ public class IntArrayMappings implements Mappings {
Arrays.fill(inverse, -1);
for (int id = 0; id < mappings.length; id++) {
final int mappedId = mappings[id];
inverse[mappedId] = id;
if (mappedId != -1) {
inverse[mappedId] = id;
}
}
return of(inverse, mappings.length);
}

View File

@ -75,9 +75,8 @@ public class MappingDataBase implements MappingData {
paintingMappings = loadMappings(data, "paintings");
itemMappings = loadBiMappings(data, "items");
// TODO Don't load one file multiple times
final CompoundTag unmappedIdentifierData = MappingDataLoader.loadNBT("identifiers-" + unmappedVersion + ".nbt");
final CompoundTag mappedIdentifierData = MappingDataLoader.loadNBT("identifiers-" + mappedVersion + ".nbt");
final CompoundTag unmappedIdentifierData = MappingDataLoader.loadNBT("identifiers-" + unmappedVersion + ".nbt", true);
final CompoundTag mappedIdentifierData = MappingDataLoader.loadNBT("identifiers-" + mappedVersion + ".nbt", true);
if (unmappedIdentifierData != null && mappedIdentifierData != null) {
entityMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "entities");
argumentTypeMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "argumenttypes");

View File

@ -44,6 +44,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -54,9 +55,17 @@ public final class MappingDataLoader {
private static final byte SHIFTS_ID = 1;
private static final byte CHANGES_ID = 2;
private static final byte IDENTITY_ID = 3;
private static final Map<String, CompoundTag> MAPPINGS_CACHE = new HashMap<>();
private static boolean cacheValid = true;
@Deprecated/*(forRemoval = true)*/
public static void enableMappingsCache() {
//TODO
// Always enabled
}
public static void clearCache() {
MAPPINGS_CACHE.clear();
cacheValid = false;
}
/**
@ -100,7 +109,29 @@ public final class MappingDataLoader {
}
}
public static @Nullable CompoundTag loadNBT(final String name, final boolean cache) {
if (!cacheValid) {
return loadNBTFromFile(name);
}
CompoundTag data = MAPPINGS_CACHE.get(name);
if (data != null) {
return data;
}
data = loadNBTFromFile(name);
if (cache && data != null) {
MAPPINGS_CACHE.put(name, data);
}
return data;
}
public static @Nullable CompoundTag loadNBT(final String name) {
return loadNBT(name, false);
}
private static @Nullable CompoundTag loadNBTFromFile(final String name) {
final InputStream resource = getResource(name);
if (resource == null) {
return null;

View File

@ -23,6 +23,7 @@ import com.google.common.collect.Range;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.MappingDataLoader;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.ProtocolManager;
import com.viaversion.viaversion.api.protocol.ProtocolPathEntry;
@ -517,6 +518,9 @@ public class ProtocolManagerImpl implements ProtocolManager {
mappingLoaderExecutor = null;
mappingLoaderFutures.clear();
mappingLoaderFutures = null;
// Clear cached mapping files
MappingDataLoader.clearCache();
}
private Function<Throwable, Void> mappingLoaderThrowable(Class<? extends Protocol> protocolClass) {