| 215 | * @public |
| 216 | */ |
| 217 | export class PerfLogger implements Logger { |
| 218 | private marks: Map<string, number> = new Map(); |
| 219 | |
| 220 | /** |
| 221 | * create new PerfLogger |
| 222 | */ |
| 223 | constructor() {} |
| 224 | |
| 225 | /** {@inheritDoc Logger.isEnabled} */ |
| 226 | isEnabled(): boolean { |
| 227 | return false; |
| 228 | } |
| 229 | |
| 230 | /** {@inheritDoc Logger.debug} */ |
| 231 | debug(source: string, category: string, ...args: any) {} |
| 232 | |
| 233 | /** {@inheritDoc Logger.info} */ |
| 234 | info(source: string, category: string, ...args: any) {} |
| 235 | |
| 236 | /** {@inheritDoc Logger.warn} */ |
| 237 | warn(source: string, category: string, ...args: any) {} |
| 238 | |
| 239 | /** {@inheritDoc Logger.error} */ |
| 240 | error(source: string, category: string, ...args: any) {} |
| 241 | |
| 242 | /** {@inheritDoc Logger.perf} */ |
| 243 | perf( |
| 244 | source: string, |
| 245 | category: string, |
| 246 | event: string, |
| 247 | phase: 'Begin' | 'End', |
| 248 | identifier: string, |
| 249 | ...args: any |
| 250 | ) { |
| 251 | const markName = `${source}.${category}.${event}.${phase}.${identifier}`; |
| 252 | |
| 253 | switch (phase) { |
| 254 | case 'Begin': |
| 255 | globalThis.performance.mark(markName, { detail: args }); |
| 256 | this.marks.set(`${source}.${category}.${event}.${identifier}`, Date.now()); |
| 257 | break; |
| 258 | case 'End': |
| 259 | globalThis.performance.mark(markName, { detail: args }); |
| 260 | const measureName = `${source}.${category}.${event}.Measure.${identifier}`; |
| 261 | const beginMark = `${source}.${category}.${event}.Begin.${identifier}`; |
| 262 | |
| 263 | globalThis.performance.measure(measureName, beginMark, markName); |
| 264 | |
| 265 | // Log duration to console |
| 266 | const startTime = this.marks.get(`${source}.${category}.${event}.${identifier}`); |
| 267 | if (startTime) { |
| 268 | const duration = Date.now() - startTime; |
| 269 | console.info(`⏱️ ${source}.${category}.${event}.${identifier}: ${duration}ms`); |
| 270 | this.marks.delete(`${source}.${category}.${event}.${identifier}`); |
| 271 | } |
| 272 | break; |
| 273 | } |
| 274 | } |
nothing calls this directly
no outgoing calls
no test coverage detected