MCPcopy Index your code
hub / github.com/dmnsgn/raf-perf

github.com/dmnsgn/raf-perf @v3.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.0.1 ↗ · + Follow
347 symbols 853 edges 7 files 8 documented · 2% updated 2y ago★ 62
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

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

RafPerf

Events

"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.
"tick"
Event triggered on tick, throttled by options.fps.

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

Param Type
type string
cb function

"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

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 true Evaluate performances.
[samplesCount] number 200 Number of samples to evaluate performances.
[sampleDuration] number 4000 Duration of sample to evaluate performances.

License

MIT. See license file.

Core symbols most depended-on inside this repo

w
called by 39
web_modules/es-module-shims.js
w
called by 39
web_modules/es-module-shims/debug.js
$
called by 19
web_modules/es-module-shims.js
$
called by 19
web_modules/es-module-shims/debug.js
checkOffset
called by 18
web_modules/_chunks/polyfills-CU6gNi7m.js
createBlob
called by 16
web_modules/es-module-shims.js
m
called by 16
web_modules/es-module-shims.js
createBlob
called by 16
web_modules/es-module-shims/debug.js

Shape

Function 326
Method 13
Class 8

Languages

TypeScript100%

Modules by API surface

web_modules/es-module-shims/debug.js109 symbols
web_modules/es-module-shims.js109 symbols
web_modules/es-module-shims/wasm.js59 symbols
web_modules/_chunks/polyfills-CU6gNi7m.js57 symbols
index.js12 symbols
web_modules/canvas-context.js1 symbols

For agents

$ claude mcp add raf-perf \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page