UNPKG

@tldraw/editor

Version:

tldraw infinite canvas SDK (editor).

8 lines (7 loc) 3.81 kB
{ "version": 3, "sources": ["../../../../../src/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.ts"], "sourcesContent": ["import type { PerformanceManager } from './PerformanceManager'\n\n/** Wrap performance.mark with try/catch \u2014 `detail` option may throw in Safari/Firefox. */\nfunction safeMark(name: string, detail?: Record<string, unknown>) {\n\ttry {\n\t\tperformance.mark(name, detail ? { detail } : undefined)\n\t} catch {\n\t\tperformance.mark(name)\n\t}\n}\n\n/**\n * Optional adapter that pipes PerformanceManager events into browser\n * `performance.mark()` / `performance.measure()` for DevTools integration.\n *\n * Tree-shakeable \u2014 only included if imported.\n *\n * @example\n * ```ts\n * const adapter = new PerformanceApiAdapter(editor.performance)\n * // ... later\n * adapter.dispose()\n * ```\n *\n * @public\n */\nexport class PerformanceApiAdapter {\n\tprivate cleanups: (() => void)[] = []\n\n\tconstructor(perfManager: PerformanceManager) {\n\t\tthis.cleanups.push(\n\t\t\tperfManager.on('interaction-start', (event) => {\n\t\t\t\tsafeMark(`tldraw:interaction:${event.name}:start`, { path: event.path })\n\t\t\t})\n\t\t)\n\n\t\tthis.cleanups.push(\n\t\t\tperfManager.on('interaction-end', (event) => {\n\t\t\t\tconst startMark = `tldraw:interaction:${event.name}:start`\n\t\t\t\tconst endMark = `tldraw:interaction:${event.name}:end`\n\t\t\t\tsafeMark(endMark, {\n\t\t\t\t\tpath: event.path,\n\t\t\t\t\tfps: event.fps,\n\t\t\t\t\tframeCount: event.frameCount,\n\t\t\t\t\tshapeCount: event.shapeCount,\n\t\t\t\t})\n\t\t\t\ttry {\n\t\t\t\t\tperformance.measure(`tldraw:interaction:${event.name}`, startMark, endMark)\n\t\t\t\t} catch {\n\t\t\t\t\t// start mark may not exist if adapter attached mid-interaction\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\n\t\tthis.cleanups.push(\n\t\t\tperfManager.on('camera-start', (event) => {\n\t\t\t\tsafeMark(`tldraw:camera:${event.type}:start`)\n\t\t\t})\n\t\t)\n\n\t\tthis.cleanups.push(\n\t\t\tperfManager.on('camera-end', (event) => {\n\t\t\t\tconst startMark = `tldraw:camera:${event.type}:start`\n\t\t\t\tconst endMark = `tldraw:camera:${event.type}:end`\n\t\t\t\tsafeMark(endMark, { fps: event.fps, shapeCount: event.shapeCount })\n\t\t\t\ttry {\n\t\t\t\t\tperformance.measure(`tldraw:camera:${event.type}`, startMark, endMark)\n\t\t\t\t} catch {\n\t\t\t\t\t// start mark may not exist\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\t}\n\n\t/** Remove all listeners and stop piping events. @public */\n\tdispose() {\n\t\tfor (const cleanup of this.cleanups) {\n\t\t\tcleanup()\n\t\t}\n\t\tthis.cleanups.length = 0\n\t}\n}\n"], "mappings": "AAGA,SAAS,SAAS,MAAc,QAAkC;AACjE,MAAI;AACH,gBAAY,KAAK,MAAM,SAAS,EAAE,OAAO,IAAI,MAAS;AAAA,EACvD,QAAQ;AACP,gBAAY,KAAK,IAAI;AAAA,EACtB;AACD;AAiBO,MAAM,sBAAsB;AAAA,EAC1B,WAA2B,CAAC;AAAA,EAEpC,YAAY,aAAiC;AAC5C,SAAK,SAAS;AAAA,MACb,YAAY,GAAG,qBAAqB,CAAC,UAAU;AAC9C,iBAAS,sBAAsB,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,MACxE,CAAC;AAAA,IACF;AAEA,SAAK,SAAS;AAAA,MACb,YAAY,GAAG,mBAAmB,CAAC,UAAU;AAC5C,cAAM,YAAY,sBAAsB,MAAM,IAAI;AAClD,cAAM,UAAU,sBAAsB,MAAM,IAAI;AAChD,iBAAS,SAAS;AAAA,UACjB,MAAM,MAAM;AAAA,UACZ,KAAK,MAAM;AAAA,UACX,YAAY,MAAM;AAAA,UAClB,YAAY,MAAM;AAAA,QACnB,CAAC;AACD,YAAI;AACH,sBAAY,QAAQ,sBAAsB,MAAM,IAAI,IAAI,WAAW,OAAO;AAAA,QAC3E,QAAQ;AAAA,QAER;AAAA,MACD,CAAC;AAAA,IACF;AAEA,SAAK,SAAS;AAAA,MACb,YAAY,GAAG,gBAAgB,CAAC,UAAU;AACzC,iBAAS,iBAAiB,MAAM,IAAI,QAAQ;AAAA,MAC7C,CAAC;AAAA,IACF;AAEA,SAAK,SAAS;AAAA,MACb,YAAY,GAAG,cAAc,CAAC,UAAU;AACvC,cAAM,YAAY,iBAAiB,MAAM,IAAI;AAC7C,cAAM,UAAU,iBAAiB,MAAM,IAAI;AAC3C,iBAAS,SAAS,EAAE,KAAK,MAAM,KAAK,YAAY,MAAM,WAAW,CAAC;AAClE,YAAI;AACH,sBAAY,QAAQ,iBAAiB,MAAM,IAAI,IAAI,WAAW,OAAO;AAAA,QACtE,QAAQ;AAAA,QAER;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA;AAAA,EAGA,UAAU;AACT,eAAW,WAAW,KAAK,UAAU;AACpC,cAAQ;AAAA,IACT;AACA,SAAK,SAAS,SAAS;AAAA,EACxB;AACD;", "names": [] }