Revert using open hash set in dirtyFields

This commit is contained in:
DBotThePony 2023-03-17 23:08:33 +07:00
parent 5b5c4de9f7
commit 1e68baea9d
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -454,8 +454,7 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa
}
}
private val dirtyFields = ReferenceOpenHashSet<AbstractField<*>>(fields.size)
private val dirtyFields2 = ArrayList<AbstractField<*>>()
private val dirtyFields = ReferenceArraySet<AbstractField<*>>(fields.size)
// use LinkedList because it is ensured memory is freed on LinkedList#clear
private val mapBacklogs = Reference2ObjectOpenHashMap<Map<*, *>, LinkedList<Pair<Any?, (DataOutputStream) -> 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 <K, V> getMapBacklog(map: Map<K, V>): LinkedList<Pair<Any?, (DataOutputStream) -> 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