-
Notifications
You must be signed in to change notification settings - Fork 28.2k
/
performance_entry.js
85 lines (67 loc) Β· 1.76 KB
/
performance_entry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
'use strict';
const {
ObjectSetPrototypeOf,
Symbol,
TypeError,
} = primordials;
const {
customInspectSymbol: kInspect,
} = require('internal/util');
const { inspect } = require('util');
const kName = Symbol('kName');
const kType = Symbol('kType');
const kStart = Symbol('kStart');
const kDuration = Symbol('kDuration');
const kDetail = Symbol('kDetail');
const kBufferNext = Symbol('kBufferNext');
function isPerformanceEntry(obj) {
return obj?.[kName] !== undefined;
}
class PerformanceEntry {
constructor() {
// eslint-disable-next-line no-restricted-syntax
throw new TypeError('illegal constructor');
}
get name() { return this[kName]; }
get entryType() { return this[kType]; }
get startTime() { return this[kStart]; }
get duration() { return this[kDuration]; }
get detail() { return this[kDetail]; }
[kInspect](depth, options) {
if (depth < 0) return this;
const opts = {
...options,
depth: options.depth == null ? null : options.depth - 1
};
return `${this.constructor.name} ${inspect(this.toJSON(), opts)}`;
}
toJSON() {
return {
name: this.name,
entryType: this.entryType,
startTime: this.startTime,
duration: this.duration,
detail: this.detail,
};
}
}
class InternalPerformanceEntry {
constructor(name, type, start, duration, detail) {
this[kName] = name;
this[kType] = type;
this[kStart] = start;
this[kDuration] = duration;
this[kDetail] = detail;
this[kBufferNext] = null;
}
}
InternalPerformanceEntry.prototype.constructor = PerformanceEntry;
ObjectSetPrototypeOf(
InternalPerformanceEntry.prototype,
PerformanceEntry.prototype);
module.exports = {
InternalPerformanceEntry,
PerformanceEntry,
isPerformanceEntry,
kBufferNext,
};