mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 22:40:21 +01:00
Optimize Dynamic#get Missing Keys
get was calling toString() on every NBT object that was ever asked for an optional key from the object to build a string for the error text. When done on large NBT objects, this was using a ton of computation time building the JSON representation of the NBT object. Now we will just skip the value when 99.9999% of the time the text is never even printed.
This commit is contained in:
parent
49458cc927
commit
319895bd9d
2 changed files with 35 additions and 0 deletions
|
@ -0,0 +1,34 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Mon, 21 Dec 2020 11:01:42 -0500
|
||||
Subject: [PATCH] Optimize Dynamic#get Missing Keys
|
||||
|
||||
get was calling toString() on every NBT object that was ever asked for an optional
|
||||
key from the object to build a string for the error text.
|
||||
|
||||
When done on large NBT objects, this was using a ton of computation time building the
|
||||
JSON representation of the NBT object.
|
||||
|
||||
Now we will just skip the value when 99.9999% of the time the text is never even printed.
|
||||
|
||||
diff --git a/src/main/java/com/mojang/serialization/Dynamic.java b/src/main/java/com/mojang/serialization/Dynamic.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/mojang/serialization/Dynamic.java
|
||||
+++ b/src/main/java/com/mojang/serialization/Dynamic.java
|
||||
@@ -0,0 +0,0 @@ import java.util.stream.Stream;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class Dynamic<T> extends DynamicLike<T> {
|
||||
+ private static final boolean DEBUG_MISSING_KEYS = Boolean.getBoolean("Paper.debugDynamicMissingKeys"); // Paper
|
||||
private final T value;
|
||||
|
||||
public Dynamic(final DynamicOps<T> ops) {
|
||||
@@ -0,0 +0,0 @@ public class Dynamic<T> extends DynamicLike<T> {
|
||||
return new OptionalDynamic<>(ops, ops.getMap(value).flatMap(m -> {
|
||||
final T value = m.get(key);
|
||||
if (value == null) {
|
||||
- return DataResult.error("key missing: " + key + " in " + this.value);
|
||||
+ return DataResult.error(DEBUG_MISSING_KEYS ? "key missing: " + key + " in " + this.value : "key missing: " + key); // Paper
|
||||
}
|
||||
return DataResult.success(new Dynamic<>(ops, value));
|
||||
}));
|
|
@ -108,6 +108,7 @@ importLibrary com.mojang authlib com/mojang/authlib yggdrasil/YggdrasilGameProfi
|
|||
importLibrary com.mojang datafixerupper com/mojang/datafixers DataFixerBuilder.java
|
||||
importLibrary com.mojang datafixerupper com/mojang/datafixers/util Either.java
|
||||
importLibrary com.mojang datafixerupper com/mojang/serialization/codecs KeyDispatchCodec.java
|
||||
importLibrary com.mojang datafixerupper com/mojang/serialization Dynamic.java
|
||||
|
||||
########################################################
|
||||
########################################################
|
||||
|
|
Loading…
Reference in a new issue