Optimize EntityDataManager by dropping its lock
This commit is contained in:
parent
cef6d7e3fc
commit
8982e79ba6
@ -0,0 +1,61 @@
|
|||||||
|
package io.izzel.arclight.impl.common.optimization;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.locks.Condition;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
import java.util.concurrent.locks.ReadWriteLock;
|
||||||
|
|
||||||
|
public class NoopReadWriteLock implements ReadWriteLock {
|
||||||
|
|
||||||
|
private static final NoopReadWriteLock INSTANCE = new NoopReadWriteLock();
|
||||||
|
private static final NoopLock LOCK = new NoopLock();
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Lock readLock() {
|
||||||
|
return LOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Lock writeLock() {
|
||||||
|
return LOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ReadWriteLock instance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class NoopLock implements Lock {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void lock() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void lockInterruptibly() throws InterruptedException {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean tryLock() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean tryLock(long time, @NotNull TimeUnit unit) throws InterruptedException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlock() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Condition newCondition() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package io.izzel.arclight.impl.mixin.optimization.general;
|
||||||
|
|
||||||
|
import io.izzel.arclight.impl.common.optimization.NoopReadWriteLock;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.network.datasync.EntityDataManager;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import java.util.concurrent.locks.ReadWriteLock;
|
||||||
|
|
||||||
|
@Mixin(EntityDataManager.class)
|
||||||
|
public class EntityDataManagerMixin_Optimize {
|
||||||
|
|
||||||
|
@Shadow @Final @Mutable private ReadWriteLock lock;
|
||||||
|
|
||||||
|
@Inject(method = "<init>", at = @At("RETURN"))
|
||||||
|
private void optimize$dropLock(Entity entityIn, CallbackInfo ci) {
|
||||||
|
this.lock = NoopReadWriteLock.instance();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@
|
|||||||
"refmap": "mixins.arclight.impl.refmap.1_16.json",
|
"refmap": "mixins.arclight.impl.refmap.1_16.json",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"ClassInheritanceMultiMapMixin",
|
"ClassInheritanceMultiMapMixin",
|
||||||
|
"EntityDataManagerMixin_Optimize",
|
||||||
"VoxelShapesMixin",
|
"VoxelShapesMixin",
|
||||||
"activationrange.ActivationRangeMixin",
|
"activationrange.ActivationRangeMixin",
|
||||||
"activationrange.EntityMixin_ActivationRange",
|
"activationrange.EntityMixin_ActivationRange",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user