Skip to content

Commit 8af6194

Browse files
committed
fix : improve engine workers management
1 parent bff407f commit 8af6194

14 files changed

Lines changed: 241 additions & 211 deletions

File tree

assets/showcase.png

30 KB
Loading

src/components/LinearProgressBar.tsx

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,44 +12,40 @@ const LinearProgressBar = (
1212
if (props.value === 0) return null;
1313

1414
return (
15-
<Grid container alignItems="center" justifyContent="center" size={12}>
15+
<Grid
16+
container
17+
alignItems="center"
18+
justifyContent="center"
19+
wrap="nowrap"
20+
width="90%"
21+
columnGap={2}
22+
size={12}
23+
>
1624
<Typography variant="caption" align="center">
1725
{props.label}
1826
</Typography>
19-
<Grid
20-
container
21-
width="90%"
22-
alignItems="center"
23-
justifyContent="center"
24-
wrap="nowrap"
25-
columnGap={2}
26-
size={12}
27-
>
28-
<Grid sx={{ width: "100%" }}>
29-
<LinearProgress
30-
variant="determinate"
31-
{...props}
32-
sx={(theme) => ({
33-
borderRadius: "5px",
34-
height: "5px",
35-
[`&.${linearProgressClasses.colorPrimary}`]: {
36-
backgroundColor:
37-
theme.palette.grey[
38-
theme.palette.mode === "light" ? 200 : 700
39-
],
40-
},
41-
[`& .${linearProgressClasses.bar}`]: {
42-
borderRadius: 5,
43-
backgroundColor: "#308fe8",
44-
},
45-
})}
46-
/>
47-
</Grid>
48-
<Grid>
49-
<Typography variant="body2" color="text.secondary">{`${Math.round(
50-
props.value
51-
)}%`}</Typography>
52-
</Grid>
27+
<Grid sx={{ width: "100%" }}>
28+
<LinearProgress
29+
variant="determinate"
30+
{...props}
31+
sx={(theme) => ({
32+
borderRadius: "5px",
33+
height: "5px",
34+
[`&.${linearProgressClasses.colorPrimary}`]: {
35+
backgroundColor:
36+
theme.palette.grey[theme.palette.mode === "light" ? 200 : 700],
37+
},
38+
[`& .${linearProgressClasses.bar}`]: {
39+
borderRadius: 5,
40+
backgroundColor: "#308fe8",
41+
},
42+
})}
43+
/>
44+
</Grid>
45+
<Grid>
46+
<Typography variant="body2" color="text.secondary">{`${Math.round(
47+
props.value
48+
)}%`}</Typography>
5349
</Grid>
5450
</Grid>
5551
);

src/hooks/useEngine.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ import { UciEngine } from "@/lib/engine/uciEngine";
77
import { EngineName } from "@/types/enums";
88
import { useEffect, useState } from "react";
99

10-
export const useEngine = (
11-
engineName: EngineName | undefined,
12-
workersNb?: number
13-
) => {
10+
export const useEngine = (engineName: EngineName | undefined) => {
1411
const [engine, setEngine] = useState<UciEngine | null>(null);
1512

1613
useEffect(() => {
@@ -20,35 +17,32 @@ export const useEngine = (
2017
return;
2118
}
2219

23-
pickEngine(engineName, workersNb).then((newEngine) => {
20+
pickEngine(engineName).then((newEngine) => {
2421
setEngine((prev) => {
2522
prev?.shutdown();
2623
return newEngine;
2724
});
2825
});
29-
}, [engineName, workersNb]);
26+
}, [engineName]);
3027

3128
return engine;
3229
};
3330

34-
const pickEngine = (
35-
engine: EngineName,
36-
workersNb?: number
37-
): Promise<UciEngine> => {
31+
const pickEngine = (engine: EngineName): Promise<UciEngine> => {
3832
switch (engine) {
3933
case EngineName.Stockfish17:
40-
return Stockfish17.create(false, workersNb);
34+
return Stockfish17.create(false);
4135
case EngineName.Stockfish17Lite:
42-
return Stockfish17.create(true, workersNb);
36+
return Stockfish17.create(true);
4337
case EngineName.Stockfish16_1:
44-
return Stockfish16_1.create(false, workersNb);
38+
return Stockfish16_1.create(false);
4539
case EngineName.Stockfish16_1Lite:
46-
return Stockfish16_1.create(true, workersNb);
40+
return Stockfish16_1.create(true);
4741
case EngineName.Stockfish16:
48-
return Stockfish16.create(false, workersNb);
42+
return Stockfish16.create(false);
4943
case EngineName.Stockfish16NNUE:
50-
return Stockfish16.create(true, workersNb);
44+
return Stockfish16.create(true);
5145
case EngineName.Stockfish11:
52-
return Stockfish11.create(workersNb);
46+
return Stockfish11.create();
5347
}
5448
};

src/lib/engine/stockfish11.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import { EngineName } from "@/types/enums";
22
import { UciEngine } from "./uciEngine";
3-
import { getEngineWorkers } from "./worker";
43

54
export class Stockfish11 {
6-
public static async create(workersNb?: number): Promise<UciEngine> {
7-
const workers = getEngineWorkers("engines/stockfish-11.js", workersNb);
5+
public static async create(): Promise<UciEngine> {
6+
const enginePath = "engines/stockfish-11.js";
87

9-
return UciEngine.create(EngineName.Stockfish11, workers);
8+
return UciEngine.create(EngineName.Stockfish11, enginePath);
109
}
1110

1211
public static isSupported() {

src/lib/engine/stockfish16.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { EngineName } from "@/types/enums";
22
import { UciEngine } from "./uciEngine";
33
import { isMultiThreadSupported, isWasmSupported } from "./shared";
4-
import { getEngineWorkers } from "./worker";
4+
import { sendCommandsToWorker } from "./worker";
5+
import { EngineWorker } from "@/types/engine";
56

67
export class Stockfish16 {
7-
public static async create(
8-
nnue?: boolean,
9-
workersNb?: number
10-
): Promise<UciEngine> {
8+
public static async create(nnue?: boolean): Promise<UciEngine> {
119
if (!Stockfish16.isSupported()) {
1210
throw new Error("Stockfish 16 is not supported");
1311
}
@@ -19,10 +17,9 @@ export class Stockfish16 {
1917
? "engines/stockfish-16/stockfish-nnue-16.js"
2018
: "engines/stockfish-16/stockfish-nnue-16-single.js";
2119

22-
const customEngineInit = async (
23-
sendCommands: UciEngine["sendCommands"]
24-
) => {
25-
await sendCommands(
20+
const customEngineInit = async (worker: EngineWorker) => {
21+
await sendCommandsToWorker(
22+
worker,
2623
[`setoption name Use NNUE value ${!!nnue}`, "isready"],
2724
"readyok"
2825
);
@@ -32,9 +29,7 @@ export class Stockfish16 {
3229
? EngineName.Stockfish16NNUE
3330
: EngineName.Stockfish16;
3431

35-
const workers = getEngineWorkers(enginePath, workersNb);
36-
37-
return UciEngine.create(engineName, workers, customEngineInit);
32+
return UciEngine.create(engineName, enginePath, customEngineInit);
3833
}
3934

4035
public static isSupported() {

src/lib/engine/stockfish16_1.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { EngineName } from "@/types/enums";
22
import { UciEngine } from "./uciEngine";
33
import { isMultiThreadSupported, isWasmSupported } from "./shared";
4-
import { getEngineWorkers } from "./worker";
54

65
export class Stockfish16_1 {
7-
public static async create(
8-
lite?: boolean,
9-
workersNb?: number
10-
): Promise<UciEngine> {
6+
public static async create(lite?: boolean): Promise<UciEngine> {
117
if (!Stockfish16_1.isSupported()) {
128
throw new Error("Stockfish 16.1 is not supported");
139
}
@@ -23,9 +19,7 @@ export class Stockfish16_1 {
2319
? EngineName.Stockfish16_1Lite
2420
: EngineName.Stockfish16_1;
2521

26-
const workers = getEngineWorkers(enginePath, workersNb);
27-
28-
return UciEngine.create(engineName, workers);
22+
return UciEngine.create(engineName, enginePath);
2923
}
3024

3125
public static isSupported() {

src/lib/engine/stockfish17.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { EngineName } from "@/types/enums";
22
import { UciEngine } from "./uciEngine";
33
import { isMultiThreadSupported, isWasmSupported } from "./shared";
4-
import { getEngineWorkers } from "./worker";
54

65
export class Stockfish17 {
7-
public static async create(
8-
lite?: boolean,
9-
workersNb?: number
10-
): Promise<UciEngine> {
6+
public static async create(lite?: boolean): Promise<UciEngine> {
117
if (!Stockfish17.isSupported()) {
128
throw new Error("Stockfish 17 is not supported");
139
}
@@ -23,9 +19,7 @@ export class Stockfish17 {
2319
? EngineName.Stockfish17Lite
2420
: EngineName.Stockfish17;
2521

26-
const workers = getEngineWorkers(enginePath, workersNb);
27-
28-
return UciEngine.create(engineName, workers);
22+
return UciEngine.create(engineName, enginePath);
2923
}
3024

3125
public static isSupported() {

0 commit comments

Comments
 (0)