{"version":3,"file":"perf.cjs","sourceRoot":"","sources":["../../src/analytics/perf.ts"],"names":[],"mappings":";;;AAMA,0CAA8D;AAC9D,uCAA8B;AAEjB,QAAA,GAAG,GAAG,IAAA,2BAAkB,EAAC,sBAAa,EAAE,MAAM,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,SAAgB,aAAa;IAC3B,OAAO,sBAAa,CAAC,OAAO,IAAI,WAAG,CAAC,OAAO,CAAC;AAC9C,CAAC;AAFD,sCAEC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,IAAI,CAAC,OAAqB;IACxC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,WAAG,GAAE,CAAC;IACpB,OAAO,SAAS,IAAI;QAClB,MAAM,QAAQ,GAAG,IAAA,WAAG,GAAE,GAAG,KAAK,CAAC;QAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,IAAA,WAAG,EAAC,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC;AAbD,oBAaC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAAoB;IACrD,OAAO,KAAK,EACV,OAAqB,EACrB,EAA2C,EACtB,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAhBD,gDAgBC","sourcesContent":["import type {\n  TraceCallback,\n  TraceContext,\n  TraceRequest,\n} from '@metamask/controller-utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport { now } from './timer';\n\nexport const log = createModuleLogger(projectLogger, 'perf');\n\n/**\n * Returns true when DEBUG=metamask:multichain-account-service, DEBUG=metamask:multichain-account-service:perf\n * or a matching glob is set.\n * Re-uses the same enable/disable logic as the rest of the package loggers.\n *\n * @returns True if performance logging is enabled, false otherwise.\n */\nexport function isPerfEnabled(): boolean {\n  return projectLogger.enabled || log.enabled;\n}\n\n/**\n * Starts a local performance timer. Returns a `tock` function that, when called,\n * logs the elapsed time for `label`.\n *\n * @example\n * ```ts\n * const tock = tick(request);\n * await createAccounts(...);\n * tock(); // logs: \"${request.name}: 123.45ms\"\n * ```\n *\n * @param request - A trace request object containing the name and optional data.\n * @returns A function that, when called, logs the elapsed time since `tick` was called.\n */\nexport function tick(request: TraceRequest): () => void {\n  if (!isPerfEnabled()) {\n    return () => undefined;\n  }\n\n  const start = now();\n  return function tock(): void {\n    const duration = now() - start;\n\n    const context = request.data ? ` (${JSON.stringify(request.data)})` : '';\n\n    log(`${request.name}${context}: ${duration.toFixed(2)}ms`);\n  };\n}\n\n/**\n * Wraps a trace callback with local performance logging.\n *\n * @param trace - The original trace callback to wrap.\n * @returns A new trace callback that logs the duration of the traced operation.\n */\nexport function withLocalPerfTrace(trace: TraceCallback): TraceCallback {\n  return async <ReturnType>(\n    request: TraceRequest,\n    fn?: (context?: TraceContext) => ReturnType,\n  ): Promise<ReturnType> => {\n    if (!isPerfEnabled()) {\n      return await trace(request, fn);\n    }\n\n    const tock = tick(request);\n    try {\n      return await trace(request, fn);\n    } finally {\n      tock();\n    }\n  };\n}\n"]}