UNPKG

1.29 kBJavaScriptView Raw
1var assert = require('assert')
2
3module.exports = Nanotiming
4
5function Nanotiming (name) {
6 if (!(this instanceof Nanotiming)) return new Nanotiming(name)
7 assert.equal(typeof name, 'string', 'Nanotiming: name should be type string')
8 this._name = name
9 this._enabled = typeof window !== 'undefined' &&
10 window.performance && window.performance.mark
11}
12
13Nanotiming.prototype.start = function (partial) {
14 if (!this._enabled) return
15 var name = partial ? this._name + '/' + partial : this._name
16 var uuid = createUuid()
17 window.performance.mark(name + '-start-' + uuid)
18 return uuid
19}
20
21Nanotiming.prototype.end = function (uuid, partial) {
22 if (!this._enabled) return
23
24 assert.equal(typeof uuid, 'string', 'Nanotiming.end: uuid should be type string')
25
26 var name = partial ? this._name + '/' + partial : this._name
27 var endName = name + '-end-' + uuid
28 var startName = name + '-start-' + uuid
29 window.performance.mark(endName)
30
31 ric(function () {
32 window.performance.measure(name, startName, endName)
33 window.performance.clearMarks(startName)
34 window.performance.clearMarks(endName)
35 })
36}
37
38function createUuid () {
39 return window.performance.now() % 9e6
40}
41
42function ric (cb) {
43 if (this.hasIdleCallback) window.requestIdleCallback(cb)
44 else setTimeout(cb, 0)
45}