UNPKG

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