feat: 添加配置AE合成暂停检查阈值以降低上下文切换频率,默认值 100000

This commit is contained in:
C-H716 2025-09-20 20:20:41 +08:00
parent 1ee535391f
commit 51c5d4e3d7
3 changed files with 33 additions and 3 deletions

View File

@ -11,6 +11,7 @@ public final class ModConfigs {
public static final ModConfigSpec.BooleanValue PROVIDER_ROUND_ROBIN_ENABLE;
public static final ModConfigSpec.BooleanValue PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT;
public static final ModConfigSpec.IntValue SMART_SCALING_MAX_MULTIPLIER;
public static final ModConfigSpec.IntValue CRAFTING_PAUSE_THRESHOLD;
static {
ModConfigSpec.Builder builder = new ModConfigSpec.Builder();
@ -41,6 +42,12 @@ public final class ModConfigs {
)
.define("patternTerminalShowSlotsDefault", true);
CRAFTING_PAUSE_THRESHOLD = builder
.comment(
"值越大将减少AE构建合成计划过程中的 wait/notify 次数,提升吞吐但会降低调度响应性"
)
.defineInRange("craftingPauseThreshold", 100000, 100, Integer.MAX_VALUE);
// end general
builder.pop();
@ -88,5 +95,6 @@ public final class ModConfigs {
COMMON_SPEC = builder.build();
}
private ModConfigs() {}
private ModConfigs() {
}
}

View File

@ -0,0 +1,21 @@
package com.extendedae_plus.mixin.ae2;
import appeng.crafting.CraftingCalculation;
import com.extendedae_plus.config.ModConfigs;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
/**
* Mixin 用于增加 CraftingCalculation.handlePausing() incTime 的阈值
* 调整 CRAFTING_PAUSE_THRESHOLD 可以控制计算让出控制权的频率
*/
@Mixin(value = CraftingCalculation.class, remap = false)
public abstract class CraftingCalculationMixin {
// 可调节的阈值在执行 pause 检查前 handlePausing 被调用的次数
// 增大此值可以减少 wait/notify 的频率提升吞吐量但降低响应速度
@ModifyConstant(method = "handlePausing", constant = @Constant(intValue = 100))
private int modifyIncTimeThreshold(int original) {
return ModConfigs.CRAFTING_PAUSE_THRESHOLD.get();
}
}

View File

@ -4,6 +4,7 @@
"compatibilityLevel": "JAVA_21",
"mixins": [
"ae2.AEProcessingPatternMixin",
"ae2.CraftingCalculationMixin",
"ae2.CraftingCPUClusterMixin",
"ae2.EncodedPatternItemMixin",
"ae2.QuartzCuttingKnifeItemMixin",
@ -36,18 +37,18 @@
"PickFromWirelessMixin",
"accessor.AbstractContainerScreenAccessor",
"accessor.ScreenAccessor",
"ae2.menu.CraftConfirmMenuGoBackMixin",
"ae2.accessor.AEBaseScreenAccessor",
"ae2.accessor.AEBaseScreenInvoker",
"ae2.accessor.MEStorageScreenAccessor",
"ae2.accessor.PatternAccessTermScreenAccessor",
"ae2.accessor.PatternAccessTermScreenSlotsRowAccessor",
"ae2.client.gui.InterfaceScreenMixin",
"ae2.client.gui.AEBaseScreenMixin",
"ae2.client.gui.InterfaceScreenMixin",
"ae2.client.gui.PatternEncodingTermScreenMixin",
"ae2.client.gui.PatternProviderCloseMixin",
"ae2.client.gui.PatternProviderScreenMixin",
"ae2.client.gui.SlotGridLayoutMixin",
"ae2.menu.CraftConfirmMenuGoBackMixin",
"extendedae.accessor.GuiExPatternTerminalAccessor",
"extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor",
"extendedae.client.HighlightButtonMixin",