perf(game-engine): 대규모 NPC 천통 시간을 계측

시나리오 2601의 880명·94도시를 DB와 Redis 없이 자동 실행하고 커맨드, 수뇌 여부, 연월별 시간을 JSON으로 기록한다.
This commit is contained in:
2026-08-15 19:36:38 +00:00
parent 09777ef843
commit 20c04283fb
7 changed files with 767 additions and 0 deletions
@@ -67,10 +67,12 @@ export type TurnTestHarnessOptions = {
};
turnProcessorOptions?: {
tickMinutes: number;
beforeExecuteGeneral?: InMemoryTurnProcessorOptions['beforeExecuteGeneral'];
afterExecuteGeneral?: InMemoryTurnProcessorOptions['afterExecuteGeneral'];
};
worldRef?: { current: InMemoryTurnWorld | null };
onActionResolved?: Parameters<typeof createReservedTurnHandler>[0]['onActionResolved'];
onActionProfiled?: Parameters<typeof createReservedTurnHandler>[0]['onActionProfiled'];
commandRngFactory?: Parameters<typeof createReservedTurnHandler>[0]['commandRngFactory'];
wrapGeneralTurnHandler?: (handler: GeneralTurnHandler) => GeneralTurnHandler;
extraCalendarHandlers?: TurnCalendarHandler[];
@@ -110,6 +112,7 @@ export const createTurnTestHarness = async (options: TurnTestHarnessOptions) =>
unitSet: options.snapshot.unitSet,
getWorld: () => worldRef.current,
onActionResolved: options.onActionResolved,
onActionProfiled: options.onActionProfiled,
commandRngFactory: options.commandRngFactory,
});
@@ -150,6 +153,7 @@ export const createTurnTestHarness = async (options: TurnTestHarnessOptions) =>
const processor = new InMemoryTurnProcessor(world, {
tickMinutes: options.turnProcessorOptions?.tickMinutes ?? 10,
beforeExecuteGeneral: options.turnProcessorOptions?.beforeExecuteGeneral,
afterExecuteGeneral: options.turnProcessorOptions?.afterExecuteGeneral,
});