-
Notifications
You must be signed in to change notification settings - Fork 0
/
binast-service.js
80 lines (67 loc) · 1.83 KB
/
binast-service.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
// FIXME: Precompute buckets.
let BUCKETS = [];
function Entry({estimatedParsingTime, totalTimeToInteractive}) {
this.estimatedParsingTime = intoBucket(estimatedParsingTime);
this.totalTimeToInteractive = intoBucket(totalTimeToInteractive);
}
function Collection() {
}
Collection.prototype = {
insert: function(url, performance) {
if (typeof this[url] == "undefined") {
this[url] = [];
}
this[url].push(new Entry(performance));
}
}
let ping = {
// Performance for a page that uses only BinAST.
//
// Map: URL -> Entry.
binASTPerformance: new Collection(),
// Performance for a page that uses both BinAST and text source.
//
// Map: URL -> Entry.
mixedPerformance: new Collection(),
// Performance for a page that uses only text source.
//
// Map: URL -> Entry.
textPerformance: new Collection(),
};
function intoBucket(value) {
for (let i = 0; i < BUCKETS.length; ++i) {
if (value <= BUCKETS[i]) {
return i;
}
}
return BUCKETS.length;
}
function onPerf(event) {
console.log("BinAST Monitor Background Service", "Received event", event);
// -- Add to buckets.
let {
content,
url,
value
} = event;
let collection;
if (content.hasBinASTJS && (content.hasTextJS || content.hasUnknownJS)) {
collection = ping.mixedPerformance;
} else if (content.hasBinASTJS) {
collection = ping.binASTPerformance;
} else {
collection = ping.textPerformance;
}
collection.insert(value)
// --
browser.telemetry
}
browser.runtime.onMessage.addListener(function(msg) {
switch (msg.event) {
case "perf":
return onTimeMeasured(event);
default:
console.error("Invalid event", msg);
return;
}
})