{"version":3,"sources":["../../src/use-fps/index.ts"],"sourcesContent":["import { useRef } from 'react'\nimport { useRafLoop } from '../use-raf-loop'\nimport { useSafeState } from '../use-safe-state'\nimport { isDefined } from '../utils/basic'\n\nimport type { Pausable } from '../use-pausable'\n\nexport interface UseFpsOptions {\n  /**\n   * Calculate the FPS on every x frames.\n   *\n   * @defaultValue 10\n   */\n  every?: number\n}\n\nexport interface UseFpsReturns extends Pausable {\n  /**\n   * Current FPS\n   */\n  fps: number\n}\n\n/**\n * A React Hook that returns the current frames per second (FPS) of the browser.\n */\nexport function useFps(options: UseFpsOptions = {}): UseFpsReturns {\n  const { every = 10 } = options\n\n  const last = useRef<DOMHighResTimeStamp>(undefined)\n  const ticks = useRef(0)\n  const [fps, setFps] = useSafeState(0)\n\n  const controls = useRafLoop(\n    () => {\n      if (!isDefined(last.current)) {\n        last.current = performance.now()\n      }\n\n      ticks.current += 1\n\n      if (ticks.current >= every) {\n        const now = performance.now()\n        const diff = now - last.current\n        setFps(Math.round(1000 / (diff / ticks.current)))\n        last.current = now\n        ticks.current = 0\n      }\n    },\n    { immediateCallback: true },\n  )\n\n  return { fps, ...controls }\n}\n"],"names":["useFps","options","every","last","useRef","undefined","ticks","useSafeState","fps","setFps","controls","useRafLoop","isDefined","current","performance","now","diff","Math","round","immediateCallback"],"mappings":";;;;+BA0BgBA;;;eAAAA;;;qBA1BO;0BACI;4BACE;qBACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBnB,SAASA;QAAOC,UAAAA,iEAAyB,CAAC;IAC/C,qBAAuBA,QAAfC,OAAAA,oCAAQ;IAEhB,IAAMC,OAAOC,IAAAA,aAAM,EAAsBC;IACzC,IAAMC,QAAQF,IAAAA,aAAM,EAAC;IACrB,IAAsBG,iCAAAA,IAAAA,0BAAY,EAAC,QAA5BC,MAAeD,kBAAVE,SAAUF;IAEtB,IAAMG,WAAWC,IAAAA,sBAAU,EACzB;QACE,IAAI,CAACC,IAAAA,gBAAS,EAACT,KAAKU,OAAO,GAAG;YAC5BV,KAAKU,OAAO,GAAGC,YAAYC,GAAG;QAChC;QAEAT,MAAMO,OAAO,IAAI;QAEjB,IAAIP,MAAMO,OAAO,IAAIX,OAAO;YAC1B,IAAMa,MAAMD,YAAYC,GAAG;YAC3B,IAAMC,OAAOD,MAAMZ,KAAKU,OAAO;YAC/BJ,OAAOQ,KAAKC,KAAK,CAAC,OAAQF,CAAAA,OAAOV,MAAMO,OAAO,AAAD;YAC7CV,KAAKU,OAAO,GAAGE;YACfT,MAAMO,OAAO,GAAG;QAClB;IACF,GACA;QAAEM,mBAAmB;IAAK;IAG5B,OAAO;QAAEX,KAAAA;OAAQE;AACnB"}