mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
smarter max rate
This commit is contained in:
1 parent
1569de4475
commit
a438eb704f
2 files changed
+92
-93
No files matched your search
@@ -9,6 +9,37 @@ export function withinTimeLimit() {
|
||||
return performance.now() < t1;
|
||||
}
|
||||
|
||||
export function sleep() {
|
||||
return new Promise((resolve) => setTimeout(resolve, 1000 / API_RATE));
|
||||
export function sleep(t: number) {
|
||||
return new Promise((resolve) => setTimeout(resolve, t));
|
||||
}
|
||||
|
||||
interface MethodContext {
|
||||
_break(): void;
|
||||
}
|
||||
|
||||
let lastT = 0;
|
||||
const maxDelta = 1000 / API_RATE;
|
||||
const DELTA_BUFFER = 0;
|
||||
export async function atMaxRate(method: (context: MethodContext) => void) {
|
||||
let isBroken = false;
|
||||
|
||||
const context: MethodContext = {
|
||||
_break() {
|
||||
isBroken = true;
|
||||
},
|
||||
};
|
||||
|
||||
while (!isBroken) {
|
||||
if (!withinTimeLimit()) break;
|
||||
|
||||
const t = performance.now();
|
||||
const delta = t - lastT;
|
||||
|
||||
if (delta < maxDelta) {
|
||||
await sleep(maxDelta - delta + DELTA_BUFFER);
|
||||
}
|
||||
|
||||
method(context);
|
||||
lastT = t;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user