user-timing.ts 1.1 KB

1234567891011121314151617181920212223242526272829
  1. /**
  2. * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { Task } from '../task'
  7. const hasPerformance = typeof performance !== 'undefined'
  8. /**
  9. * on node `process.env.NODE_ENV` is available, in webpack build it is automatically set
  10. * by the DefinePlugin to the webpack `mode` value
  11. */
  12. const productionMode = process.env.NODE_ENV === 'production'
  13. const timingEnabled = hasPerformance && !productionMode
  14. export namespace UserTiming {
  15. function startMarkName(task: Task<any>) { return `startTask${task.id}` }
  16. function endMarkName(task: Task<any>) { return `endTask${task.id}` }
  17. export function markStart(task: Task<any>) {
  18. if (timingEnabled) performance.mark(startMarkName(task))
  19. }
  20. export function markEnd(task: Task<any>) {
  21. if (timingEnabled) performance.mark(endMarkName(task))
  22. }
  23. export function measure(task: Task<any>) {
  24. if (timingEnabled) performance.measure(`✳️ ${task.name}`, startMarkName(task), endMarkName(task))
  25. }
  26. }