Apply idle optimizations throughout code base

Summary:
See explanation in parent diff, make sure the idler is used efficiently, instead of wasting a lot of CPU creating a new callstack every time `idle` is called.

Also fixed that cancelled idlers could result in an _uncaught_ exception

Reviewed By: nikoant

Differential Revision: D19158593

fbshipit-source-id: 0be505a74c374e0ca6ee0e79b1f1e98ac9b80467
This commit is contained in:
Michel Weststrate
2019-12-19 04:25:44 -08:00
committed by Facebook Github Bot
parent 0a5df48639
commit bc36c1607d
2 changed files with 3 additions and 3 deletions

View File

@@ -25,7 +25,7 @@ export class Idler implements BaseIdler {
return this.kill || performance.now() - this.lastIdle > this.interval;
}
idle(): Promise<void> {
async idle(): Promise<void> {
if (this.kill) {
throw new CancelledPromiseError('Idler got killed');
}
@@ -34,7 +34,7 @@ export class Idler implements BaseIdler {
this.lastIdle = now;
return new Promise(resolve => setTimeout(resolve, 0));
}
return Promise.resolve();
return undefined;
}
cancel() {

View File

@@ -136,7 +136,7 @@ export async function makeObjectSerializable(
let prevStackLength = stack.length;
let accumulator = prevStackLength;
while (stack.length > 0) {
if (idler) {
if (idler && idler.shouldIdle()) {
await idler.idle();
}
const element = stack[stack.length - 1];