UNPKG

1.25 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 = this._uuid()
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 if (window.requestIdleCallback) {
31 window.requestIdleCallback(function () {
32 window.performance.measure(name, startName, endName)
33 })
34 } else {
35 window.performance.measure(name, startName, endName)
36 }
37}
38
39Nanotiming.prototype._uuid = function () {
40 return window.performance.now() % 9e6
41}