RAF loop with an adaptive fps and performance ratio calculated from either a sample count or a sample duration. Typically used when doing intensive graphics computation in canvas.
npm install raf-perf
import RafPerf from "raf-perf";
import createCanvasContext from "canvas-context";
const { context, canvas } = createCanvasContext("2d", {
width: window.innerWidth,
height: window.innerHeight,
offscreen: true,
});
document.body.appendChild(canvas);
const engine = new RafPerf();
engine.on("tick", (dt) => {
// Clear
context.clearRect(0, 0, canvas.width, canvas.height);
// Draw
// ...
});
engine.on("perf", (ratio) => {
if (!ratio) return;
console.log(`Performance ratio: ${ratio}`);
if (ratio < 0.9) {
console.log("Too many draws");
} else if (ratio >= 0.9 && rectCount < maxRectCount) {
console.log("Draw more");
}
});
engine.start();
const destroy = () => {
if (engine.isRunning) engine.stop();
engine.removeAllListeners("tick");
engine.removeAllListeners("perf");
};
Object
Object
Kind: global class
Creates an instance of RafPerf.
Param | Type | Default | Description |
---|---|---|---|
[options] | Options |
{} |
samplesCount and sampleDuration are used concurrently. Set sampleDuration to a falsy value if you only want to sample performances from a number of frames. |
Run the requestAnimationFrame
loop and start checking performances if options.performances.enabled
is true
.
Kind: instance method of RafPerf
The frame loop callback.
Kind: instance method of RafPerf
Emits: perf
, tick
Run cancelAnimationFrame
if necessary and reset the engine.
Kind: instance method of RafPerf
Event triggered when performance ratio (this.frameDuration / averageDeltaTime
) is updated. Understand a ratio of the fps, for instance for a fps value of 24, ratio < 0.5
means that the averaged fps < 12
and you should probably do something about it.
Kind: event emitted by RafPerf
Event triggered on tick, throttled by options.fps
.
Kind: event emitted by RafPerf
Object
Kind: global typedef
Properties
Name | Type | Default | Description |
---|---|---|---|
[fps] | number |
60 |
Throttle fps. |
[performances] | OptionsPerformances |
{ enabled: true, samplesCount: 200, sampleDuration: 4000 } |
Performances metrics. |
Object
Kind: global typedef
Properties
Name | Type | Default | Description |
---|---|---|---|
[enabled] | boolean |
false |
Evaluate performances. |
[samplesCount] | number |
200 |
Number of samples to evaluate performances. |
[sampleDuration] | number |
200 |
Duration of sample to evaluate performances. |
MIT. See license file.