mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 17:31:53 +07:00
111 lines
2.7 KiB
JavaScript
111 lines
2.7 KiB
JavaScript
const parseTruthyEnv = (value) => {
|
|
if (typeof value !== "string") {
|
|
return false;
|
|
}
|
|
const normalized = value.trim().toLowerCase();
|
|
return normalized === "1" || normalized === "true";
|
|
};
|
|
|
|
export function resolveThreadPoolPolicy({
|
|
env = process.env,
|
|
isCI = false,
|
|
isWindows = false,
|
|
hostCpuCount = 0,
|
|
hostMemoryGiB = 0,
|
|
loadRatio = 0,
|
|
testProfile = "normal",
|
|
} = {}) {
|
|
const forceThreads = parseTruthyEnv(env.OPENCLAW_TEST_FORCE_THREADS);
|
|
const forceForks =
|
|
parseTruthyEnv(env.OPENCLAW_TEST_FORCE_FORKS) ||
|
|
parseTruthyEnv(env.OPENCLAW_TEST_DISABLE_THREAD_EXPANSION);
|
|
|
|
if (isCI) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "threads",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: isWindows ? 1 : 3,
|
|
reason: "ci-preserves-current-policy",
|
|
};
|
|
}
|
|
|
|
if (forceForks) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "forced-forks",
|
|
};
|
|
}
|
|
|
|
if (forceThreads) {
|
|
return {
|
|
threadExpansionEnabled: true,
|
|
defaultUnitPool: "threads",
|
|
defaultBasePool: "threads",
|
|
unitFastLaneCount: hostCpuCount >= 12 && hostMemoryGiB >= 96 && loadRatio < 0.5 ? 2 : 1,
|
|
reason: "forced-threads",
|
|
};
|
|
}
|
|
|
|
if (isWindows) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "windows-local-conservative",
|
|
};
|
|
}
|
|
|
|
if (testProfile === "serial" || testProfile === "low" || testProfile === "macmini") {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "profile-conservative",
|
|
};
|
|
}
|
|
|
|
if (hostMemoryGiB < 64) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "memory-below-thread-threshold",
|
|
};
|
|
}
|
|
|
|
if (hostCpuCount < 10) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "cpu-below-thread-threshold",
|
|
};
|
|
}
|
|
|
|
if (loadRatio >= 0.9) {
|
|
return {
|
|
threadExpansionEnabled: false,
|
|
defaultUnitPool: "forks",
|
|
defaultBasePool: "forks",
|
|
unitFastLaneCount: 1,
|
|
reason: "host-under-load",
|
|
};
|
|
}
|
|
|
|
return {
|
|
threadExpansionEnabled: true,
|
|
defaultUnitPool: "threads",
|
|
defaultBasePool: "threads",
|
|
unitFastLaneCount: hostCpuCount >= 12 && hostMemoryGiB >= 96 && loadRatio < 0.5 ? 2 : 1,
|
|
reason: "strong-local-host",
|
|
};
|
|
}
|