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 (var i = 0; i < actualEvents.length; ++i) {
 | |
|     var actualEvent = actualEvents[i];
 | |
|     var expectedEvent = expectedEvents[i];
 | |
|     for (var key in actualEvent) {
 | |
|       expect(actualEvent[key]).toEqual(expectedEvent[key]);
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| export function main() {
 | |
|   describe('convertPerfProfileToEvents', function() {
 | |
|     it('should convert single instantaneous event', function() {
 | |
|       var profileData = {
 | |
|         threads: [
 | |
|           {samples: [{time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]}]}
 | |
|         ]
 | |
|       };
 | |
|       var perfEvents = convertPerfProfileToEvents(profileData);
 | |
|       assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'script'}]);
 | |
|     });
 | |
| 
 | |
|     it('should convert single non-instantaneous event', function() {
 | |
|       var profileData = {
 | |
|         threads: [{
 | |
|           samples: [
 | |
|             {time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
 | |
|             {time: 2, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
 | |
|             {time: 100, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]}
 | |
|           ]
 | |
|         }]
 | |
|       };
 | |
|       var perfEvents = convertPerfProfileToEvents(profileData);
 | |
|       assertEventsEqual(
 | |
|           perfEvents, [{ph: 'B', ts: 1, name: 'script'}, {ph: 'E', ts: 100, name: 'script'}]);
 | |
|     });
 | |
| 
 | |
|     it('should convert multiple instantaneous events', function() {
 | |
|       var profileData = {
 | |
|         threads: [{
 | |
|           samples: [
 | |
|             {time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
 | |
|             {time: 2, frames: [{location: 'PresShell::Paint'}]}
 | |
|           ]
 | |
|         }]
 | |
|       };
 | |
|       var perfEvents = convertPerfProfileToEvents(profileData);
 | |
|       assertEventsEqual(
 | |
|           perfEvents, [{ph: 'X', ts: 1, name: 'script'}, {ph: 'X', ts: 2, name: 'render'}]);
 | |
|     });
 | |
| 
 | |
|     it('should convert multiple mixed events', function() {
 | |
|       var 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'}]}
 | |
|           ]
 | |
|         }]
 | |
|       };
 | |
|       var 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() {
 | |
|       var profileData = {threads: [{samples: [{time: 1, frames: [{location: 'forceGC'}]}]}]};
 | |
|       var perfEvents = convertPerfProfileToEvents(profileData);
 | |
|       assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'gc', args: {usedHeapSize: 0}}]);
 | |
|     });
 | |
| 
 | |
|     it('should skip unknown events', function() {
 | |
|       var profileData = {
 | |
|         threads: [{
 | |
|           samples: [
 | |
|             {time: 1, frames: [{location: 'FirefoxDriver.prototype.executeScript'}]},
 | |
|             {time: 2, frames: [{location: 'foo'}]}
 | |
|           ]
 | |
|         }]
 | |
|       };
 | |
|       var perfEvents = convertPerfProfileToEvents(profileData);
 | |
|       assertEventsEqual(perfEvents, [{ph: 'X', ts: 1, name: 'script'}]);
 | |
|     });
 | |
|   });
 | |
| };
 |