3.0.0 • Published 9 months ago

raf-perf v3.0.0

Weekly downloads
18
License
MIT
Repository
github
Last release
9 months ago

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

npm.io

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();

const offTick = engine.on("tick", (dt) => {
  // Clear
  context.clearRect(0, 0, canvas.width, canvas.height);

  // Draw
  // ...
});

const offPerf = 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();
  offTick();
  offPerf();
};

API

Classes

Events

Typedefs

RafPerf

Kind: global class

new RafPerf(options)

Creates an instance of RafPerf.

ParamTypeDefaultDescription
optionsOptions{}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.TickEvent : string

Kind: instance property of RafPerf

rafPerf.PerfEvent : string

Kind: instance property of RafPerf

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: RafPerf.event:PerfEvent, RafPerf.event:TickEvent

rafPerf.stop()

Run cancelAnimationFrame if necessary and reset the engine.

Kind: instance method of RafPerf

rafPerf.on(type, cb) ⇒ function

Add "perf" and "tick" listeners.

Kind: instance method of RafPerf Returns: function - Call the return value to unsubscribe.

ParamType
typestring
cbfunction

"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

"tick"

Event triggered on tick, throttled by options.fps.

Kind: event emitted

Options : object

Kind: global typedef Properties

NameTypeDefaultDescription
fpsnumber60Throttle fps.
performancesOptionsPerformances{ enabled: true, samplesCount: 200, sampleDuration: 4000 }Performances metrics.

OptionsPerformances : object

Kind: global typedef Properties

NameTypeDefaultDescription
enabledbooleantrueEvaluate performances.
samplesCountnumber200Number of samples to evaluate performances.
sampleDurationnumber4000Duration of sample to evaluate performances.

License

MIT. See license file.