Optimize DataWatcher
Use primitive orientated collections, as well as more effective copies across collections. By: md_5 <git@md-5.net>
This commit is contained in:
113
CraftBukkit-Patches/0073-Optimize-DataWatcher.patch
Normal file
113
CraftBukkit-Patches/0073-Optimize-DataWatcher.patch
Normal file
@@ -0,0 +1,113 @@
|
||||
From 5121839a20fa4b458f7a22946b40923405568734 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Fri, 13 Dec 2013 11:45:47 +1100
|
||||
Subject: [PATCH] Optimize DataWatcher
|
||||
|
||||
Use primitive orientated collections, as well as more effective copies across collections.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
index 90a2a80..5402e5c 100644
|
||||
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
@@ -14,8 +14,8 @@ public class DataWatcher {
|
||||
|
||||
private final Entity a;
|
||||
private boolean b = true;
|
||||
- private static final HashMap c = new HashMap();
|
||||
- private final Map d = new HashMap();
|
||||
+ private static final gnu.trove.map.TObjectIntMap c = new gnu.trove.map.hash.TObjectIntHashMap(); // Spigot
|
||||
+ private final gnu.trove.map.TIntObjectMap d = new gnu.trove.map.hash.TIntObjectHashMap(); // Spigot
|
||||
private boolean e;
|
||||
private ReadWriteLock f = new ReentrantReadWriteLock();
|
||||
|
||||
@@ -36,7 +36,7 @@ public class DataWatcher {
|
||||
WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, object);
|
||||
|
||||
this.f.writeLock().lock();
|
||||
- this.d.put(Integer.valueOf(i), watchableobject);
|
||||
+ this.d.put(i, watchableobject); // Spigot
|
||||
this.f.writeLock().unlock();
|
||||
this.b = false;
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public class DataWatcher {
|
||||
WatchableObject watchableobject = new WatchableObject(j, i, null);
|
||||
|
||||
this.f.writeLock().lock();
|
||||
- this.d.put(Integer.valueOf(i), watchableobject);
|
||||
+ this.d.put(i, watchableobject); // Spigot
|
||||
this.f.writeLock().unlock();
|
||||
this.b = false;
|
||||
}
|
||||
@@ -81,7 +81,7 @@ public class DataWatcher {
|
||||
WatchableObject watchableobject;
|
||||
|
||||
try {
|
||||
- watchableobject = (WatchableObject) this.d.get(Integer.valueOf(i));
|
||||
+ watchableobject = (WatchableObject) this.d.get(i); // Spigot
|
||||
} catch (Throwable throwable) {
|
||||
CrashReport crashreport = CrashReport.a(throwable, "Getting synched entity data");
|
||||
CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Synched entity data");
|
||||
@@ -133,7 +133,7 @@ public class DataWatcher {
|
||||
|
||||
if (this.e) {
|
||||
this.f.readLock().lock();
|
||||
- Iterator iterator = this.d.values().iterator();
|
||||
+ Iterator iterator = this.d.valueCollection().iterator(); // Spigot
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||||
@@ -157,7 +157,7 @@ public class DataWatcher {
|
||||
|
||||
public void a(PacketDataSerializer packetdataserializer) {
|
||||
this.f.readLock().lock();
|
||||
- Iterator iterator = this.d.values().iterator();
|
||||
+ Iterator iterator = this.d.valueCollection().iterator(); // Spigot
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||||
@@ -170,18 +170,11 @@ public class DataWatcher {
|
||||
}
|
||||
|
||||
public List c() {
|
||||
- ArrayList arraylist = null;
|
||||
+ ArrayList arraylist = new ArrayList(); // Spigot
|
||||
|
||||
this.f.readLock().lock();
|
||||
|
||||
- WatchableObject watchableobject;
|
||||
-
|
||||
- for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) {
|
||||
- watchableobject = (WatchableObject) iterator.next();
|
||||
- if (arraylist == null) {
|
||||
- arraylist = new ArrayList();
|
||||
- }
|
||||
- }
|
||||
+ arraylist.addAll(this.d.valueCollection()); // Spigot
|
||||
|
||||
this.f.readLock().unlock();
|
||||
return arraylist;
|
||||
@@ -295,12 +288,14 @@ public class DataWatcher {
|
||||
}
|
||||
|
||||
static {
|
||||
- c.put(Byte.class, Integer.valueOf(0));
|
||||
- c.put(Short.class, Integer.valueOf(1));
|
||||
- c.put(Integer.class, Integer.valueOf(2));
|
||||
- c.put(Float.class, Integer.valueOf(3));
|
||||
- c.put(String.class, Integer.valueOf(4));
|
||||
- c.put(ItemStack.class, Integer.valueOf(5));
|
||||
- c.put(ChunkCoordinates.class, Integer.valueOf(6));
|
||||
+ // Spigot Start - remove valueOf
|
||||
+ c.put(Byte.class, 0);
|
||||
+ c.put(Short.class, 1);
|
||||
+ c.put(Integer.class, 2);
|
||||
+ c.put(Float.class, 3);
|
||||
+ c.put(String.class, 4);
|
||||
+ c.put(ItemStack.class, 5);
|
||||
+ c.put(ChunkCoordinates.class, 6);
|
||||
+ // Spigot End
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
||||
Reference in New Issue
Block a user