UNPKG

896 BJavaScriptView Raw
1var onIdle = require('on-idle')
2var assert = require('assert')
3
4var perf
5var disabled = true
6try {
7 perf = window.performance
8 disabled = window.localStorage.DISABLE_NANOTIMING === 'true' || !perf.mark
9} catch (e) { }
10
11module.exports = nanotiming
12
13function nanotiming (name) {
14 assert.equal(typeof name, 'string', 'nanotiming: name should be type string')
15
16 if (disabled) return noop
17
18 var uuid = (perf.now() * 100).toFixed()
19 var startName = 'start-' + uuid + '-' + name
20 perf.mark(startName)
21
22 function end (cb) {
23 var endName = 'end-' + uuid + '-' + name
24 perf.mark(endName)
25
26 onIdle(function () {
27 var measureName = name + ' [' + uuid + ']'
28 perf.measure(measureName, startName, endName)
29 perf.clearMarks(startName)
30 perf.clearMarks(endName)
31 if (cb) cb(name)
32 })
33 }
34
35 end.uuid = uuid
36 return end
37}
38
39function noop (cb) {
40 if (cb) onIdle(cb)
41}