1 | var onIdle = require('on-idle')
|
2 | var assert = require('assert')
|
3 |
|
4 | var perf
|
5 | var disabled = true
|
6 | try {
|
7 | perf = window.performance
|
8 | disabled = window.localStorage.DISABLE_NANOTIMING === 'true' || !perf.mark
|
9 | } catch (e) { }
|
10 |
|
11 | module.exports = nanotiming
|
12 |
|
13 | function 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 |
|
39 | function noop (cb) {
|
40 | if (cb) onIdle(cb)
|
41 | }
|