101 lines
3.7 KiB
TypeScript
101 lines
3.7 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {convertPerfProfileToEvents} from '../../src/firefox_extension/lib/parser_util';
|
|
|
|
function assertEventsEqual(actualEvents: any[], expectedEvents: any[]) {
|
|
expect(actualEvents.length == expectedEvents.length);
|
|
for (let i = 0; i < actualEvents.length; ++i) {
|
|
const actualEvent = actualEvents[i];
|
|
const expectedEvent = expectedEvents[i];
|
|
for (const key in actualEvent) {
|
|
expect(actualEvent[key]).toEqual(expectedEvent[key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
export function main() {
|
|
describe('convertPerfProfileToEvents', function() {
|
|
it('should convert single instantaneous event', function() {
|
|
const profileData = {
|
|
threads: [
|
|
{samples: [{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]}]}
|
|
]
|
|
};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'script'}]);
|
|
});
|
|
|
|
it('should convert single non-instantaneous event', function() {
|
|
const profileData = {
|
|
threads: [{
|
|
samples: [
|
|
{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 2, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 100, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]}
|
|
]
|
|
}]
|
|
};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(
|
|
perfEvents, [{ph: 'B', ts: 1, name: 'script'}, {ph: 'E', ts: 100, name: 'script'}]);
|
|
});
|
|
|
|
it('should convert multiple instantaneous events', function() {
|
|
const profileData = {
|
|
threads: [{
|
|
samples: [
|
|
{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 2, frames: [{location: 'PresShell::Paint'}]}
|
|
]
|
|
}]
|
|
};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(
|
|
perfEvents, [{ph: 'X', ts: 1, name: 'script'}, {ph: 'X', ts: 2, name: 'render'}]);
|
|
});
|
|
|
|
it('should convert multiple mixed events', function() {
|
|
const profileData = {
|
|
threads: [{
|
|
samples: [
|
|
{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 2, frames: [{location: 'PresShell::Paint'}]},
|
|
{time: 5, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 10, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]}
|
|
]
|
|
}]
|
|
};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(perfEvents, [
|
|
{ph: 'X', ts: 1, name: 'script'}, {ph: 'X', ts: 2, name: 'render'},
|
|
{ph: 'B', ts: 5, name: 'script'}, {ph: 'E', ts: 10, name: 'script'}
|
|
]);
|
|
});
|
|
|
|
it('should add args to gc events', function() {
|
|
const profileData = {threads: [{samples: [{time: 1, frames: [{location: 'forceGC'}]}]}]};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'gc', args: {usedHeapSize: 0}}]);
|
|
});
|
|
|
|
it('should skip unknown events', function() {
|
|
const profileData = {
|
|
threads: [{
|
|
samples: [
|
|
{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
|
|
{time: 2, frames: [{location: 'foo'}]}
|
|
]
|
|
}]
|
|
};
|
|
const perfEvents = convertPerfProfileToEvents(profileData);
|
|
assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'script'}]);
|
|
});
|
|
});
|
|
}
|