UNPKG

benchpress

Version:

Benchpress - a framework for e2e performance tests

52 lines 9.36 kB
var { Cc, Ci, Cu } = require('chrome'); var os = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService); var ParserUtil = require('./parser_util'); class Profiler { constructor() { this._profiler = Cc['@mozilla.org/tools/profiler;1'].getService(Ci.nsIProfiler); } start(entries, interval, features, timeStarted) { this._profiler.StartProfiler(entries, interval, features, features.length); this._profilerStartTime = timeStarted; this._markerEvents = []; } stop() { this._profiler.StopProfiler(); } getProfilePerfEvents() { var profileData = this._profiler.getProfileData(); var perfEvents = ParserUtil.convertPerfProfileToEvents(profileData); perfEvents = this._mergeMarkerEvents(perfEvents); perfEvents.sort(function (event1, event2) { return event1.ts - event2.ts; }); // Sort by ts return perfEvents; } _mergeMarkerEvents(perfEvents) { this._markerEvents.forEach(function (markerEvent) { perfEvents.push(markerEvent); }); return perfEvents; } addStartEvent(name, timeStarted) { this._markerEvents.push({ ph: 'b', ts: timeStarted - this._profilerStartTime, name: name }); } addEndEvent(name, timeEnded) { this._markerEvents.push({ ph: 'e', ts: timeEnded - this._profilerStartTime, name: name }); } } function forceGC() { Cu.forceGC(); os.notifyObservers(null, 'child-gc-request', null); } ; var mod = require('sdk/page-mod'); var data = require('sdk/self').data; var profiler = new Profiler(); mod.PageMod({ include: ['*'], contentScriptFile: data.url('installed_script.js'), onAttach: worker => { worker.port.on('startProfiler', (timeStarted) => profiler.start(/* = profiler memory */ 3000000, 0.1, ['leaf', 'js', 'stackwalk', 'gc'], timeStarted)); worker.port.on('stopProfiler', () => profiler.stop()); worker.port.on('getProfile', () => worker.port.emit('perfProfile', profiler.getProfilePerfEvents())); worker.port.on('forceGC', forceGC); worker.port.on('markStart', (name, timeStarted) => profiler.addStartEvent(name, timeStarted)); worker.port.on('markEnd', (name, timeEnded) => profiler.addEndEvent(name, timeEnded)); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpZmZpbmdfcGx1Z2luX3dyYXBwZXItb3V0cHV0X3BhdGgteEJMSUJyVlIudG1wL2JlbmNocHJlc3Mvc3JjL2ZpcmVmb3hfZXh0ZW5zaW9uL2xpYi9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDakYsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDO0lBS0U7UUFBZ0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsK0JBQStCLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUVsRyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpDLG9CQUFvQjtRQUNsQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMs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QUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInZhciB7Q2MsIENpLCBDdX0gPSByZXF1aXJlKCdjaHJvbWUnKTtcbnZhciBvcyA9IENjWydAbW96aWxsYS5vcmcvb2JzZXJ2ZXItc2VydmljZTsxJ10uZ2V0U2VydmljZShDaS5uc0lPYnNlcnZlclNlcnZpY2UpO1xudmFyIFBhcnNlclV0aWwgPSByZXF1aXJlKCcuL3BhcnNlcl91dGlsJyk7XG5cbmNsYXNzIFByb2ZpbGVyIHtcbiAgcHJpdmF0ZSBfcHJvZmlsZXI7XG4gIHByaXZhdGUgX21hcmtlckV2ZW50czogYW55W107XG4gIHByaXZhdGUgX3Byb2ZpbGVyU3RhcnRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7IHRoaXMuX3Byb2ZpbGVyID0gQ2NbJ0Btb3ppbGxhLm9yZy90b29scy9wcm9maWxlcjsxJ10uZ2V0U2VydmljZShDaS5uc0lQcm9maWxlcik7IH1cblxuICBzdGFydChlbnRyaWVzLCBpbnRlcnZhbCwgZmVhdHVyZXMsIHRpbWVTdGFydGVkKSB7XG4gICAgdGhpcy5fcHJvZmlsZXIuU3RhcnRQcm9maWxlcihlbnRyaWVzLCBpbnRlcnZhbCwgZmVhdHVyZXMsIGZlYXR1cmVzLmxlbmd0aCk7XG4gICAgdGhpcy5fcHJvZmlsZXJTdGFydFRpbWUgPSB0aW1lU3RhcnRlZDtcbiAgICB0aGlzLl9tYXJrZXJFdmVudHMgPSBbXTtcbiAgfVxuXG4gIHN0b3AoKSB7IHRoaXMuX3Byb2ZpbGVyLlN0b3BQcm9maWxlcigpOyB9XG5cbiAgZ2V0UHJvZmlsZVBlcmZFdmVudHMoKSB7XG4gICAgdmFyIHByb2ZpbGVEYXRhID0gdGhpcy5fcHJvZmlsZXIuZ2V0UHJvZmlsZURhdGEoKTtcbiAgICB2YXIgcGVyZkV2ZW50cyA9IFBhcnNlclV0aWwuY29udmVydFBlcmZQcm9maWxlVG9FdmVudHMocHJvZmlsZURhdGEpO1xuICAgIHBlcmZFdmVudHMgPSB0aGlzLl9tZXJnZU1hcmtlckV2ZW50cyhwZXJmRXZlbnRzKTtcbiAgICBwZXJmRXZlbnRzLnNvcnQoZnVuY3Rpb24oZXZlbnQxLCBldmVudDIpIHsgcmV0dXJuIGV2ZW50MS50cyAtIGV2ZW50Mi50czsgfSk7ICAvLyBTb3J0IGJ5IHRzXG4gICAgcmV0dXJuIHBlcmZFdmVudHM7XG4gIH1cblxuICBfbWVyZ2VNYXJrZXJFdmVudHMocGVyZkV2ZW50czogYW55W10pOiBhbnlbXSB7XG4gICAgdGhpcy5fbWFya2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24obWFya2VyRXZlbnQpIHsgcGVyZkV2ZW50cy5wdXNoKG1hcmtlckV2ZW50KTsgfSk7XG4gICAgcmV0dXJuIHBlcmZFdmVudHM7XG4gIH1cblxuICBhZGRTdGFydEV2ZW50KG5hbWU6IHN0cmluZywgdGltZVN0YXJ0ZWQ6IG51bWJlcikge1xuICAgIHRoaXMuX21hcmtlckV2ZW50cy5wdXNoKHtwaDogJ2InLCB0czogdGltZVN0YXJ0ZWQgLSB0aGlzLl9wcm9maWxlclN0YXJ0VGltZSwgbmFtZTogbmFtZX0pO1xuICB9XG5cbiAgYWRkRW5kRXZlbnQobmFtZTogc3RyaW5nLCB0aW1lRW5kZWQ6IG51bWJlcikge1xuICAgIHRoaXMuX21hcmtlckV2ZW50cy5wdXNoKHtwaDogJ2UnLCB0czogdGltZUVuZGVkIC0gdGhpcy5fcHJvZmlsZXJTdGFydFRpbWUsIG5hbWU6IG5hbWV9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZUdDKCkge1xuICBDdS5mb3JjZUdDKCk7XG4gIG9zLm5vdGlmeU9ic2VydmVycyhudWxsLCAnY2hpbGQtZ2MtcmVxdWVzdCcsIG51bGwpO1xufTtcblxudmFyIG1vZCA9IHJlcXVpcmUoJ3Nkay9wYWdlLW1vZCcpO1xudmFyIGRhdGEgPSByZXF1aXJlKCdzZGsvc2VsZicpLmRhdGE7XG52YXIgcHJvZmlsZXIgPSBuZXcgUHJvZmlsZXIoKTtcbm1vZC5QYWdlTW9kKHtcbiAgaW5jbHVkZTogWycqJ10sXG4gIGNvbnRlbnRTY3JpcHRGaWxlOiBkYXRhLnVybCgnaW5zdGFsbGVkX3NjcmlwdC5qcycpLFxuICBvbkF0dGFjaDogd29ya2VyID0+IHtcbiAgICB3b3JrZXIucG9ydC5vbignc3RhcnRQcm9maWxlcicsXG4gICAgICAgICAgICAgICAgICAgKHRpbWVTdGFydGVkKSA9PiBwcm9maWxlci5zdGFydCgvKiA9IHByb2ZpbGVyIG1lbW9yeSAqLyAzMDAwMDAwLCAwLjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xlYWYnLCAnanMnLCAnc3RhY2t3YWxrJywgJ2djJ10sIHRpbWVTdGFydGVkKSk7XG4gICAgd29ya2VyLnBvcnQub24oJ3N0b3BQcm9maWxlcicsICgpID0+IHByb2ZpbGVyLnN0b3AoKSk7XG4gICAgd29ya2VyLnBvcnQub24oJ2dldFByb2ZpbGUnLFxuICAgICAgICAgICAgICAgICAgICgpID0+IHdvcmtlci5wb3J0LmVtaXQoJ3BlcmZQcm9maWxlJywgcHJvZmlsZXIuZ2V0UHJvZmlsZVBlcmZFdmVudHMoKSkpO1xuICAgIHdvcmtlci5wb3J0Lm9uKCdmb3JjZUdDJywgZm9yY2VHQyk7XG4gICAgd29ya2VyLnBvcnQub24oJ21hcmtTdGFydCcsIChuYW1lLCB0aW1lU3RhcnRlZCkgPT4gcHJvZmlsZXIuYWRkU3RhcnRFdmVudChuYW1lLCB0aW1lU3RhcnRlZCkpO1xuICAgIHdvcmtlci5wb3J0Lm9uKCdtYXJrRW5kJywgKG5hbWUsIHRpbWVFbmRlZCkgPT4gcHJvZmlsZXIuYWRkRW5kRXZlbnQobmFtZSwgdGltZUVuZGVkKSk7XG4gIH1cbn0pO1xuIl19