Skip to content

Commit fb51a31

Browse files
committed
Add option to disable thread pool
1 parent ef528a4 commit fb51a31

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.embeddedt.modernfix.common.mixin.feature.cause_lag_by_disabling_threads;
2+
3+
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
4+
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.ModifyArg;
8+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
9+
10+
import java.util.concurrent.Executor;
11+
import java.util.concurrent.LinkedBlockingQueue;
12+
import java.util.concurrent.ThreadPoolExecutor;
13+
import java.util.concurrent.TimeUnit;
14+
15+
@Mixin(ChunkRenderDispatcher.class)
16+
@ClientOnlyMixin
17+
public class ChunkRenderDispatcherMixin {
18+
private static final Executor MFIX_CHUNK_BUILD_EXECUTOR = new ThreadPoolExecutor(1, computeNumThreads(), 0L, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
19+
20+
private static int computeNumThreads() {
21+
return Math.max(Math.min(Runtime.getRuntime().availableProcessors() / 4, 10), 1);
22+
}
23+
24+
@ModifyVariable(method = "<init>*", at = @At("HEAD"), ordinal = 0, argsOnly = true)
25+
private static Executor replaceExecutor(Executor old) {
26+
return MFIX_CHUNK_BUILD_EXECUTOR;
27+
}
28+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.embeddedt.modernfix.common.mixin.feature.cause_lag_by_disabling_threads;
2+
3+
import net.minecraft.Util;
4+
import org.embeddedt.modernfix.util.DirectExecutorService;
5+
import org.spongepowered.asm.mixin.Final;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Mutable;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
10+
import java.util.concurrent.ExecutorService;
11+
12+
@Mixin(Util.class)
13+
public class UtilMixin {
14+
@Shadow @Final @Mutable
15+
private static final ExecutorService BACKGROUND_EXECUTOR = new DirectExecutorService();
16+
}

common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public DefaultSettingMapBuilder put(String key, Boolean value) {
166166
.put("mixin.feature.stalled_chunk_load_detection", false)
167167
.put("mixin.perf.blast_search_trees.force", false)
168168
.put("mixin.bugfix.restore_old_dragon_movement", false)
169+
.put("mixin.feature.cause_lag_by_disabling_threads", false)
169170
.put("mixin.perf.clear_mixin_classinfo", false)
170171
.put("mixin.perf.deduplicate_climate_parameters", false)
171172
.put("mixin.bugfix.packet_leak", false)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.embeddedt.modernfix.util;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
5+
import java.util.List;
6+
import java.util.concurrent.AbstractExecutorService;
7+
import java.util.concurrent.TimeUnit;
8+
9+
public class DirectExecutorService extends AbstractExecutorService {
10+
private boolean isShutdown;
11+
12+
@Override
13+
public void shutdown() {
14+
isShutdown = true;
15+
}
16+
17+
@NotNull
18+
@Override
19+
public List<Runnable> shutdownNow() {
20+
isShutdown = true;
21+
return List.of();
22+
}
23+
24+
@Override
25+
public boolean isShutdown() {
26+
return isShutdown;
27+
}
28+
29+
@Override
30+
public boolean isTerminated() {
31+
return isShutdown;
32+
}
33+
34+
@Override
35+
public boolean awaitTermination(long timeout, @NotNull TimeUnit unit) throws InterruptedException {
36+
return true;
37+
}
38+
39+
@Override
40+
public void execute(@NotNull Runnable command) {
41+
command.run();
42+
}
43+
}

0 commit comments

Comments
 (0)