Add tests for importers (#56)

This also fixes deep copy import for Instruments when copying from Instruments 7

Related to #14
This commit is contained in:
Jamie Wong 2018-05-29 23:53:03 -07:00 committed by GitHub
parent 405e751bbb
commit 2207ff54ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 14015 additions and 19 deletions

View File

@ -7,7 +7,11 @@ import {importFromBGFlameGraph} from './import/bg-flamegraph'
import {importFromStackprof} from './import/stackprof'
import {importFromChromeTimeline, importFromChromeCPUProfile} from './import/chrome'
import {importFromFirefox} from './import/firefox'
import {importFromInstrumentsDeepCopy, importFromInstrumentsTrace} from './import/instruments'
import {
importFromInstrumentsDeepCopy,
importFromInstrumentsTrace,
FileSystemDirectoryEntry,
} from './import/instruments'
import {FlamechartRenderer} from './flamechart-renderer'
import {CanvasContext} from './canvas-context'
@ -82,7 +86,7 @@ function importProfile(fileName: string, contents: string): Profile | null {
// If the first line contains "Symbol Name", preceded by a tab, it's probably
// a deep copy from OS X Instruments.app
if (/^[\w \t]*\tSymbol Name/.exec(contents)) {
if (/^[\w \t\(\)]*\tSymbol Name/.exec(contents)) {
console.log('Importing as Instruments.app deep copy')
return importFromInstrumentsDeepCopy(contents)
}
@ -366,7 +370,7 @@ export class Application extends ReloadableComponent<{}, ApplicationState> {
const firstItem = ev.dataTransfer.items[0]
if ('webkitGetAsEntry' in firstItem) {
const webkitEntry: WebKitEntry = firstItem.webkitGetAsEntry()
const webkitEntry: FileSystemDirectoryEntry = firstItem.webkitGetAsEntry()
// Instrument.app file format is actually a directory.
if (webkitEntry.isDirectory && webkitEntry.name.endsWith('.trace')) {
@ -415,7 +419,7 @@ export class Application extends ReloadableComponent<{}, ApplicationState> {
async maybeLoadHashParamProfile() {
if (this.hashParams.profileURL) {
this.loadProfile(async () => {
const response = await fetch(this.hashParams.profileURL)
const response = await fetch(this.hashParams.profileURL!)
let filename = new URL(this.hashParams.profileURL!).pathname
if (filename.includes('/')) {
filename = filename.slice(filename.lastIndexOf('/') + 1)

View File

@ -0,0 +1,50 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`importFromBGFlameGraph 1`] = `
Object {
"frames": Array [
Frame {
"col": undefined,
"file": undefined,
"key": "a",
"line": undefined,
"name": "a",
"selfWeight": 0,
"totalWeight": 14,
},
Frame {
"col": undefined,
"file": undefined,
"key": "b",
"line": undefined,
"name": "b",
"selfWeight": 5,
"totalWeight": 14,
},
Frame {
"col": undefined,
"file": undefined,
"key": "c",
"line": undefined,
"name": "c",
"selfWeight": 5,
"totalWeight": 5,
},
Frame {
"col": undefined,
"file": undefined,
"key": "d",
"line": undefined,
"name": "d",
"selfWeight": 4,
"totalWeight": 4,
},
],
"stacks": Array [
"a;b;c 2",
"a;b;d 4",
"a;b;c 3",
"a;b 5",
],
}
`;

View File

@ -0,0 +1,284 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`importFromChromeCPUProfile 1`] = `
Object {
"frames": Array [
Frame {
"col": -1,
"file": "",
"key": "(root)::-1:-1",
"line": -1,
"name": "(root)",
"selfWeight": 0,
"totalWeight": 45920,
},
Frame {
"col": 0,
"file": "",
"key": "(anonymous)::0:0",
"line": 0,
"name": "(anonymous)",
"selfWeight": 11575,
"totalWeight": 45920,
},
Frame {
"col": 10,
"file": "",
"key": "a::0:10",
"line": 0,
"name": "a",
"selfWeight": 0,
"totalWeight": 34345,
},
Frame {
"col": 10,
"file": "",
"key": "b::5:10",
"line": 5,
"name": "b",
"selfWeight": 0,
"totalWeight": 16788,
},
Frame {
"col": 10,
"file": "",
"key": "d::13:10",
"line": 13,
"name": "d",
"selfWeight": 34345,
"totalWeight": 34345,
},
Frame {
"col": 10,
"file": "",
"key": "c::9:10",
"line": 9,
"name": "c",
"selfWeight": 0,
"totalWeight": 17557,
},
],
"stacks": Array [
"(root);(anonymous) 11.57ms",
"(root);(anonymous);a;b;d 16.79ms",
"(root);(anonymous);a;c;d 17.56ms",
],
}
`;
exports[`importFromChromeTimeline 1`] = `
Object {
"frames": Array [
Frame {
"col": -1,
"file": "",
"key": "(root)::-1:-1",
"line": -1,
"name": "(root)",
"selfWeight": 0,
"totalWeight": 555107,
},
Frame {
"col": -1,
"file": "",
"key": "(program)::-1:-1",
"line": -1,
"name": "(program)",
"selfWeight": 12244,
"totalWeight": 12244,
},
Frame {
"col": -1,
"file": "",
"key": "(idle)::-1:-1",
"line": -1,
"name": "(idle)",
"selfWeight": 509679,
"totalWeight": 509679,
},
Frame {
"col": 10,
"file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
"key": "a:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:0:10",
"line": 0,
"name": "a",
"selfWeight": 0,
"totalWeight": 33184,
},
Frame {
"col": 10,
"file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
"key": "c:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:13:10",
"line": 13,
"name": "c",
"selfWeight": 16197,
"totalWeight": 16197,
},
Frame {
"col": 10,
"file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
"key": "b:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:7:10",
"line": 7,
"name": "b",
"selfWeight": 16987,
"totalWeight": 16987,
},
],
"stacks": Array [
"(root);(program) 10.16ms",
"(root);(idle) 1.99ms",
"(root);(program) 926.00µs",
"(root);(idle) 85.95ms",
"(root);(program) 133.00µs",
"(root);(idle) 8.40ms",
"(root);(program) 134.00µs",
"(root);a;c 257.00µs",
"(root);a;b 534.00µs",
"(root);a;c 513.00µs",
"(root);a;b 513.00µs",
"(root);a;c 257.00µs",
"(root);a;b 518.00µs",
"(root);a;c 514.00µs",
"(root);a;b 261.00µs",
"(root);a;c 517.00µs",
"(root);a;b 258.00µs",
"(root);a;c 145.00µs",
"(root);a;b 134.00µs",
"(root);a;c 292.00µs",
"(root);a;b 272.00µs",
"(root);a;c 129.00µs",
"(root);a;b 145.00µs",
"(root);a;c 265.00µs",
"(root);a;b 142.00µs",
"(root);a;c 141.00µs",
"(root);a;b 139.00µs",
"(root);a;c 397.00µs",
"(root);a;b 126.00µs",
"(root);a;c 131.00µs",
"(root);a;b 126.00µs",
"(root);a;c 521.00µs",
"(root);a;b 128.00µs",
"(root);a;c 261.00µs",
"(root);a;b 127.00µs",
"(root);a;c 130.00µs",
"(root);a;b 128.00µs",
"(root);a;c 136.00µs",
"(root);a;b 272.00µs",
"(root);a;c 146.00µs",
"(root);a;b 661.00µs",
"(root);a;c 113.00µs",
"(root);a;b 135.00µs",
"(root);a;c 585.00µs",
"(root);a;b 294.00µs",
"(root);a;c 274.00µs",
"(root);a;b 129.00µs",
"(root);a;c 127.00µs",
"(root);a;b 128.00µs",
"(root);a;c 247.00µs",
"(root);a;b 526.00µs",
"(root);a;c 125.00µs",
"(root);a;b 129.00µs",
"(root);a;c 131.00µs",
"(root);a;b 253.00µs",
"(root);a;c 135.00µs",
"(root);a;b 123.00µs",
"(root);a;c 128.00µs",
"(root);a;b 257.00µs",
"(root);a;c 137.00µs",
"(root);a;b 256.00µs",
"(root);a;c 411.00µs",
"(root);a;b 892.00µs",
"(root);a;c 146.00µs",
"(root);a;b 148.00µs",
"(root);a;c 309.00µs",
"(root);a;b 140.00µs",
"(root);a;c 151.00µs",
"(root);a;b 458.00µs",
"(root);a;c 156.00µs",
"(root);a;b 170.00µs",
"(root);a;c 139.00µs",
"(root);a;b 290.00µs",
"(root);a;c 115.00µs",
"(root);a;b 281.00µs",
"(root);a;c 270.00µs",
"(root);a;b 283.00µs",
"(root);a;c 144.00µs",
"(root);a;b 146.00µs",
"(root);a;c 410.00µs",
"(root);a;b 146.00µs",
"(root);a;c 147.00µs",
"(root);a;b 312.00µs",
"(root);a;c 146.00µs",
"(root);a;b 907.00µs",
"(root);a;c 231.00µs",
"(root);a;b 138.00µs",
"(root);a;c 280.00µs",
"(root);a;b 255.00µs",
"(root);a;c 257.00µs",
"(root);a;b 130.00µs",
"(root);a;c 255.00µs",
"(root);a;b 128.00µs",
"(root);a;c 526.00µs",
"(root);a;b 128.00µs",
"(root);a;c 384.00µs",
"(root);a;b 398.00µs",
"(root);a;c 260.00µs",
"(root);a;b 664.00µs",
"(root);a;c 150.00µs",
"(root);a;b 147.00µs",
"(root);a;c 156.00µs",
"(root);a;b 137.00µs",
"(root);a;c 141.00µs",
"(root);a;b 140.00µs",
"(root);a;c 141.00µs",
"(root);a;b 141.00µs",
"(root);a;c 140.00µs",
"(root);a;b 140.00µs",
"(root);a;c 139.00µs",
"(root);a;b 129.00µs",
"(root);a;c 269.00µs",
"(root);a;b 293.00µs",
"(root);a;c 148.00µs",
"(root);a;b 293.00µs",
"(root);a;c 292.00µs",
"(root);a;b 296.00µs",
"(root);a;c 147.00µs",
"(root);a;b 140.00µs",
"(root);a;c 139.00µs",
"(root);a;b 139.00µs",
"(root);a;c 511.00µs",
"(root);a;b 515.00µs",
"(root);a;c 386.00µs",
"(root);a;b 514.00µs",
"(root);a;c 272.00µs",
"(root);a;b 242.00µs",
"(root);a;c 128.00µs",
"(root);a;b 134.00µs",
"(root);a;c 112.00µs",
"(root);a;b 288.00µs",
"(root);a;c 451.00µs",
"(root);a;b 138.00µs",
"(root);a;c 292.00µs",
"(root);a;b 145.00µs",
"(root);a;c 259.00µs",
"(root);a;b 148.00µs",
"(root);a;c 293.00µs",
"(root);a;b 140.00µs",
"(root);a;c 140.00µs",
"(root);(idle) 61.61ms",
"(root);(program) 118.00µs",
"(root);(idle) 134.00µs",
"(root);(program) 128.00µs",
"(root);(idle) 16.40ms",
"(root);(program) 125.00µs",
"(root);(idle) 16.64ms",
"(root);(program) 129.00µs",
"(root);(idle) 16.72ms",
"(root);(program) 130.00µs",
"(root);(idle) 294.15ms",
"(root);(program) 129.00µs",
"(root);(idle) 7.68ms",
"(root);(program) 131.00µs",
],
}
`;

View File

@ -0,0 +1,59 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`importFromFirefox 1`] = `
Object {
"frames": Array [
Frame {
"col": undefined,
"file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
"key": "a (file:///Users/jlfwong/code/speedscope/sample/simple.js:1)",
"line": 1,
"name": "a",
"selfWeight": 0,
"totalWeight": 31.992820999992546,
},
Frame {
"col": undefined,
"file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
"key": "b (file:///Users/jlfwong/code/speedscope/sample/simple.js:8)",
"line": 8,
"name": "b",
"selfWeight": 0,
"totalWeight": 20.971447000018088,
},
Frame {
"col": undefined,
"file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
"key": "d (file:///Users/jlfwong/code/speedscope/sample/simple.js:20)",
"line": 20,
"name": "d",
"selfWeight": 31.992820999992546,
"totalWeight": 31.992820999992546,
},
Frame {
"col": undefined,
"file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
"key": "c (file:///Users/jlfwong/code/speedscope/sample/simple.js:14)",
"line": 14,
"name": "c",
"selfWeight": 0,
"totalWeight": 11.021373999974458,
},
],
"stacks": Array [
"a;b;d 989.53µs",
"a;c;d 1.02ms",
"a;b;d 982.04µs",
"a;c;d 1.02ms",
"a;b;d 7.00ms",
"a;c;d 2.00ms",
"a;b;d 981.44µs",
"a;c;d 2.00ms",
"a;b;d 2.00ms",
"a;c;d 3.02ms",
"a;b;d 4.03ms",
"a;c;d 1.96ms",
"a;b;d 4.99ms",
],
}
`;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,851 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`importFromStackprof 1`] = `
Object {
"frames": Array [
Frame {
"col": undefined,
"file": "simple.rb",
"key": 70098912279220,
"line": undefined,
"name": "<main>",
"selfWeight": 0,
"totalWeight": 1087582,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098928804560,
"line": undefined,
"name": "<main>",
"selfWeight": 0,
"totalWeight": 1087582,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098916424940,
"line": 31,
"name": "block in <main>",
"selfWeight": 0,
"totalWeight": 1087582,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098916485880,
"line": 4,
"name": "Object#a",
"selfWeight": 0,
"totalWeight": 1087582,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098916485860,
"line": 11,
"name": "Object#b",
"selfWeight": 0,
"totalWeight": 540472,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098916485820,
"line": 23,
"name": "Object#d",
"selfWeight": 1087582,
"totalWeight": 1087582,
},
Frame {
"col": undefined,
"file": "",
"key": 313,
"line": undefined,
"name": "(garbage collection)",
"selfWeight": 464022,
"totalWeight": 464022,
},
Frame {
"col": undefined,
"file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb",
"key": 70098916485840,
"line": 17,
"name": "Object#c",
"selfWeight": 0,
"totalWeight": 547110,
},
],
"stacks": Array [
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.11ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.10ms",
"(garbage collection) 919.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms",
"(garbage collection) 955.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.06ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms",
"(garbage collection) 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 892.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.14ms",
"(garbage collection) 1.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.03ms",
"(garbage collection) 995.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms",
"(garbage collection) 899.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 7.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.95ms",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 998.00µs",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.96ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.07ms",
"(garbage collection) 892.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.03ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 969.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs",
"(garbage collection) 986.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 926.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms",
"(garbage collection) 989.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.05ms",
"(garbage collection) 977.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.16ms",
"(garbage collection) 921.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.84ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.03ms",
"(garbage collection) 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.97ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.02ms",
"(garbage collection) 1.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.87ms",
"(garbage collection) 1.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.87ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms",
"(garbage collection) 2.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.82ms",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 946.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.92ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.08ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms",
"(garbage collection) 1.91ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 965.00µs",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.90ms",
"(garbage collection) 1.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.95ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 996.00µs",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.82ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.90ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.01ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 980.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms",
"(garbage collection) 988.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.90ms",
"(garbage collection) 1.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.04ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.85ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 2.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.94ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms",
"(garbage collection) 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms",
"(garbage collection) 4.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.14ms",
"(garbage collection) 1.85ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 989.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms",
"(garbage collection) 962.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.85ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 942.00µs",
"(garbage collection) 1.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms",
"(garbage collection) 4.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.86ms",
"(garbage collection) 997.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.12ms",
"(garbage collection) 985.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.01ms",
"(garbage collection) 996.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.09ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 974.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 998.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 845.00µs",
"(garbage collection) 3.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 803.00µs",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 959.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.90ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms",
"(garbage collection) 3.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 970.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms",
"(garbage collection) 2.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.96ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 903.00µs",
"(garbage collection) 4.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms",
"(garbage collection) 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 979.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.87ms",
"(garbage collection) 2.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 930.00µs",
"(garbage collection) 2.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.98ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms",
"(garbage collection) 943.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 871.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.11ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 987.00µs",
"(garbage collection) 898.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"(garbage collection) 968.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.14ms",
"(garbage collection) 879.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 934.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.05ms",
"(garbage collection) 4.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms",
"(garbage collection) 998.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.13ms",
"(garbage collection) 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 909.00µs",
"(garbage collection) 996.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms",
"(garbage collection) 4.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 997.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.00ms",
"(garbage collection) 995.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 986.00µs",
"(garbage collection) 944.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 972.00µs",
"(garbage collection) 3.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 964.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms",
"(garbage collection) 1.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.89ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.04ms",
"(garbage collection) 4.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 898.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.09ms",
"(garbage collection) 4.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.85ms",
"(garbage collection) 4.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 901.00µs",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.92ms",
"(garbage collection) 3.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.86ms",
"(garbage collection) 2.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 938.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.05ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 981.00µs",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.00ms",
"(garbage collection) 981.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.92ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 974.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms",
"(garbage collection) 2.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.93ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms",
"(garbage collection) 3.97ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.04ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms",
"(garbage collection) 910.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.07ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 978.00µs",
"(garbage collection) 2.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.91ms",
"(garbage collection) 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.98ms",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.89ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.84ms",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.97ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.04ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.93ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.97ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.94ms",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.97ms",
"(garbage collection) 888.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.10ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 981.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 939.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.06ms",
"(garbage collection) 2.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.91ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs",
"(garbage collection) 936.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.07ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 895.00µs",
"(garbage collection) 2.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 713.00µs",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 899.00µs",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.87ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.09ms",
"(garbage collection) 3.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 847.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.05ms",
"(garbage collection) 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.97ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 986.00µs",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.05ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 936.00µs",
"(garbage collection) 1.28ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 780.00µs",
"(garbage collection) 4.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 947.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms",
"(garbage collection) 983.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.88ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.94ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms",
"(garbage collection) 1.67ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.27ms",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.82ms",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.93ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.89ms",
"(garbage collection) 1.14ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms",
"(garbage collection) 951.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.04ms",
"(garbage collection) 1.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 836.00µs",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 996.00µs",
"(garbage collection) 908.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.10ms",
"(garbage collection) 883.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 898.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.10ms",
"(garbage collection) 969.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms",
"(garbage collection) 913.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.37ms",
"(garbage collection) 681.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.93ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 904.00µs",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.18ms",
"(garbage collection) 899.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.82ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.00ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 963.00µs",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs",
"(garbage collection) 956.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.05ms",
"(garbage collection) 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.98ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms",
"(garbage collection) 1.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 774.00µs",
"(garbage collection) 1.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 966.00µs",
"(garbage collection) 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 803.00µs",
"(garbage collection) 1.15ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 969.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 992.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 977.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 885.00µs",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 918.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 968.00µs",
"(garbage collection) 997.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms",
"(garbage collection) 5.92ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.99ms",
"(garbage collection) 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 987.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 987.00µs",
"(garbage collection) 980.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms",
"(garbage collection) 984.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 977.00µs",
"(garbage collection) 997.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.02ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 995.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.10ms",
"(garbage collection) 999.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.01ms",
"(garbage collection) 937.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.97ms",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 861.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.11ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms",
"(garbage collection) 1.97ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.03ms",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.87ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 942.00µs",
"(garbage collection) 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.99ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 986.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms",
"(garbage collection) 2.07ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.91ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 7.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.00ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms",
"(garbage collection) 1.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 949.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 992.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms",
"(garbage collection) 955.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.07ms",
"(garbage collection) 1.19ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 769.00µs",
"(garbage collection) 3.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.92ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 999.00µs",
"(garbage collection) 2.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.93ms",
"(garbage collection) 3.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 954.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.02ms",
"(garbage collection) 995.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 971.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 901.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.04ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 881.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.12ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.97ms",
"(garbage collection) 997.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 954.00µs",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 907.00µs",
"(garbage collection) 834.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.09ms",
"(garbage collection) 2.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 993.00µs",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.89ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms",
"(garbage collection) 923.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.10ms",
"(garbage collection) 977.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.00ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.97ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms",
"(garbage collection) 903.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.11ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms",
"(garbage collection) 943.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.06ms",
"(garbage collection) 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 982.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 948.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.04ms",
"(garbage collection) 1.92ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs",
"(garbage collection) 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 993.00µs",
"(garbage collection) 922.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.09ms",
"(garbage collection) 1.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 854.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms",
"(garbage collection) 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms",
"(garbage collection) 1.17ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.82ms",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 922.00µs",
"(garbage collection) 1.26ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 683.00µs",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 989.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.00ms",
"(garbage collection) 996.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.91ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.13ms",
"(garbage collection) 2.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.88ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms",
"(garbage collection) 1.07ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.80ms",
"(garbage collection) 1.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.04ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 973.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.97ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs",
"(garbage collection) 980.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.00ms",
"(garbage collection) 1.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.89ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms",
"(garbage collection) 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 872.00µs",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 982.00µs",
"(garbage collection) 966.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms",
"(garbage collection) 1.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.90ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.03ms",
"(garbage collection) 2.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs",
"(garbage collection) 994.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.04ms",
"(garbage collection) 1.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.01ms",
"(garbage collection) 968.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.92ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.89ms",
"(garbage collection) 962.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.04ms",
"(garbage collection) 2.97ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.94ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.05ms",
"(garbage collection) 956.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 982.00µs",
"(garbage collection) 1.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.01ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 956.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.98ms",
"(garbage collection) 1.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms",
"(garbage collection) 1.28ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.65ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 925.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.04ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 950.00µs",
"(garbage collection) 1.07ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.97ms",
"(garbage collection) 933.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.07ms",
"(garbage collection) 990.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms",
"(garbage collection) 998.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 929.00µs",
"(garbage collection) 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.91ms",
"(garbage collection) 1.16ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.91ms",
"(garbage collection) 1.18ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 766.00µs",
"(garbage collection) 1.06ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.91ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 969.00µs",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 882.00µs",
"(garbage collection) 1.13ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms",
"(garbage collection) 2.48ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 510.00µs",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.96ms",
"(garbage collection) 3.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms",
"(garbage collection) 1.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.02ms",
"(garbage collection) 3.00ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.90ms",
"(garbage collection) 1.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.98ms",
"(garbage collection) 1.07ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.92ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 970.00µs",
"(garbage collection) 1.05ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 981.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 975.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"(garbage collection) 991.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 990.00µs",
"(garbage collection) 2.03ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 902.00µs",
"(garbage collection) 1.95ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.12ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.89ms",
"(garbage collection) 2.10ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 967.00µs",
"(garbage collection) 2.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.84ms",
"(garbage collection) 1.09ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms",
"(garbage collection) 2.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms",
"(garbage collection) 2.11ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.88ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.07ms",
"(garbage collection) 974.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.04ms",
"(garbage collection) 2.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 974.00µs",
"(garbage collection) 925.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms",
"(garbage collection) 994.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.87ms",
"(garbage collection) 1.16ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.96ms",
"(garbage collection) 1.02ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms",
"(garbage collection) 1.01ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs",
"(garbage collection) 932.00µs",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.06ms",
"(garbage collection) 1.04ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms",
"(garbage collection) 1.08ms",
"<main>;<main>;block in <main>;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms",
],
}
`;

View File

@ -0,0 +1,9 @@
import * as fs from 'fs'
import {importFromBGFlameGraph} from './bg-flamegraph'
import {dumpProfile} from '../test-utils'
test('importFromBGFlameGraph', () => {
const input = fs.readFileSync('./sample/profiles/stackcollapse/simple.txt', 'utf8')
const profile = importFromBGFlameGraph(input)
expect(dumpProfile(profile)).toMatchSnapshot()
})

15
import/chrome.test.ts Normal file
View File

@ -0,0 +1,15 @@
import * as fs from 'fs'
import {dumpProfile} from '../test-utils'
import {importFromChromeCPUProfile, importFromChromeTimeline} from './chrome'
test('importFromChromeCPUProfile', () => {
const input = fs.readFileSync('./sample/profiles/Chrome/65/simple.cpuprofile', 'utf8')
const profile = importFromChromeCPUProfile(JSON.parse(input))
expect(dumpProfile(profile)).toMatchSnapshot()
})
test('importFromChromeTimeline', () => {
const input = fs.readFileSync('./sample/profiles/Chrome/65/simple-timeline.json', 'utf8')
const profile = importFromChromeTimeline(JSON.parse(input))
expect(dumpProfile(profile)).toMatchSnapshot()
})

9
import/firefox.test.ts Normal file
View File

@ -0,0 +1,9 @@
import * as fs from 'fs'
import {dumpProfile} from '../test-utils'
import {importFromFirefox} from './firefox'
test('importFromFirefox', () => {
const input = fs.readFileSync('./sample/profiles/Firefox/59/simple-firefox.json', 'utf8')
const profile = importFromFirefox(JSON.parse(input))
expect(dumpProfile(profile)).toMatchSnapshot()
})

109
import/instruments.test.ts Normal file
View File

@ -0,0 +1,109 @@
import * as fs from 'fs'
import * as path from 'path'
import {dumpProfile} from '../test-utils'
import {
importFromInstrumentsDeepCopy,
FileSystemEntry,
importFromInstrumentsTrace,
} from './instruments'
import * as JSZip from 'jszip'
describe('importFromInstrumentsDeepCopy', () => {
test('time profile', () => {
const input = fs.readFileSync(
'./sample/profiles/Instruments/7.3.1/simple-time-profile-deep-copy.txt',
'utf8',
)
const profile = importFromInstrumentsDeepCopy(input)
expect(dumpProfile(profile)).toMatchSnapshot()
})
test('allocations profile', () => {
const input = fs.readFileSync(
'./sample/profiles/Instruments/7.3.1/random-allocations-deep-copy.txt',
'utf8',
)
const profile = importFromInstrumentsDeepCopy(input)
expect(dumpProfile(profile)).toMatchSnapshot()
})
})
class ZipBackedFileSystemEntry implements FileSystemEntry {
readonly isFile: boolean
readonly isDirectory: boolean
readonly name: string
readonly fullPath: string
private zipDir: JSZip | null
private zipFile: JSZip.JSZipObject | null
constructor(private zip: JSZip, fullPath: string) {
this.fullPath = fullPath
this.zipFile = zip.file(fullPath)
this.isFile = !!this.zipFile
if (this.isFile) {
this.zipDir = null
this.isDirectory = false
} else {
this.zipDir = zip.folder(fullPath)
this.isDirectory = true
}
this.name = path.basename(this.fullPath)
}
file(cb: (file: File) => void, errCb: (error: Error) => void) {
if (!this.zipFile) return errCb(new Error('Failed to extract file'))
this.zipFile
.async('blob')
.then(
blob => {
;(blob as any).name = this.name
cb(blob as File)
},
err => {
errCb(err)
},
)
.catch(errCb)
}
createReader() {
return {
readEntries: (cb: (entries: FileSystemEntry[]) => void, errCb: (error: Error) => void) => {
if (!this.zipDir) return errCb(new Error('Failed to read folder entries'))
const ret: FileSystemEntry[] = []
this.zipDir.forEach((relativePath, file) => {
if (relativePath.split('/').length === (relativePath.endsWith('/') ? 2 : 1)) {
ret.push(new ZipBackedFileSystemEntry(this.zip, file.name))
}
})
cb(ret)
},
}
}
}
describe('importFromInstrumentsTrace', () => {
async function importFromTrace(tracePath: string) {
const zip = await new Promise<JSZip>((resolve, reject) => {
fs.readFile(tracePath, (err, data) => {
if (err) return reject(err)
JSZip.loadAsync(data).then(resolve)
})
})
const root = new ZipBackedFileSystemEntry(zip, 'simple-time-profile.trace')
const profile = await importFromInstrumentsTrace(root)
expect(dumpProfile(profile)).toMatchSnapshot()
}
test('Instruments 8.3.3', async () => {
await importFromTrace('./sample/profiles/Instruments/8.3.3/simple-time-profile.trace.zip')
})
test('Instruments 9.3.1', async () => {
await importFromTrace('./sample/profiles/Instruments/9.3.1/simple-time-profile.trace.zip')
})
})

View File

@ -65,9 +65,9 @@ function getWeight(deepCopyRow: any): number {
throw new Error(`Unrecognized units ${units}`)
}
if ('Weight' in deepCopyRow) {
const weightString = deepCopyRow['Weight']
const parts = /\s*(\d+(?:[.]\d+)?) (\w+)\s+(?:\d+(?:[.]\d+))%/.exec(weightString)
if ('Weight' in deepCopyRow || 'Running Time' in deepCopyRow) {
const weightString = deepCopyRow['Weight'] || deepCopyRow['Running Time']
const parts = /\s*(\d+(?:[.]\d+)?) ?(\w+)\s+(?:\d+(?:[.]\d+))%/.exec(weightString)
if (!parts) return 0
const value = parseInt(parts[1], 10)
const units = parts[2]
@ -135,7 +135,7 @@ export function importFromInstrumentsDeepCopy(contents: string): Profile {
if ('Bytes Used' in rows[0]) {
profile.setValueFormatter(new ByteFormatter())
} else if ('Weight' in rows[0]) {
} else if ('Weight' in rows[0] || 'Running Time' in rows[0]) {
profile.setValueFormatter(new TimeFormatter('milliseconds'))
}
@ -148,25 +148,45 @@ interface TraceDirectoryTree {
subdirectories: Map<string, TraceDirectoryTree>
}
async function extractDirectoryTree(entry: WebKitEntry): Promise<TraceDirectoryTree> {
// The bits of this API that we care about. This is implemented by WebKitEntry
// https://wicg.github.io/entries-api/#api-entry
export interface FileSystemDirectoryReader {
readEntries(cb: (entries: FileSystemEntry[]) => void, error: (err: Error) => void): void
}
export interface FileSystemEntry {
readonly isFile: boolean
readonly isDirectory: boolean
readonly name: string
readonly fullPath: string
}
export interface FileSystemDirectoryEntry extends FileSystemEntry {
createReader(): FileSystemDirectoryReader
}
export interface FileSystemFileEntry extends FileSystemEntry {
file(cb: (file: File) => void, errCb: (err: Error) => void): void
}
async function extractDirectoryTree(entry: FileSystemDirectoryEntry): Promise<TraceDirectoryTree> {
const node: TraceDirectoryTree = {
name: entry.name,
files: new Map(),
subdirectories: new Map(),
}
const children = await new Promise<WebKitEntry[]>((resolve, reject) => {
;(entry as any).createReader().readEntries((entries: any[]) => {
const children = await new Promise<FileSystemEntry[]>((resolve, reject) => {
entry.createReader().readEntries((entries: any[]) => {
resolve(entries)
})
}, reject)
})
for (let child of children) {
if (child.isDirectory) {
const subtree = await extractDirectoryTree(child)
const subtree = await extractDirectoryTree(child as FileSystemDirectoryEntry)
node.subdirectories.set(subtree.name, subtree)
} else {
const file = await new Promise<File>(resolve => (child as any).file(resolve))
const file = await new Promise<File>((resolve, reject) => {
;(child as FileSystemFileEntry).file(resolve, reject)
})
node.files.set(file.name, file)
}
}
@ -416,7 +436,9 @@ async function readFormTemplate(tree: TraceDirectoryTree): Promise<FormTemplateD
}
// Import from a .trace file saved from Mac Instruments.app
export async function importFromInstrumentsTrace(entry: WebKitEntry): Promise<Profile> {
export async function importFromInstrumentsTrace(
entry: FileSystemDirectoryEntry,
): Promise<Profile> {
const tree = await extractDirectoryTree(entry)
const {version, selectedRun, instrument, addressToFrameMap} = await readFormTemplate(tree)

9
import/stackprof.test.ts Normal file
View File

@ -0,0 +1,9 @@
import * as fs from 'fs'
import {dumpProfile} from '../test-utils'
import {importFromStackprof} from './stackprof'
test('importFromStackprof', () => {
const input = fs.readFileSync('./sample/profiles/stackprof/simple-stackprof.json', 'utf8')
const profile = importFromStackprof(JSON.parse(input))
expect(dumpProfile(profile)).toMatchSnapshot()
})

83
package-lock.json generated
View File

@ -30,6 +30,21 @@
"integrity": "sha512-e74sM9W/4qqWB6D4TWV9FQk0WoHtX1X4FJpbjxucMSVJHtFjbQOH3H6yp+xno4br0AKG0wz/kPtaN599GUOvAg==",
"dev": true
},
"@types/jszip": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.1.4.tgz",
"integrity": "sha512-UaVbz4buRlBEolZYrxqkrGDOypugYlbqGNrUFB4qBaexrLypTH0jyvaF5jolNy5D+5C4kKV1WJ3Yx9cn/JH8oA==",
"dev": true,
"requires": {
"@types/node": "10.1.4"
}
},
"@types/node": {
"version": "10.1.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.4.tgz",
"integrity": "sha512-GpQxofkdlHYxjHad98UUdNoMO7JrmzQZoAaghtNg14Gwg7YkohcrCoJEcEMSgllx4VIZ+mYw7ZHjfaeIagP/rg==",
"dev": true
},
"@types/pako": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz",
@ -2427,6 +2442,12 @@
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
"core-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
"integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@ -3156,6 +3177,12 @@
"is-symbol": "1.0.1"
}
},
"es6-promise": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
"dev": true
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@ -5313,6 +5340,12 @@
"integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
"dev": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"dev": true
},
"import-local": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
@ -6428,6 +6461,47 @@
"typify-parser": "1.1.0"
}
},
"jszip": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
"integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
"dev": true,
"requires": {
"core-js": "2.3.0",
"es6-promise": "3.0.2",
"lie": "3.1.1",
"pako": "1.0.6",
"readable-stream": "2.0.6"
},
"dependencies": {
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
"dev": true
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@ -6487,6 +6561,15 @@
"type-check": "0.3.2"
}
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"dev": true,
"requires": {
"immediate": "3.0.6"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",

View File

@ -12,11 +12,16 @@
"test": "tsc --noEmit && npm run lint && npm run coverage",
"serve": "parcel index.html --open --no-autoinstall"
},
"browserslist": ["last 2 Chrome versions", "last 2 Firefox versions"],
"browserslist": [
"last 2 Chrome versions",
"last 2 Firefox versions"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/jest": "^22.2.3",
"@types/jszip": "^3.1.4",
"@types/node": "^10.1.4",
"@types/pako": "1.0.0",
"aphrodite": "2.1.0",
"coveralls": "^3.0.1",
@ -24,6 +29,7 @@
"eslint-plugin-prettier": "^2.6.0",
"jest": "^23.0.1",
"jsverify": "^0.8.3",
"jszip": "^3.1.5",
"pako": "1.0.6",
"parcel-bundler": "1.7.0",
"preact": "8.2.7",
@ -39,7 +45,16 @@
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "\\.test\\.tsx?$",
"collectCoverageFrom": ["*.{ts,tsx}", "!*.d.{ts,tsx}"],
"moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json"]
"collectCoverageFrom": [
"**/*.{ts,tsx}",
"!**/*.d.{ts,tsx}"
],
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json"
]
}
}

View File

@ -3,7 +3,7 @@ import {ValueFormatter, RawValueFormatter} from './value-formatters'
const demangleCppModule = import('./demangle-cpp')
// Force eager loading of the module
demangleCppModule.then(() => console.log('CPP demangler loaded'))
demangleCppModule.then(() => {})
export interface FrameInfo {
key: string | number

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
Bytes Used Count Symbol Name
429.93 MB 100.0% 84671 start
429.93 MB 100.0% 84671 main
217.09 MB 50.4% 42749 delta()
73.35 MB 17.0% 14337 alpha()
73.35 MB 17.0% 14337 leakMemory()
73.35 MB 17.0% 14337 malloc
73.35 MB 17.0% 14337 malloc_zone_malloc
72.36 MB 16.8% 14316 beta()
72.36 MB 16.8% 14316 leakMemory()
72.36 MB 16.8% 14316 malloc
72.36 MB 16.8% 14316 malloc_zone_malloc
71.38 MB 16.6% 14096 leakMemory()
71.38 MB 16.6% 14096 malloc
71.38 MB 16.6% 14096 malloc_zone_malloc
71.79 MB 16.6% 14078 alpha()
71.79 MB 16.6% 14078 leakMemory()
71.79 MB 16.6% 14078 malloc
71.79 MB 16.6% 14078 malloc_zone_malloc
71.31 MB 16.5% 14078 gamma()
71.31 MB 16.5% 14078 leakMemory()
71.31 MB 16.5% 14078 malloc
71.31 MB 16.5% 14078 malloc_zone_malloc
69.74 MB 16.2% 13766 beta()
69.74 MB 16.2% 13766 leakMemory()
69.74 MB 16.2% 13766 malloc
69.74 MB 16.2% 13766 malloc_zone_malloc

View File

@ -0,0 +1,61 @@
Running Time Self (ms) Symbol Name
4273.0ms 99.9% 0 start
4273.0ms 99.9% 0 main
2126.0ms 49.7% 693 delta()
713.0ms 16.6% 696 alpha()
17.0ms 0.3% 1 leakMemory()
16.0ms 0.3% 1 malloc
15.0ms 0.3% 1 malloc_zone_malloc
7.0ms 0.1% 2 szone_malloc_should_clear
4.0ms 0.0% 4 small_malloc_from_free_list
1.0ms 0.0% 0 allocate_pages_securely
1.0ms 0.0% 0 mach_vm_map
1.0ms 0.0% 1 _kernelrpc_mach_vm_map_trap
5.0ms 0.1% 5 _os_lock_spin_lock
2.0ms 0.0% 2 os_lock_lock
711.0ms 16.6% 702 beta()
9.0ms 0.2% 0 leakMemory()
9.0ms 0.2% 0 malloc
9.0ms 0.2% 0 malloc_zone_malloc
7.0ms 0.1% 6 szone_malloc_should_clear
1.0ms 0.0% 1 small_malloc_from_free_list
2.0ms 0.0% 2 _os_lock_spin_lock
9.0ms 0.2% 0 leakMemory()
9.0ms 0.2% 0 malloc
8.0ms 0.1% 0 malloc_zone_malloc
5.0ms 0.1% 4 szone_malloc_should_clear
1.0ms 0.0% 1 small_malloc_from_free_list
2.0ms 0.0% 2 _os_lock_spin_lock
1.0ms 0.0% 1 os_lock_lock
1.0ms 0.0% 0 <Unknown Address>
1.0ms 0.0% 1 szone_malloc
725.0ms 16.9% 715 alpha()
10.0ms 0.2% 0 leakMemory()
10.0ms 0.2% 1 malloc
9.0ms 0.2% 1 malloc_zone_malloc
6.0ms 0.1% 2 szone_malloc_should_clear
4.0ms 0.0% 4 small_malloc_from_free_list
2.0ms 0.0% 2 _os_lock_spin_lock
716.0ms 16.7% 704 beta()
12.0ms 0.2% 0 leakMemory()
12.0ms 0.2% 1 malloc
11.0ms 0.2% 0 malloc_zone_malloc
9.0ms 0.2% 5 szone_malloc_should_clear
3.0ms 0.0% 3 small_malloc_from_free_list
1.0ms 0.0% 0 allocate_pages_securely
1.0ms 0.0% 0 mach_vm_map
1.0ms 0.0% 1 _kernelrpc_mach_vm_map_trap
1.0ms 0.0% 1 _os_lock_spin_lock
1.0ms 0.0% 1 DYLD-STUB$$os_lock_unlock
706.0ms 16.5% 696 gamma()
10.0ms 0.2% 0 leakMemory()
10.0ms 0.2% 0 malloc
10.0ms 0.2% 1 malloc_zone_malloc
5.0ms 0.1% 2 szone_malloc_should_clear
3.0ms 0.0% 3 small_malloc_from_free_list
2.0ms 0.0% 2 _os_lock_spin_lock
1.0ms 0.0% 1 os_lock_unlock
1.0ms 0.0% 0 <Unknown Address>
1.0ms 0.0% 1 small_malloc_from_free_list

File diff suppressed because one or more lines are too long

View File

@ -30,3 +30,5 @@ a()
setTimeout(() => {
console.profileEnd('a')
}, 0)
window.addEventListener('click', a)

View File

@ -0,0 +1,35 @@
require 'json'
require 'stackprof'
def a
for i in 0..100 do
b
c
end
end
def b
for i in 0..10
d
end
end
def c
for i in 0..10
d
end
end
def d
prod = 1
for i in 1..1000
prod *= i
end
prod
end
profile = StackProf.run(mode: :wall, raw: true) do
a
end
puts JSON.generate(profile)

41
test-utils.ts Normal file
View File

@ -0,0 +1,41 @@
import {Profile, CallTreeNode, Frame} from './profile'
interface DumpedProfile {
stacks: string[]
frames: Frame[]
}
export function dumpProfile(profile: Profile): any {
const dump: DumpedProfile = {
stacks: [],
frames: [],
}
profile.forEachFrame(f => dump.frames.push(f))
let lastValue = 0
const curStack: (number | string)[] = []
function maybeEmit(value: number) {
if (lastValue != value) {
dump.stacks.push(
curStack.map(k => `${k}`).join(';') + ` ${profile.formatValue(value - lastValue)}`,
)
lastValue = value
}
}
function openFrame(node: CallTreeNode, value: number) {
maybeEmit(value)
curStack.push(node.frame.name)
}
function closeFrame(value: number) {
maybeEmit(value)
curStack.pop()
}
profile.forEachCall(openFrame, closeFrame)
return dump
}