@keyframerdev/vitals 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -620,7 +620,7 @@ function slimArg(a, idOf) {
620
620
 
621
621
  // src/version.ts
622
622
  var SDK_NAME = "@keyframerdev/vitals";
623
- var SDK_VERSION = "0.1.1";
623
+ var SDK_VERSION = "0.1.2";
624
624
 
625
625
  // src/controller.ts
626
626
  var STORAGE_KEYS = {
@@ -1265,6 +1265,40 @@ function tickFieldMeter(f, t) {
1265
1265
  return f.buf.length >= 90;
1266
1266
  }
1267
1267
 
1268
+ // src/jsLoop.ts
1269
+ function createJsLoop({ raf, frame }) {
1270
+ let running = false;
1271
+ let gen = 0;
1272
+ const chain = (mine) => {
1273
+ const tick = () => {
1274
+ if (!running || mine !== gen)
1275
+ return;
1276
+ if (frame())
1277
+ raf(tick);
1278
+ else
1279
+ running = false;
1280
+ };
1281
+ return tick;
1282
+ };
1283
+ return {
1284
+ get running() {
1285
+ return running;
1286
+ },
1287
+ start() {
1288
+ if (running)
1289
+ return false;
1290
+ running = true;
1291
+ gen++;
1292
+ raf(chain(gen));
1293
+ return true;
1294
+ },
1295
+ stop() {
1296
+ running = false;
1297
+ gen++;
1298
+ }
1299
+ };
1300
+ }
1301
+
1268
1302
  // src/native.ts
1269
1303
  var perf = globalThis.performance;
1270
1304
  var now = () => perf && typeof perf.now === "function" ? perf.now() : Date.now();
@@ -1405,21 +1439,18 @@ function extendUi(ms) {
1405
1439
  }, ms);
1406
1440
  }
1407
1441
  var jsMeter = createFieldMeter("js");
1408
- var jsRunning = false;
1409
- function jsTick() {
1410
- if (!jsRunning)
1411
- return;
1412
- const t = now();
1413
- const last = jsMeter.m.last;
1414
- const interval = jsMeter.m.interval;
1415
- tickFrameMeter(jsMeter.m, t);
1416
- jsMeter.m.stats.length = 0;
1417
- jsMeter.m.drops.length = 0;
1418
- if (controller.jsFrame(t, last >= 0 ? t - last : 0, interval))
1419
- requestAnimationFrame(jsTick);
1420
- else
1421
- jsRunning = false;
1422
- }
1442
+ var jsLoop = createJsLoop({
1443
+ raf: (cb) => requestAnimationFrame(cb),
1444
+ frame: () => {
1445
+ const t = now();
1446
+ const last = jsMeter.m.last;
1447
+ const interval = jsMeter.m.interval;
1448
+ tickFrameMeter(jsMeter.m, t);
1449
+ jsMeter.m.stats.length = 0;
1450
+ jsMeter.m.drops.length = 0;
1451
+ return controller.jsFrame(t, last >= 0 ? t - last : 0, interval);
1452
+ }
1453
+ });
1423
1454
  var uiInstalled = false;
1424
1455
  var meters = {
1425
1456
  install() {
@@ -1438,10 +1469,9 @@ var meters = {
1438
1469
  uiInstalled = false;
1439
1470
  },
1440
1471
  start() {
1441
- if (!jsRunning) {
1442
- jsRunning = true;
1472
+ if (!jsLoop.running) {
1443
1473
  jsMeter.m.last = -1;
1444
- requestAnimationFrame(jsTick);
1474
+ jsLoop.start();
1445
1475
  }
1446
1476
  },
1447
1477
  extendUi(ms) {
@@ -1449,7 +1479,7 @@ var meters = {
1449
1479
  extendUi(ms);
1450
1480
  },
1451
1481
  stop() {
1452
- jsRunning = false;
1482
+ jsLoop.stop();
1453
1483
  if (uiInstalled)
1454
1484
  stopUi();
1455
1485
  }
@@ -0,0 +1,11 @@
1
+ export type JsLoopDeps = {
2
+ raf: (cb: () => void) => unknown;
3
+ /** One frame: return false to end the loop (the motion window closed). */
4
+ frame: () => boolean;
5
+ };
6
+ export declare function createJsLoop({ raf, frame }: JsLoopDeps): {
7
+ readonly running: boolean;
8
+ /** Starts the loop unless it is already running. Returns true when it started a new chain. */
9
+ start(): boolean;
10
+ stop(): void;
11
+ };
@@ -1,3 +1,3 @@
1
1
  /** This package's version: sent in every report's `sdk`, and compared with the config's `minSdk`. Keep it in step with package.json. */
2
2
  export declare const SDK_NAME = "@keyframerdev/vitals";
3
- export declare const SDK_VERSION = "0.1.1";
3
+ export declare const SDK_VERSION = "0.1.2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keyframerdev/vitals",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Motion Vitals for React Native: slow frames and janky animations from production, by screen and call site",
5
5
  "keywords": [
6
6
  "react-native",