Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 19:10:09 +01:00
35 Zeilen
1.8 KiB
Diff
35 Zeilen
1.8 KiB
Diff
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 a24cc02a62585d7c04d36456739b11bddccf1a15..984e41619230db4579b028af18670c471aa13096 100644
|
|
--- a/src/main/java/com/mojang/serialization/Dynamic.java
|
|
+++ b/src/main/java/com/mojang/serialization/Dynamic.java
|
|
@@ -17,6 +17,7 @@ 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 - Perf: Skip toString on values like NBT
|
|
private final T value;
|
|
|
|
public Dynamic(final DynamicOps<T> ops) {
|
|
@@ -113,7 +114,7 @@ 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 - Perf: Skip toString on values like NBT
|
|
}
|
|
return DataResult.success(new Dynamic<>(ops, value));
|
|
}));
|