From 1e68baea9dce643f35874cccfa7d580b6a45db5b Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 17 Mar 2023 23:08:33 +0700 Subject: [PATCH] Revert using open hash set in dirtyFields --- .../mc/otm/network/FieldSynchronizer.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt index 3d4884440..be238eedf 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt @@ -454,8 +454,7 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa } } - private val dirtyFields = ReferenceOpenHashSet>(fields.size) - private val dirtyFields2 = ArrayList>() + private val dirtyFields = ReferenceArraySet>(fields.size) // use LinkedList because it is ensured memory is freed on LinkedList#clear private val mapBacklogs = Reference2ObjectOpenHashMap, LinkedList Unit>>>() @@ -475,7 +474,6 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa unused = true mapBacklogs.clear() dirtyFields.clear() - dirtyFields2.clear() val iterator = endpoints.listIterator() @@ -501,14 +499,11 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa return } - if (dirtyFields.add(field)) { - dirtyFields2.add(field) - } + dirtyFields.add(field) } internal fun removeDirtyField(field: AbstractField<*>) { dirtyFields.remove(field) - dirtyFields2.remove(field) } internal fun getMapBacklog(map: Map): LinkedList Unit>> { @@ -522,20 +517,19 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa } fun collectNetworkPayload(): FastByteArrayOutputStream? { - if (unused || dirtyFields2.isEmpty()) { + if (unused || dirtyFields.isEmpty()) { return null } val stream = FastByteArrayOutputStream() val dataStream = DataOutputStream(stream) - for (field in dirtyFields2) { + for (field in dirtyFields) { stream.writeVarIntLE(field.id) field.write(dataStream, this) } dirtyFields.clear() - dirtyFields2.clear() stream.write(0) return stream