raf-perf

npm version stability-stable npm minzipped size dependencies types Conventional Commits styled with prettier linted with eslint license

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.

paypal coinbase twitter

Installation

npm install raf-perf

Usage

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");
};

API

Classes

RafPerf

Typedefs

Options : Object
OptionsPerformances : Object

RafPerf

Kind: global class

new RafPerf([options])

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.

rafPerf.start()

Run the requestAnimationFrame loop and start checking performances if options.performances.enabled is true.

Kind: instance method of RafPerf

rafPerf.tick()

The frame loop callback.

Kind: instance method of RafPerf
Emits: perf, tick

rafPerf.stop()

Run cancelAnimationFrame if necessary and reset the engine.

Kind: instance method of RafPerf

"perf"

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

"tick"

Event triggered on tick, throttled by options.fps.

Kind: event emitted by RafPerf

Options : Object

Kind: global typedef
Properties

Name Type Default Description
[fps] number 60 Throttle fps.
[performances] OptionsPerformances { enabled: true, samplesCount: 200, sampleDuration: 4000 } Performances metrics.

OptionsPerformances : 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.

License

MIT. See license file.