diff options
author | Aikar <[email protected]> | 2018-07-22 18:46:13 -0400 |
---|---|---|
committer | Aikar <[email protected]> | 2018-07-22 18:46:13 -0400 |
commit | 4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a (patch) | |
tree | f343b25fcef686ac0d858dc91a9aa38536cc550f /removed | |
parent | 4b66f1978dfe8c180ae560e75d17518d932beee3 (diff) | |
download | Paper-4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a.tar.gz Paper-4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a.zip |
Re-add block inlining - Closes #1229
Also reordered MC Utils to be higher up
Diffstat (limited to 'removed')
-rw-r--r-- | removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch b/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch deleted file mode 100644 index 82925800bb..0000000000 --- a/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch +++ /dev/null @@ -1,181 +0,0 @@ -From 3492554953e265e90b7507d8085b7ee78ab418fc Mon Sep 17 00:00:00 2001 -From: Techcable <[email protected]> -Date: Wed, 30 Nov 2016 20:56:58 -0600 -Subject: [PATCH] Speedup BlockPos by fixing inlining - -Normally the JVM can inline virtual getters by having two sets of code, one is the 'optimized' code and the other is the 'deoptimized' code. -If a single type is used 99% of the time, then its worth it to inline, and to revert to 'deoptimized' the 1% of the time we encounter other types. -But if two types are encountered commonly, then the JVM can't inline them both, and the call overhead remains. - -This scenario also occurs with BlockPos and MutableBlockPos. -The variables in BlockPos are final, so MutableBlockPos can't modify them. -MutableBlockPos fixes this by adding custom mutable variables, and overriding the getters to access them. - -This approach with utility methods that operate on MutableBlockPos and BlockPos. -Specific examples are BlockPosition.up(), and World.isValidLocation(). -It makes these simple methods much slower than they need to be. - -This should result in an across the board speedup in anything that accesses blocks or does logic with positions. - -This is based upon conclusions drawn from inspecting the assenmbly generated bythe JIT compiler on my mircorbenchmarks. -They had 'callq' (invoke) instead of 'mov' (get from memory) instructions. - -diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java -index 679d5504e..8e737718e 100644 ---- a/src/main/java/net/minecraft/server/BaseBlockPosition.java -+++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java -@@ -7,11 +7,12 @@ import javax.annotation.concurrent.Immutable; - public class BaseBlockPosition implements Comparable<BaseBlockPosition> { - - public static final BaseBlockPosition ZERO = new BaseBlockPosition(0, 0, 0); -- private final int a; -- private final int b; -- private final int c; -- // Paper start -- public boolean isValidLocation() { -+ // Paper start - Make mutable and protected for MutableBlockPos and PooledBlockPos -+ protected int a; -+ protected int b; -+ protected int c; -+ -+ public final boolean isValidLocation() { - return a >= -30000000 && c >= -30000000 && a < 30000000 && c < 30000000 && b >= 0 && b < 256; - } - public boolean isInvalidYLocation() { -@@ -49,17 +50,19 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> { - return this.getY() == baseblockposition.getY() ? (this.getZ() == baseblockposition.getZ() ? this.getX() - baseblockposition.getX() : this.getZ() - baseblockposition.getZ()) : this.getY() - baseblockposition.getY(); - } - -- public int getX() { -+ // Paper start - Only allow a single implementation -+ public final int getX() { - return this.a; - } - -- public int getY() { -+ public final int getY() { - return this.b; - } - -- public int getZ() { -+ public final int getZ() { - return this.c; - } -+ // Paper end - - public BaseBlockPosition d(BaseBlockPosition baseblockposition) { - return new BaseBlockPosition(this.getY() * baseblockposition.getZ() - this.getZ() * baseblockposition.getY(), this.getZ() * baseblockposition.getX() - this.getX() * baseblockposition.getZ(), this.getX() * baseblockposition.getY() - this.getY() * baseblockposition.getX()); -diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java -index b3c1f550c..6a0b3a62d 100644 ---- a/src/main/java/net/minecraft/server/BlockPosition.java -+++ b/src/main/java/net/minecraft/server/BlockPosition.java -@@ -211,19 +211,21 @@ public class BlockPosition extends BaseBlockPosition { - if (this.b == null) { - this.b = new BlockPosition.MutableBlockPosition(i, j, k); - return this.b; -- } else if (this.b.b == l && this.b.c == i1 && this.b.d == j1) { -+ // Paper start - b, c, d, refer to x, y, z, and as such, a, b, c of BaseBlockPosition -+ } else if (((BaseBlockPosition)this.b).a == l && ((BaseBlockPosition)this.b).b == i1 && ((BaseBlockPosition)this.b).c == j1) { - return (BlockPosition.MutableBlockPosition) this.endOfData(); - } else { -- if (this.b.b < l) { -- ++this.b.b; -- } else if (this.b.c < i1) { -- this.b.b = i; -- ++this.b.c; -- } else if (this.b.d < j1) { -- this.b.b = i; -- this.b.c = j; -- ++this.b.d; -+ if (((BaseBlockPosition) this.b).a < l) { -+ ++((BaseBlockPosition) this.b).a; -+ } else if (((BaseBlockPosition) this.b).b < i1) { -+ ((BaseBlockPosition) this.b).a = i; -+ ++((BaseBlockPosition) this.b).b; -+ } else if (((BaseBlockPosition) this.b).c < j1) { -+ ((BaseBlockPosition) this.b).a = i; -+ ((BaseBlockPosition) this.b).b = j; -+ ++((BaseBlockPosition) this.b).c; - } -+ // Paper end - - return this.b; - } -@@ -338,6 +340,8 @@ public class BlockPosition extends BaseBlockPosition { - - public static class MutableBlockPosition extends BlockPosition { - -+ // Paper start - Remove variables -+ /* - protected int b; - protected int c; - protected int d; -@@ -350,6 +354,7 @@ public class BlockPosition extends BaseBlockPosition { - public boolean isInvalidYLocation() { - return c < 0 || c >= 256; - } -+ */ - // Paper end - - public MutableBlockPosition() { -@@ -362,9 +367,11 @@ public class BlockPosition extends BaseBlockPosition { - - public MutableBlockPosition(int i, int j, int k) { - super(0, 0, 0); -- this.b = i; -- this.c = j; -- this.d = k; -+ // Paper start - Modify base position variables -+ ((BaseBlockPosition) this).a = i; -+ ((BaseBlockPosition) this).b = j; -+ ((BaseBlockPosition) this).c = k; -+ // Paper end - } - - public BlockPosition a(double d0, double d1, double d2) { -@@ -383,6 +390,8 @@ public class BlockPosition extends BaseBlockPosition { - return super.a(enumblockrotation).h(); - } - -+ // Paper start - Use superclass methods -+ /* - public int getX() { - return this.b; - } -@@ -394,12 +403,16 @@ public class BlockPosition extends BaseBlockPosition { - public int getZ() { - return this.d; - } -+ */ -+ // Paper end - - public void setValues(int x, int y, int z) { c(x, y, z); } // Paper - OBFHELPER - public BlockPosition.MutableBlockPosition c(int i, int j, int k) { -- this.b = i; -- this.c = j; -- this.d = k; -+ // Paper start - Modify base position variables -+ ((BaseBlockPosition) this).a = i; -+ ((BaseBlockPosition) this).b = j; -+ ((BaseBlockPosition) this).c = k; -+ // Paper end - return this; - } - -@@ -416,11 +429,11 @@ public class BlockPosition extends BaseBlockPosition { - } - - public BlockPosition.MutableBlockPosition c(EnumDirection enumdirection, int i) { -- return this.c(this.b + enumdirection.getAdjacentX() * i, this.c + enumdirection.getAdjacentY() * i, this.d + enumdirection.getAdjacentZ() * i); -+ return this.c(this.getX() + enumdirection.getAdjacentX() * i, this.getY() + enumdirection.getAdjacentY() * i, this.getZ() + enumdirection.getAdjacentZ() * i); // Paper - USE THE BLEEPING GETTERS - } - - public void p(int i) { -- this.c = i; -+ ((BaseBlockPosition) this).b = i; // Paper - Modify base variable - } - - public BlockPosition h() { --- -2.18.0 - |