Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03578ea7a4 | ||
|
|
3210f8fc08 | ||
|
|
2c89cefcdc | ||
|
|
853164ebbf | ||
|
|
729d7c771b | ||
|
|
9d13d95f8d |
+11
-2
@@ -1,10 +1,19 @@
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
## [0.7.1] - 2018-08-20
|
||||
|
||||
### Fixed
|
||||
|
||||
## [0.6.0]
|
||||
* Removed dependency on regl in order to allow speedscope to run in strict content-security-policy environments [#140]
|
||||
* Fixed text culling bug [#143]
|
||||
|
||||
## [0.7.0] - 2018-08-16
|
||||
|
||||
### Added
|
||||
|
||||
* Added support to import from linux `perf script` [#135]
|
||||
|
||||
## [0.6.0] - 2018-08-14
|
||||
|
||||
### Added
|
||||
|
||||
|
||||
@@ -50,6 +50,12 @@ If everything looks good, proceed to "Prepare the release".
|
||||
Assuming everything went well in the previous two phases, publishing should just be
|
||||
a matter of running `npm publish`.
|
||||
|
||||
### Verifying the publish
|
||||
|
||||
To verify that the publish was successful, run `npm install -g speedscope`.
|
||||
Try `speedscope`, which should open speedscope in browser.
|
||||
Try `speedscope sample/profiles/stackcollapse/simple.txt`, which should immediately load the profile
|
||||
|
||||
## Deploying the website
|
||||
|
||||
https://www.speedscope.app/ is hosted on GitHub pages, and is published via pushing
|
||||
|
||||
@@ -57,9 +57,22 @@ into the browser from Chrome.
|
||||
|
||||
If the `raw: true` flag is set when recording a dump, the resulting json dump can be imported into speedscope.
|
||||
|
||||
### `perf` and `DTrace`
|
||||
### Linux `perf`
|
||||
|
||||
If you process the output of `perf` or `DTrace` first with Brendan Gregg's `stackcollapse-*.pl` scripts (https://github.com/brendangregg/FlameGraph#2-fold-stacks), the result can be imported into speedscope.
|
||||
You can import profiles recorded using `perf record` and formatted using `perf script`.
|
||||
|
||||
perf record -a -F 999 -g -p PID > perf.data
|
||||
perf script -i perf.data > profile.linux-perf.txt
|
||||
|
||||
Then drop the resulting `perf.txt` into speedscope, or if you have speedscope installed
|
||||
locally, you can run:
|
||||
|
||||
perf record -a -F 999 -g -p PID > perf.data
|
||||
perf script -i perf.data | speedscope -
|
||||
|
||||
### `DTrace`
|
||||
|
||||
If you process the output of `DTrace` first with Brendan Gregg's `stackcollapse-*.pl` scripts (https://github.com/brendangregg/FlameGraph#2-fold-stacks), the result can be imported into speedscope.
|
||||
|
||||
## Importing via URL
|
||||
|
||||
|
||||
Generated
+1
-7
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "speedscope",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -11115,12 +11115,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"regl": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/regl/-/regl-1.3.1.tgz",
|
||||
"integrity": "sha1-KZXmOnmExSDvLaD28QJ/cFEzgUA=",
|
||||
"dev": true
|
||||
},
|
||||
"remove-trailing-separator": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
|
||||
|
||||
+2
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "speedscope",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.1",
|
||||
"description": "",
|
||||
"repository": "jlfwong/speedscope",
|
||||
"main": "index.js",
|
||||
@@ -12,7 +12,7 @@
|
||||
"prepack": "./scripts/build-release.sh",
|
||||
"prettier": "prettier --write 'src/**/*.ts' 'src/**/*.tsx'",
|
||||
"lint": "eslint 'src/**/*.ts' 'src/**/*.tsx'",
|
||||
"jest": "./scripts/test-setup.sh && jest",
|
||||
"jest": "./scripts/test-setup.sh && jest --runInBand",
|
||||
"coverage": "npm run jest -- --coverage && coveralls < coverage/lcov.info",
|
||||
"test": "tsc --noEmit && npm run lint && npm run coverage",
|
||||
"serve": "parcel assets/index.html --open --no-autoinstall"
|
||||
@@ -40,7 +40,6 @@
|
||||
"prettier": "1.12.0",
|
||||
"quicktype": "15.0.45",
|
||||
"redux": "^4.0.0",
|
||||
"regl": "1.3.1",
|
||||
"ts-jest": "22.4.6",
|
||||
"typescript": "2.8.1",
|
||||
"typescript-eslint-parser": "17.0.1",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
simple-terminat 10 198792.736893: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
@@ -0,0 +1,881 @@
|
||||
# ========
|
||||
# captured on: Wed Aug 15 16:01:24 2018
|
||||
# hostname : e2b5bab9a538
|
||||
# os release : 4.9.93-linuxkit-aufs
|
||||
# perf version : 4.15.18
|
||||
# arch : x86_64
|
||||
# nrcpus online : 4
|
||||
# nrcpus avail : 4
|
||||
# cpudesc : Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
|
||||
# cpuid : GenuineIntel,6,70,1
|
||||
# total memory : 2046644 kB
|
||||
# cmdline : /usr/lib/linux-tools-4.15.0-30/perf record -F 999 -g ./simple-terminates
|
||||
# event : name = cpu-clock, , type = 1, size = 112, { sample_period, sample_freq } = 999, sample_type = IP|TID|TIME|CALLCHAIN|PERIOD, disabled = 1, inherit = 1, mmap = 1, comm = 1, freq = 1, enable_on_exec = 1, task = 1, sample_id_all = 1, exclude_guest = 1, mmap2 = 1, comm_exec = 1
|
||||
# CPU_TOPOLOGY info available, use -I to display
|
||||
# pmu mappings: breakpoint = 5, power = 7, software = 1, tracepoint = 2, msr = 6
|
||||
# CACHE info available, use -I to display
|
||||
# missing features: TRACING_DATA NUMA_TOPOLOGY BRANCH_STACK GROUP_DESC AUXTRACE STAT
|
||||
# ========
|
||||
#
|
||||
simple-terminat 9 198789.478194: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.479183: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.480175: 1001001 cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.481194: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.482189: 1001001 cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.482989: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.484239: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.485180: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.486198: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.487190: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.488202: 1001001 cpu-clock:
|
||||
6aa _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.489329: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.490298: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.491297: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.492295: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.493164: 1001001 cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.494212: 1001001 cpu-clock:
|
||||
685 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.495431: 1001001 cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.496316: 1001001 cpu-clock:
|
||||
655 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.497329: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.498322: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.499325: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.500327: 1001001 cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.501320: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.502265: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.503165: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.504336: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.505331: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.506328: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.507324: 1001001 cpu-clock:
|
||||
670 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.508328: 1001001 cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.509334: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.510272: 1001001 cpu-clock:
|
||||
67c _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.511373: 1001001 cpu-clock:
|
||||
64c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.512319: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.513188: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.514391: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.515336: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.516359: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.517344: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.518263: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.519381: 1001001 cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.520359: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.521293: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.522326: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.523217: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.524395: 1001001 cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.525355: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.526189: 1001001 cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.527412: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.528331: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.529367: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.530368: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.531369: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.532360: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.533218: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.534427: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.535372: 1001001 cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.536386: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.537337: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.538397: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.539383: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.540390: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.541389: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.542400: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.543268: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.544277: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.545289: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.546425: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.547283: 1001001 cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.548516: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.549479: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.550495: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.551493: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.552486: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.553398: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.554516: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.555493: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.556494: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.557354: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.558422: 1001001 cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.559521: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.560351: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.561388: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.562544: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.563411: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.564311: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.565551: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.566493: 1001001 cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.567486: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.568508: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.569498: 1001001 cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.570501: 1001001 cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.571502: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.572502: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.573415: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.574532: 1001001 cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.575498: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.576507: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.577513: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.578510: 1001001 cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.579516: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.580509: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.581511: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.582519: 1001001 cpu-clock:
|
||||
655 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.583440: 1001001 cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.584538: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.585513: 1001001 cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.586522: 1001001 cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.587526: 1001001 cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.588513: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.589523: 1001001 cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.590520: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.591524: 1001001 cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.592527: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.593438: 1001001 cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.594550: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.595513: 1001001 cpu-clock:
|
||||
6bc _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.596531: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.597523: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.598527: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.599528: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.600528: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.601529: 1001001 cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.602525: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.603449: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.604547: 1001001 cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.605522: 1001001 cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.606529: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.607410: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.608466: 1001001 cpu-clock:
|
||||
618 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.609472: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.610646: 1001001 cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.611607: 1001001 cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.612623: 1001001 cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9 198789.613576: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
@@ -0,0 +1,877 @@
|
||||
simple-terminat 9/9 198791.127353: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.128290: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.129324: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.130316: cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.131320: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.132319: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.133315: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.134322: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.135321: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.136320: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.137351: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.138306: cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.139325: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.140311: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.141325: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.142313: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.143342: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.144354: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.145382: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.146345: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.147357: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.148361: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.149342: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.150356: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.151341: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.152346: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.153346: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.154346: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.155347: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.156347: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.157355: cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.158347: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.159352: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.160373: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.161353: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.162359: cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.163363: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.164353: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.165365: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.166367: cpu-clock:
|
||||
6b3 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.167368: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.168370: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.169356: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.170362: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.171331: cpu-clock:
|
||||
680 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.172382: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.173360: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.174372: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.175463: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.176511: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.177286: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.178500: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.179495: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.180496: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.181506: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.182430: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.183529: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.184491: cpu-clock:
|
||||
6bc _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.185341: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.186539: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.187500: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.188512: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.189509: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.190317: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.191545: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.192298: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.193537: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.194522: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.195336: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.196578: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.197454: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.198536: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.199525: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.200521: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.201544: cpu-clock:
|
||||
655 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.202435: cpu-clock:
|
||||
6aa _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.203550: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.204529: cpu-clock:
|
||||
677 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.205532: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.206533: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.207533: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.208532: cpu-clock:
|
||||
679 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.209542: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.210538: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.211536: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.212400: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.213571: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.214532: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.215548: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.216391: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.217575: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.218511: cpu-clock:
|
||||
6bf _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.219538: cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.220531: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.221401: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.222426: cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.223566: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.224531: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.225462: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.226563: cpu-clock:
|
||||
64e _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.227376: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.228586: cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.229367: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.230467: cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.231584: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.232398: cpu-clock:
|
||||
6aa _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.233591: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.234477: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.235641: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.236770: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.237747: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.238743: cpu-clock:
|
||||
682 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.239739: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.240744: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.241743: cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.242591: cpu-clock:
|
||||
63c _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.243804: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.244620: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.245775: cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.246736: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.247757: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.248761: cpu-clock:
|
||||
645 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.249760: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.250751: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.251765: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.252616: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.253805: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.254754: cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
6ee main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.255617: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.256794: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.257759: cpu-clock:
|
||||
61e _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.258769: cpu-clock:
|
||||
670 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.259766: cpu-clock:
|
||||
613 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.260771: cpu-clock:
|
||||
6b1 _Z5gammav (/workdir/simple-terminates)
|
||||
6f8 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.261751: cpu-clock:
|
||||
60c _Z5alphav (/workdir/simple-terminates)
|
||||
690 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.262617: cpu-clock:
|
||||
615 _Z5alphav (/workdir/simple-terminates)
|
||||
6e9 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
|
||||
simple-terminat 9/9 198791.263815: cpu-clock:
|
||||
ffffffffad1ee8b5 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1ee98a [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1f1ca9 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1aab1d [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1c4c94 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1c5ab1 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad1ccc4a [unknown] ([kernel.kallsyms])
|
||||
ffffffffad0dc851 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad0e27a4 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad0e2d50 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad0e2dc1 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad0033c0 [unknown] ([kernel.kallsyms])
|
||||
ffffffffad7fa08e [unknown] ([kernel.kallsyms])
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
simple-terminat 10 198792.736893: 1001001 cpu-clock:
|
||||
643 _Z4betav (/workdir/simple-terminates)
|
||||
695 _Z5deltav (/workdir/simple-terminates)
|
||||
6f3 main (/workdir/simple-terminates)
|
||||
21b97 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)
|
||||
6ce258d4c544155 [unknown] ([unknown])
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,6 @@
|
||||
simple
|
||||
forks
|
||||
simple-terminates
|
||||
random
|
||||
*.dSYM
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
FROM ubuntu:bionic
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y build-essential
|
||||
RUN apt-get install -y linux-tools-common linux-tools-generic
|
||||
RUN ln -sf /usr/lib/linux-tools/4.15.0-30-generic/perf /usr/bin/perf
|
||||
|
||||
WORKDIR /workdir
|
||||
|
||||
ADD . /workdir
|
||||
|
||||
RUN make clean simple-terminates forks
|
||||
@@ -1,9 +1,25 @@
|
||||
.PHONY: all
|
||||
.PHONY: all clean linux-perf
|
||||
|
||||
all: simple random
|
||||
all: simple simple-terminates random forks
|
||||
|
||||
clean:
|
||||
rm -f simple simple-terminates random forks
|
||||
|
||||
simple: simple.cpp
|
||||
g++ -Wall -g -o $@ $<
|
||||
$(CXX) -Wall -g -o $@ $<
|
||||
|
||||
simple-terminates: simple-terminates.cpp
|
||||
$(CXX) -Wall -g -o $@ $<
|
||||
|
||||
forks: forks.cpp
|
||||
$(CXX) -Wall -g -o $@ $<
|
||||
|
||||
random: random.cpp
|
||||
g++ -Wall -g -o $@ $<
|
||||
$(CXX) -Wall -g -o $@ $<
|
||||
|
||||
linux-perf:
|
||||
docker build -t speedscope-ubuntu .
|
||||
docker run --privileged speedscope-ubuntu /bin/bash perf-script.sh forks > ../../profiles/linux-perf/forks.linux-perf.txt
|
||||
# docker run --privileged speedscope-ubuntu /bin/bash perf-script.sh with-header > ../../profiles/linux-perf/simple-with-header.linux-perf.txt
|
||||
# docker run --privileged speedscope-ubuntu /bin/bash perf-script.sh with-pid > ../../profiles/linux-perf/simple-with-pid.linux-perf.txt
|
||||
# docker run --privileged speedscope-ubuntu /bin/bash perf-script.sh > ../../profiles/linux-perf/simple.linux-perf.txt
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
#include <cstdlib>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
void alpha()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
void beta()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
void delta()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
alpha();
|
||||
beta();
|
||||
}
|
||||
|
||||
void gamma()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
pid_t pid1 = fork();
|
||||
if (pid1 == 0)
|
||||
{
|
||||
// Child process 1
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
alpha();
|
||||
beta();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pid_t pid2 = fork();
|
||||
|
||||
if (pid2 == 0)
|
||||
{
|
||||
// Child process 2
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
alpha();
|
||||
beta();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
alpha();
|
||||
beta();
|
||||
gamma();
|
||||
delta();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eoux pipefail
|
||||
|
||||
if [[ "$1" == "system-wide" ]]; then
|
||||
perf record -a -F 999 -g ./simple-terminates > perf.data
|
||||
perf script -i perf.data
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "$1" == "forks" ]]; then
|
||||
perf record -a -F 999 -g ./forks > perf.data
|
||||
perf script -i perf.data
|
||||
exit 0
|
||||
fi
|
||||
|
||||
perf record -F 999 -g ./simple-terminates > perf.data
|
||||
|
||||
if [[ "$1" == "with-header" ]]; then
|
||||
perf script --header -i perf.data
|
||||
elif [[ "$1" == "with-pid" ]]; then
|
||||
# perf script -F comm,pid,tid,time,event,ip,sym,dso -i perf.data
|
||||
# comm: command (maybe truncated)
|
||||
# pid: process ID
|
||||
# id: thread ID
|
||||
# time: time of event
|
||||
# ip: instruction pointer
|
||||
# sym: symbol
|
||||
# dso: dynamic shared object
|
||||
perf script -F comm,pid,tid,time,event,ip,sym,dso -i perf.data
|
||||
else
|
||||
perf script -i perf.data
|
||||
fi
|
||||
@@ -0,0 +1,52 @@
|
||||
#include <cstdlib>
|
||||
using namespace std;
|
||||
|
||||
void alpha()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
void beta()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
void delta()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
alpha();
|
||||
beta();
|
||||
}
|
||||
|
||||
void gamma()
|
||||
{
|
||||
int z = 3;
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
z *= 3;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
alpha();
|
||||
beta();
|
||||
delta();
|
||||
gamma();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+43
-156
@@ -1,105 +1,40 @@
|
||||
import regl from 'regl'
|
||||
import {
|
||||
RectangleBatchRenderer,
|
||||
RectangleBatch,
|
||||
RectangleBatchRendererProps,
|
||||
} from './rectangle-batch-renderer'
|
||||
import {
|
||||
ViewportRectangleRenderer,
|
||||
ViewportRectangleRendererProps,
|
||||
} from './overlay-rectangle-renderer'
|
||||
import {
|
||||
TextureCachedRenderer,
|
||||
TextureRenderer,
|
||||
TextureRendererProps,
|
||||
} from './texture-cached-renderer'
|
||||
import {StatsPanel} from '../lib/stats'
|
||||
|
||||
import {Vec2, Rect} from '../lib/math'
|
||||
import {
|
||||
FlamechartColorPassRenderer,
|
||||
FlamechartColorPassRenderProps,
|
||||
} from './flamechart-color-pass-renderer'
|
||||
import {Graphics, WebGL} from './graphics'
|
||||
import {RectangleBatchRenderer} from './rectangle-batch-renderer'
|
||||
import {TextureRenderer} from './texture-renderer'
|
||||
import {Rect, Vec2} from '../lib/math'
|
||||
import {ViewportRectangleRenderer} from './overlay-rectangle-renderer'
|
||||
import {FlamechartColorPassRenderer} from './flamechart-color-pass-renderer'
|
||||
|
||||
type FrameCallback = () => void
|
||||
|
||||
interface SetViewportScopeProps {
|
||||
physicalBounds: Rect
|
||||
}
|
||||
|
||||
export class CanvasContext {
|
||||
public gl: regl.Instance
|
||||
private rectangleBatchRenderer: RectangleBatchRenderer
|
||||
private viewportRectangleRenderer: ViewportRectangleRenderer
|
||||
private textureRenderer: TextureRenderer
|
||||
private flamechartColorPassRenderer: FlamechartColorPassRenderer
|
||||
private setViewportScope: regl.Command<{physicalBounds: Rect}>
|
||||
private setScissor: regl.Command<{}>
|
||||
public readonly gl: WebGL.Context
|
||||
public readonly rectangleBatchRenderer: RectangleBatchRenderer
|
||||
public readonly textureRenderer: TextureRenderer
|
||||
public readonly viewportRectangleRenderer: ViewportRectangleRenderer
|
||||
public readonly flamechartColorPassRenderer: FlamechartColorPassRenderer
|
||||
|
||||
constructor(canvas: HTMLCanvasElement) {
|
||||
this.gl = regl({
|
||||
canvas: canvas,
|
||||
attributes: {
|
||||
antialias: false,
|
||||
},
|
||||
extensions: ['ANGLE_instanced_arrays', 'WEBGL_depth_texture'],
|
||||
optionalExtensions: ['EXT_disjoint_timer_query'],
|
||||
profile: true,
|
||||
})
|
||||
|
||||
console.log(
|
||||
`WebGL initialized. renderer: ${this.gl.limits.renderer}, vendor: ${
|
||||
this.gl.limits.vendor
|
||||
}, version: ${this.gl.limits.version}`,
|
||||
)
|
||||
;(window as any)['CanvasContext'] = this
|
||||
|
||||
this.gl = new WebGL.Context(canvas)
|
||||
this.rectangleBatchRenderer = new RectangleBatchRenderer(this.gl)
|
||||
this.viewportRectangleRenderer = new ViewportRectangleRenderer(this.gl)
|
||||
this.textureRenderer = new TextureRenderer(this.gl)
|
||||
this.viewportRectangleRenderer = new ViewportRectangleRenderer(this.gl)
|
||||
this.flamechartColorPassRenderer = new FlamechartColorPassRenderer(this.gl)
|
||||
this.setScissor = this.gl({scissor: {enable: true}})
|
||||
this.setViewportScope = this.gl<SetViewportScopeProps>({
|
||||
context: {
|
||||
viewportX: (context: regl.Context, props: SetViewportScopeProps) => {
|
||||
return props.physicalBounds.left()
|
||||
},
|
||||
viewportY: (context: regl.Context, props: SetViewportScopeProps) => {
|
||||
return props.physicalBounds.top()
|
||||
},
|
||||
},
|
||||
viewport: (context, props) => {
|
||||
const {physicalBounds} = props
|
||||
return {
|
||||
x: physicalBounds.left(),
|
||||
y:
|
||||
window.devicePixelRatio * window.innerHeight -
|
||||
physicalBounds.top() -
|
||||
physicalBounds.height(),
|
||||
width: physicalBounds.width(),
|
||||
height: physicalBounds.height(),
|
||||
}
|
||||
},
|
||||
scissor: (context, props) => {
|
||||
const {physicalBounds} = props
|
||||
return {
|
||||
enable: true,
|
||||
box: {
|
||||
x: physicalBounds.left(),
|
||||
y:
|
||||
window.devicePixelRatio * window.innerHeight -
|
||||
physicalBounds.top() -
|
||||
physicalBounds.height(),
|
||||
width: physicalBounds.width(),
|
||||
height: physicalBounds.height(),
|
||||
},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const webGLInfo = this.gl.getWebGLInfo()
|
||||
if (webGLInfo) {
|
||||
console.log(
|
||||
`WebGL initialized. renderer: ${webGLInfo.renderer}, vendor: ${
|
||||
webGLInfo.vendor
|
||||
}, version: ${webGLInfo.version}`,
|
||||
)
|
||||
}
|
||||
;(window as any)['testContextLoss'] = () => {
|
||||
this.gl.testContextLoss()
|
||||
}
|
||||
}
|
||||
|
||||
private tick: regl.Tick | null = null
|
||||
private tickNeeded: boolean = false
|
||||
private animationFrameRequest: number | null = null
|
||||
private beforeFrameHandlers = new Set<FrameCallback>()
|
||||
addBeforeFrameHandler(callback: FrameCallback) {
|
||||
this.beforeFrameHandlers.add(callback)
|
||||
@@ -108,86 +43,38 @@ export class CanvasContext {
|
||||
this.beforeFrameHandlers.delete(callback)
|
||||
}
|
||||
requestFrame() {
|
||||
this.tickNeeded = true
|
||||
if (!this.tick) {
|
||||
this.tick = this.gl.frame(this.onBeforeFrame)
|
||||
if (!this.animationFrameRequest) {
|
||||
this.animationFrameRequest = requestAnimationFrame(this.onBeforeFrame)
|
||||
}
|
||||
}
|
||||
private onBeforeFrame = () => {
|
||||
this.animationFrameRequest = null
|
||||
this.gl.setViewport(0, 0, this.gl.renderTargetWidth, this.gl.renderTargetHeight)
|
||||
this.gl.clear(new Graphics.Color(1, 1, 1, 1))
|
||||
|
||||
private perfDebug = window.location.href.indexOf('perf-debug=1') !== -1
|
||||
private statsPanel: StatsPanel | null = this.perfDebug ? new StatsPanel() : null
|
||||
|
||||
private onBeforeFrame = (context: regl.Context) => {
|
||||
this.setScissor(() => {
|
||||
this.gl.clear({color: [0, 0, 0, 0]})
|
||||
})
|
||||
|
||||
this.tickNeeded = false
|
||||
|
||||
this.statsPanel && this.statsPanel.begin()
|
||||
for (const handler of this.beforeFrameHandlers) {
|
||||
handler()
|
||||
}
|
||||
this.statsPanel && this.statsPanel.end()
|
||||
|
||||
if (this.tick && !this.tickNeeded) {
|
||||
if (!this.perfDebug) {
|
||||
this.tick.cancel()
|
||||
this.tick = null
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(jlfwong): It would be really nice to have GPU
|
||||
// stats here, but I can't figure out how to interpret
|
||||
// the gpuTime. I suspect this is caused by executing the same
|
||||
// program multiple times without flushing.
|
||||
// I'll investigate this at some point and report a bug to regl.
|
||||
}
|
||||
|
||||
drawRectangleBatch(props: RectangleBatchRendererProps) {
|
||||
this.rectangleBatchRenderer.render(props)
|
||||
setViewport(physicalBounds: Rect, cb: () => void): void {
|
||||
const {origin, size} = physicalBounds
|
||||
let viewportBefore = this.gl.viewport
|
||||
this.gl.setViewport(origin.x, origin.y, size.x, size.y)
|
||||
|
||||
cb()
|
||||
|
||||
let {x, y, width, height} = viewportBefore
|
||||
this.gl.setViewport(x, y, width, height)
|
||||
}
|
||||
|
||||
drawTexture(props: TextureRendererProps) {
|
||||
this.textureRenderer.render(props)
|
||||
}
|
||||
|
||||
drawFlamechartColorPass(props: FlamechartColorPassRenderProps) {
|
||||
this.flamechartColorPassRenderer.render(props)
|
||||
}
|
||||
|
||||
createRectangleBatch(): RectangleBatch {
|
||||
return new RectangleBatch(this.gl)
|
||||
}
|
||||
|
||||
createTextureCachedRenderer<T>(options: {
|
||||
render(t: T): void
|
||||
shouldUpdate(oldProps: T, newProps: T): boolean
|
||||
}): TextureCachedRenderer<T> {
|
||||
return new TextureCachedRenderer(this.gl, {
|
||||
...options,
|
||||
textureRenderer: this.textureRenderer,
|
||||
})
|
||||
}
|
||||
|
||||
drawViewportRectangle(props: ViewportRectangleRendererProps) {
|
||||
this.viewportRectangleRenderer.render(props)
|
||||
}
|
||||
|
||||
renderInto(el: Element, cb: (context: regl.Context) => void) {
|
||||
renderBehind(el: Element, cb: () => void) {
|
||||
const bounds = el.getBoundingClientRect()
|
||||
const physicalBounds = new Rect(
|
||||
new Vec2(bounds.left * window.devicePixelRatio, bounds.top * window.devicePixelRatio),
|
||||
new Vec2(bounds.width * window.devicePixelRatio, bounds.height * window.devicePixelRatio),
|
||||
)
|
||||
this.setViewportScope({physicalBounds}, cb)
|
||||
}
|
||||
|
||||
setViewport(physicalBounds: Rect, cb: (context: regl.Context) => void) {
|
||||
this.setViewportScope({physicalBounds}, cb)
|
||||
}
|
||||
|
||||
getMaxTextureSize() {
|
||||
return this.gl.limits.maxTextureSize
|
||||
this.setViewport(physicalBounds, cb)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,165 +1,165 @@
|
||||
import regl from 'regl'
|
||||
import {Vec2, Rect, AffineTransform} from '../lib/math'
|
||||
import {Graphics} from './graphics'
|
||||
import {setUniformAffineTransform} from './utils'
|
||||
|
||||
const vertexFormat = new Graphics.VertexFormat()
|
||||
vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
|
||||
vertexFormat.add('uv', Graphics.AttributeType.FLOAT, 2)
|
||||
|
||||
const vert = `
|
||||
uniform mat3 uvTransform;
|
||||
uniform mat3 positionTransform;
|
||||
|
||||
attribute vec2 position;
|
||||
attribute vec2 uv;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
vUv = (uvTransform * vec3(uv, 1)).xy;
|
||||
gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
|
||||
}
|
||||
`
|
||||
|
||||
const frag = `
|
||||
precision mediump float;
|
||||
|
||||
uniform vec2 uvSpacePixelSize;
|
||||
uniform float renderOutlines;
|
||||
|
||||
varying vec2 vUv;
|
||||
uniform sampler2D colorTexture;
|
||||
|
||||
// https://en.wikipedia.org/wiki/HSL_and_HSV#From_luma/chroma/hue
|
||||
vec3 hcl2rgb(float H, float C, float L) {
|
||||
float hPrime = H / 60.0;
|
||||
float X = C * (1.0 - abs(mod(hPrime, 2.0) - 1.0));
|
||||
vec3 RGB =
|
||||
hPrime < 1.0 ? vec3(C, X, 0) :
|
||||
hPrime < 2.0 ? vec3(X, C, 0) :
|
||||
hPrime < 3.0 ? vec3(0, C, X) :
|
||||
hPrime < 4.0 ? vec3(0, X, C) :
|
||||
hPrime < 5.0 ? vec3(X, 0, C) :
|
||||
vec3(C, 0, X);
|
||||
|
||||
float m = L - dot(RGB, vec3(0.30, 0.59, 0.11));
|
||||
return RGB + vec3(m, m, m);
|
||||
}
|
||||
|
||||
float triangle(float x) {
|
||||
return 2.0 * abs(fract(x) - 0.5) - 1.0;
|
||||
}
|
||||
|
||||
vec3 colorForBucket(float t) {
|
||||
float x = triangle(30.0 * t);
|
||||
float H = 360.0 * (0.9 * t);
|
||||
float C = 0.25 + 0.2 * x;
|
||||
float L = 0.80 - 0.15 * x;
|
||||
return hcl2rgb(H, C, L);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 here = texture2D(colorTexture, vUv);
|
||||
|
||||
if (here.z == 0.0) {
|
||||
// Background color
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
// Sample the 4 surrounding pixels in the depth texture to determine
|
||||
// if we should draw a boundary here or not.
|
||||
vec4 N = texture2D(colorTexture, vUv + vec2(0, uvSpacePixelSize.y));
|
||||
vec4 E = texture2D(colorTexture, vUv + vec2(uvSpacePixelSize.x, 0));
|
||||
vec4 S = texture2D(colorTexture, vUv + vec2(0, -uvSpacePixelSize.y));
|
||||
vec4 W = texture2D(colorTexture, vUv + vec2(-uvSpacePixelSize.x, 0));
|
||||
|
||||
// NOTE: For outline checks, we intentionally check both the right
|
||||
// and the left to determine if we're an edge. If a rectangle is a single
|
||||
// pixel wide, we don't want to render it as an outline, so this method
|
||||
// of checking ensures that we don't outline single physical-space
|
||||
// pixel width rectangles.
|
||||
if (
|
||||
renderOutlines > 0.0 &&
|
||||
(
|
||||
here.y == N.y && here.y != S.y || // Top edge
|
||||
here.y == S.y && here.y != N.y || // Bottom edge
|
||||
here.x == E.x && here.x != W.x || // Left edge
|
||||
here.x == W.x && here.x != E.x
|
||||
)
|
||||
) {
|
||||
// We're on an edge! Draw transparent.
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
} else {
|
||||
// Not on an edge. Draw the appropriate color.
|
||||
gl_FragColor = vec4(colorForBucket(here.z), here.a);
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
export interface FlamechartColorPassRenderProps {
|
||||
rectInfoTexture: regl.Texture
|
||||
rectInfoTexture: Graphics.Texture
|
||||
renderOutlines: boolean
|
||||
srcRect: Rect
|
||||
dstRect: Rect
|
||||
}
|
||||
|
||||
export class FlamechartColorPassRenderer {
|
||||
private command: regl.Command<FlamechartColorPassRenderProps>
|
||||
constructor(gl: regl.Instance) {
|
||||
this.command = gl({
|
||||
vert: `
|
||||
uniform mat3 uvTransform;
|
||||
uniform mat3 positionTransform;
|
||||
private material: Graphics.Material
|
||||
private buffer: Graphics.VertexBuffer
|
||||
|
||||
attribute vec2 position;
|
||||
attribute vec2 uv;
|
||||
varying vec2 vUv;
|
||||
constructor(private gl: Graphics.Context) {
|
||||
const vertices = [
|
||||
{pos: [-1, 1], uv: [0, 1]},
|
||||
{pos: [1, 1], uv: [1, 1]},
|
||||
{pos: [-1, -1], uv: [0, 0]},
|
||||
{pos: [1, -1], uv: [1, 0]},
|
||||
]
|
||||
const floats: number[] = []
|
||||
for (let v of vertices) {
|
||||
floats.push(v.pos[0])
|
||||
floats.push(v.pos[1])
|
||||
floats.push(v.uv[0])
|
||||
floats.push(v.uv[1])
|
||||
}
|
||||
|
||||
void main() {
|
||||
vUv = (uvTransform * vec3(uv, 1)).xy;
|
||||
gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
|
||||
}
|
||||
`,
|
||||
|
||||
frag: `
|
||||
precision mediump float;
|
||||
|
||||
uniform vec2 uvSpacePixelSize;
|
||||
uniform float renderOutlines;
|
||||
|
||||
varying vec2 vUv;
|
||||
uniform sampler2D colorTexture;
|
||||
|
||||
// https://en.wikipedia.org/wiki/HSL_and_HSV#From_luma/chroma/hue
|
||||
vec3 hcl2rgb(float H, float C, float L) {
|
||||
float hPrime = H / 60.0;
|
||||
float X = C * (1.0 - abs(mod(hPrime, 2.0) - 1.0));
|
||||
vec3 RGB =
|
||||
hPrime < 1.0 ? vec3(C, X, 0) :
|
||||
hPrime < 2.0 ? vec3(X, C, 0) :
|
||||
hPrime < 3.0 ? vec3(0, C, X) :
|
||||
hPrime < 4.0 ? vec3(0, X, C) :
|
||||
hPrime < 5.0 ? vec3(X, 0, C) :
|
||||
vec3(C, 0, X);
|
||||
|
||||
float m = L - dot(RGB, vec3(0.30, 0.59, 0.11));
|
||||
return RGB + vec3(m, m, m);
|
||||
}
|
||||
|
||||
float triangle(float x) {
|
||||
return 2.0 * abs(fract(x) - 0.5) - 1.0;
|
||||
}
|
||||
|
||||
vec3 colorForBucket(float t) {
|
||||
float x = triangle(30.0 * t);
|
||||
float H = 360.0 * (0.9 * t);
|
||||
float C = 0.25 + 0.2 * x;
|
||||
float L = 0.80 - 0.15 * x;
|
||||
return hcl2rgb(H, C, L);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 here = texture2D(colorTexture, vUv);
|
||||
|
||||
if (here.z == 0.0) {
|
||||
// Background color
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
// Sample the 4 surrounding pixels in the depth texture to determine
|
||||
// if we should draw a boundary here or not.
|
||||
vec4 N = texture2D(colorTexture, vUv + vec2(0, uvSpacePixelSize.y));
|
||||
vec4 E = texture2D(colorTexture, vUv + vec2(uvSpacePixelSize.x, 0));
|
||||
vec4 S = texture2D(colorTexture, vUv + vec2(0, -uvSpacePixelSize.y));
|
||||
vec4 W = texture2D(colorTexture, vUv + vec2(-uvSpacePixelSize.x, 0));
|
||||
|
||||
// NOTE: For outline checks, we intentionally check both the right
|
||||
// and the left to determine if we're an edge. If a rectangle is a single
|
||||
// pixel wide, we don't want to render it as an outline, so this method
|
||||
// of checking ensures that we don't outline single physical-space
|
||||
// pixel width rectangles.
|
||||
if (
|
||||
renderOutlines > 0.0 &&
|
||||
(
|
||||
here.y == N.y && here.y != S.y || // Top edge
|
||||
here.y == S.y && here.y != N.y || // Bottom edge
|
||||
here.x == E.x && here.x != W.x || // Left edge
|
||||
here.x == W.x && here.x != E.x
|
||||
)
|
||||
) {
|
||||
// We're on an edge! Draw transparent.
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
} else {
|
||||
// Not on an edge. Draw the appropriate color;
|
||||
gl_FragColor = vec4(colorForBucket(here.z), here.a);
|
||||
}
|
||||
}
|
||||
`,
|
||||
|
||||
depth: {
|
||||
enable: false,
|
||||
},
|
||||
|
||||
attributes: {
|
||||
// Cover full canvas with a rectangle
|
||||
// with 2 triangles using a triangle
|
||||
// strip.
|
||||
//
|
||||
// 0 +--+ 1
|
||||
// | /|
|
||||
// |/ |
|
||||
// 2 +--+ 3
|
||||
position: gl.buffer([[-1, 1], [1, 1], [-1, -1], [1, -1]]),
|
||||
uv: gl.buffer([[0, 1], [1, 1], [0, 0], [1, 0]]),
|
||||
},
|
||||
|
||||
count: 4,
|
||||
|
||||
primitive: 'triangle strip',
|
||||
|
||||
uniforms: {
|
||||
colorTexture: (context, props) => props.rectInfoTexture,
|
||||
uvTransform: (context, props) => {
|
||||
const {srcRect, rectInfoTexture} = props
|
||||
const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
|
||||
.times(AffineTransform.withScale(new Vec2(1, -1)))
|
||||
.times(
|
||||
AffineTransform.betweenRects(
|
||||
new Rect(Vec2.zero, new Vec2(rectInfoTexture.width, rectInfoTexture.height)),
|
||||
Rect.unit,
|
||||
),
|
||||
)
|
||||
const uvRect = physicalToUV.transformRect(srcRect)
|
||||
return AffineTransform.betweenRects(Rect.unit, uvRect).flatten()
|
||||
},
|
||||
renderOutlines: (context, props) => {
|
||||
return props.renderOutlines ? 1.0 : 0.0
|
||||
},
|
||||
uvSpacePixelSize: (context, props) => {
|
||||
return Vec2.unit
|
||||
.dividedByPointwise(new Vec2(props.rectInfoTexture.width, props.rectInfoTexture.height))
|
||||
.flatten()
|
||||
},
|
||||
positionTransform: (context, props) => {
|
||||
const {dstRect} = props
|
||||
const viewportSize = new Vec2(context.viewportWidth, context.viewportHeight)
|
||||
|
||||
const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
|
||||
AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
|
||||
)
|
||||
const ndcRect = physicalToNDC.transformRect(dstRect)
|
||||
return AffineTransform.betweenRects(Rect.NDC, ndcRect).flatten()
|
||||
},
|
||||
},
|
||||
})
|
||||
this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
|
||||
this.buffer.uploadFloats(floats)
|
||||
this.material = gl.createMaterial(vertexFormat, vert, frag)
|
||||
}
|
||||
|
||||
render(props: FlamechartColorPassRenderProps) {
|
||||
this.command(props)
|
||||
const {srcRect, rectInfoTexture} = props
|
||||
const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
|
||||
.times(AffineTransform.withScale(new Vec2(1, -1)))
|
||||
.times(
|
||||
AffineTransform.betweenRects(
|
||||
new Rect(Vec2.zero, new Vec2(rectInfoTexture.width, rectInfoTexture.height)),
|
||||
Rect.unit,
|
||||
),
|
||||
)
|
||||
const uvRect = physicalToUV.transformRect(srcRect)
|
||||
const uvTransform = AffineTransform.betweenRects(Rect.unit, uvRect)
|
||||
|
||||
const {dstRect} = props
|
||||
const viewportSize = new Vec2(this.gl.viewport.width, this.gl.viewport.height)
|
||||
|
||||
const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
|
||||
AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
|
||||
)
|
||||
const ndcRect = physicalToNDC.transformRect(dstRect)
|
||||
const positionTransform = AffineTransform.betweenRects(Rect.NDC, ndcRect)
|
||||
|
||||
const uvSpacePixelSize = Vec2.unit.dividedByPointwise(
|
||||
new Vec2(props.rectInfoTexture.width, props.rectInfoTexture.height),
|
||||
)
|
||||
|
||||
this.material.setUniformSampler('colorTexture', props.rectInfoTexture, 0)
|
||||
setUniformAffineTransform(this.material, 'uvTransform', uvTransform)
|
||||
this.material.setUniformFloat('renderOutlines', props.renderOutlines ? 1.0 : 0.0)
|
||||
this.material.setUniformVec2('uvSpacePixelSize', uvSpacePixelSize.x, uvSpacePixelSize.y)
|
||||
setUniformAffineTransform(this.material, 'positionTransform', positionTransform)
|
||||
|
||||
this.gl.setUnpremultipliedBlendState()
|
||||
this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import regl from 'regl'
|
||||
import {Flamechart} from '../lib/flamechart'
|
||||
import {RectangleBatch} from './rectangle-batch-renderer'
|
||||
import {CanvasContext} from './canvas-context'
|
||||
import {RectangleBatch, RectangleBatchRenderer} from './rectangle-batch-renderer'
|
||||
import {Vec2, Rect, AffineTransform} from '../lib/math'
|
||||
import {Color} from '../lib/color'
|
||||
import {KeyedSet} from '../lib/utils'
|
||||
import {RowAtlas} from './row-atlas'
|
||||
import {Graphics} from './graphics'
|
||||
import {FlamechartColorPassRenderer} from './flamechart-color-pass-renderer'
|
||||
import {renderInto} from './utils'
|
||||
|
||||
const MAX_BATCH_SIZE = 10000
|
||||
|
||||
@@ -23,9 +24,7 @@ class RangeTreeLeafNode implements RangeTreeNode {
|
||||
private batch: RectangleBatch,
|
||||
private bounds: Rect,
|
||||
private numPrecedingRectanglesInRow: number,
|
||||
) {
|
||||
batch.uploadToGPU()
|
||||
}
|
||||
) {}
|
||||
|
||||
getBatch() {
|
||||
return this.batch
|
||||
@@ -127,13 +126,13 @@ export interface FlamechartRendererOptions {
|
||||
|
||||
export class FlamechartRenderer {
|
||||
private layers: RangeTreeNode[] = []
|
||||
private rectInfoTexture: regl.Texture
|
||||
private framebuffer: regl.Framebuffer
|
||||
|
||||
constructor(
|
||||
private canvasContext: CanvasContext,
|
||||
private gl: Graphics.Context,
|
||||
private rowAtlas: RowAtlas<FlamechartRowAtlasKey>,
|
||||
private flamechart: Flamechart,
|
||||
private rectangleBatchRenderer: RectangleBatchRenderer,
|
||||
private colorPassRenderer: FlamechartColorPassRenderer,
|
||||
private options: FlamechartRendererOptions = {inverted: false},
|
||||
) {
|
||||
const nLayers = flamechart.getLayers().length
|
||||
@@ -143,7 +142,7 @@ export class FlamechartRenderer {
|
||||
|
||||
let minLeft = Infinity
|
||||
let maxRight = -Infinity
|
||||
let batch = canvasContext.createRectangleBatch()
|
||||
let batch = new RectangleBatch(this.gl)
|
||||
|
||||
let rectCount = 0
|
||||
|
||||
@@ -161,7 +160,7 @@ export class FlamechartRenderer {
|
||||
)
|
||||
minLeft = Infinity
|
||||
maxRight = -Infinity
|
||||
batch = canvasContext.createRectangleBatch()
|
||||
batch = new RectangleBatch(this.gl)
|
||||
}
|
||||
const configSpaceBounds = new Rect(
|
||||
new Vec2(frame.start, y),
|
||||
@@ -198,10 +197,47 @@ export class FlamechartRenderer {
|
||||
// range than a tree of always-height-two might make this run faster
|
||||
this.layers.push(new RangeTreeInteriorNode(leafNodes))
|
||||
}
|
||||
this.rectInfoTexture = this.canvasContext.gl.texture({width: 1, height: 1})
|
||||
this.framebuffer = this.canvasContext.gl.framebuffer({
|
||||
color: [this.rectInfoTexture],
|
||||
})
|
||||
}
|
||||
|
||||
private rectInfoTexture: Graphics.Texture | null = null
|
||||
getRectInfoTexture(width: number, height: number): Graphics.Texture {
|
||||
if (this.rectInfoTexture) {
|
||||
const texture = this.rectInfoTexture
|
||||
if (texture.width != width || texture.height != height) {
|
||||
texture.resize(width, height)
|
||||
}
|
||||
} else {
|
||||
this.rectInfoTexture = this.gl.createTexture(
|
||||
Graphics.TextureFormat.NEAREST_CLAMP,
|
||||
width,
|
||||
height,
|
||||
)
|
||||
}
|
||||
return this.rectInfoTexture
|
||||
}
|
||||
|
||||
private rectInfoRenderTarget: Graphics.RenderTarget | null = null
|
||||
getRectInfoRenderTarget(width: number, height: number): Graphics.RenderTarget {
|
||||
const texture = this.getRectInfoTexture(width, height)
|
||||
if (this.rectInfoRenderTarget) {
|
||||
if (this.rectInfoRenderTarget.texture != texture) {
|
||||
this.rectInfoRenderTarget.texture.free()
|
||||
this.rectInfoRenderTarget.setColor(texture)
|
||||
}
|
||||
}
|
||||
if (!this.rectInfoRenderTarget) {
|
||||
this.rectInfoRenderTarget = this.gl.createRenderTarget(texture)
|
||||
}
|
||||
return this.rectInfoRenderTarget
|
||||
}
|
||||
|
||||
free() {
|
||||
if (this.rectInfoRenderTarget) {
|
||||
this.rectInfoRenderTarget.free()
|
||||
}
|
||||
if (this.rectInfoTexture) {
|
||||
this.rectInfoTexture.free()
|
||||
}
|
||||
}
|
||||
|
||||
private atlasKeys = new KeyedSet<FlamechartRowAtlasKey>()
|
||||
@@ -274,6 +310,11 @@ export class FlamechartRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(jlfwong): When I switched the GL backend from regl to the port from
|
||||
// evanw/sky, rendering uncached even for massive documents seemed fast
|
||||
// enough. It's possible that the row cache is now unnecessary, but I'll
|
||||
// leave it around for now since it's not causing issues.
|
||||
|
||||
const cacheCapacity = this.rowAtlas.getCapacity()
|
||||
const keysToRenderCached = atlasKeysToRender.slice(0, cacheCapacity)
|
||||
const keysToRenderUncached = atlasKeysToRender.slice(cacheCapacity)
|
||||
@@ -282,24 +323,24 @@ export class FlamechartRenderer {
|
||||
this.rowAtlas.writeToAtlasIfNeeded(keysToRenderCached, (textureDstRect, key) => {
|
||||
const configSpaceBounds = this.configSpaceBoundsForKey(key)
|
||||
this.layers[key.stackDepth].forEachLeafNodeWithinBounds(configSpaceBounds, leaf => {
|
||||
this.canvasContext.drawRectangleBatch({
|
||||
this.rectangleBatchRenderer.render({
|
||||
batch: leaf.getBatch(),
|
||||
configSpaceSrcRect: configSpaceBounds,
|
||||
physicalSpaceDstRect: textureDstRect,
|
||||
parityMin: key.stackDepth % 2 == 0 ? 2 : 0,
|
||||
parityOffset: leaf.getParity(),
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
this.framebuffer.resize(physicalSpaceDstRect.width(), physicalSpaceDstRect.height())
|
||||
this.framebuffer.use(context => {
|
||||
this.canvasContext.gl.clear({color: [0, 0, 0, 0]})
|
||||
const renderTarget = this.getRectInfoRenderTarget(
|
||||
physicalSpaceDstRect.width(),
|
||||
physicalSpaceDstRect.height(),
|
||||
)
|
||||
|
||||
renderInto(this.gl, renderTarget, () => {
|
||||
const viewportRect = new Rect(
|
||||
Vec2.zero,
|
||||
new Vec2(context.viewportWidth, context.viewportHeight),
|
||||
new Vec2(this.gl.viewport.width, this.gl.viewport.height),
|
||||
)
|
||||
|
||||
const configToViewport = AffineTransform.betweenRects(configSpaceSrcRect, viewportRect)
|
||||
|
||||
// Render from the cache
|
||||
@@ -313,34 +354,25 @@ export class FlamechartRenderer {
|
||||
const configSpaceBounds = this.configSpaceBoundsForKey(key)
|
||||
const physicalBounds = configToViewport.transformRect(configSpaceBounds)
|
||||
this.layers[key.stackDepth].forEachLeafNodeWithinBounds(configSpaceBounds, leaf => {
|
||||
this.canvasContext.drawRectangleBatch({
|
||||
this.rectangleBatchRenderer.render({
|
||||
batch: leaf.getBatch(),
|
||||
configSpaceSrcRect,
|
||||
configSpaceSrcRect: configSpaceBounds,
|
||||
physicalSpaceDstRect: physicalBounds,
|
||||
parityMin: key.stackDepth % 2 == 0 ? 2 : 0,
|
||||
parityOffset: leaf.getParity(),
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.canvasContext.drawFlamechartColorPass({
|
||||
rectInfoTexture: this.rectInfoTexture,
|
||||
srcRect: new Rect(
|
||||
Vec2.zero,
|
||||
new Vec2(this.rectInfoTexture.width, this.rectInfoTexture.height),
|
||||
),
|
||||
const rectInfoTexture = this.getRectInfoTexture(
|
||||
physicalSpaceDstRect.width(),
|
||||
physicalSpaceDstRect.height(),
|
||||
)
|
||||
|
||||
this.colorPassRenderer.render({
|
||||
rectInfoTexture,
|
||||
srcRect: new Rect(Vec2.zero, new Vec2(rectInfoTexture.width, rectInfoTexture.height)),
|
||||
dstRect: physicalSpaceDstRect,
|
||||
renderOutlines: props.renderOutlines,
|
||||
})
|
||||
|
||||
// Overlay the atlas on top of the canvas for debugging
|
||||
/*
|
||||
this.canvasContext.drawTexture({
|
||||
texture: this.rowAtlas.texture,
|
||||
srcRect: new Rect(Vec2.zero, new Vec2(this.rowAtlas.texture.width, this.rowAtlas.texture.height)),
|
||||
dstRect: new Rect(Vec2.zero, new Vec2(800, 800))
|
||||
})
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
+1361
File diff suppressed because it is too large
Load Diff
@@ -1,126 +1,103 @@
|
||||
import regl from 'regl'
|
||||
import {AffineTransform, Rect} from '../lib/math'
|
||||
import {Graphics} from './graphics'
|
||||
import {setUniformAffineTransform, setUniformVec2} from './utils'
|
||||
|
||||
export interface ViewportRectangleRendererProps {
|
||||
configSpaceToPhysicalViewSpace: AffineTransform
|
||||
configSpaceViewportRect: Rect
|
||||
}
|
||||
|
||||
const vertexFormat = new Graphics.VertexFormat()
|
||||
vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
|
||||
|
||||
const vert = `
|
||||
attribute vec2 position;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(position, 0, 1);
|
||||
}
|
||||
`
|
||||
|
||||
const frag = `
|
||||
precision mediump float;
|
||||
|
||||
uniform mat3 configSpaceToPhysicalViewSpace;
|
||||
uniform vec2 physicalSize;
|
||||
uniform vec2 physicalOrigin;
|
||||
uniform vec2 configSpaceViewportOrigin;
|
||||
uniform vec2 configSpaceViewportSize;
|
||||
uniform float framebufferHeight;
|
||||
|
||||
void main() {
|
||||
vec2 origin = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportOrigin, 1.0)).xy;
|
||||
vec2 size = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportSize, 0.0)).xy;
|
||||
|
||||
vec2 halfSize = physicalSize / 2.0;
|
||||
|
||||
float borderWidth = 2.0;
|
||||
|
||||
origin = floor(origin * halfSize) / halfSize + borderWidth * vec2(1.0, 1.0);
|
||||
size = floor(size * halfSize) / halfSize - 2.0 * borderWidth * vec2(1.0, 1.0);
|
||||
|
||||
vec2 coord = gl_FragCoord.xy;
|
||||
coord.x = coord.x - physicalOrigin.x;
|
||||
coord.y = framebufferHeight - coord.y - physicalOrigin.y;
|
||||
vec2 clamped = clamp(coord, origin, origin + size);
|
||||
vec2 gap = clamped - coord;
|
||||
float maxdist = max(abs(gap.x), abs(gap.y));
|
||||
|
||||
// TOOD(jlfwong): Could probably optimize this to use mix somehow.
|
||||
if (maxdist == 0.0) {
|
||||
// Inside viewport rectangle
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
} else if (maxdist < borderWidth) {
|
||||
// Inside viewport rectangle at border
|
||||
gl_FragColor = vec4(0.7, 0.7, 0.7, 0.8);
|
||||
} else {
|
||||
// Outside viewport rectangle
|
||||
gl_FragColor = vec4(0.7, 0.7, 0.7, 0.5);
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
export class ViewportRectangleRenderer {
|
||||
private command: regl.Command<ViewportRectangleRendererProps>
|
||||
constructor(regl: regl.Instance) {
|
||||
this.command = regl<ViewportRectangleRendererProps>({
|
||||
vert: `
|
||||
attribute vec2 position;
|
||||
private material: Graphics.Material
|
||||
private buffer: Graphics.VertexBuffer
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(position, 0, 1);
|
||||
}
|
||||
`,
|
||||
|
||||
frag: `
|
||||
precision mediump float;
|
||||
|
||||
uniform mat3 configSpaceToPhysicalViewSpace;
|
||||
uniform vec2 physicalSize;
|
||||
uniform vec2 physicalOrigin;
|
||||
uniform vec2 configSpaceViewportOrigin;
|
||||
uniform vec2 configSpaceViewportSize;
|
||||
uniform float framebufferHeight;
|
||||
|
||||
void main() {
|
||||
vec2 origin = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportOrigin, 1.0)).xy;
|
||||
vec2 size = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportSize, 0.0)).xy;
|
||||
|
||||
vec2 halfSize = physicalSize / 2.0;
|
||||
|
||||
float borderWidth = 2.0;
|
||||
|
||||
origin = floor(origin * halfSize) / halfSize + borderWidth * vec2(1.0, 1.0);
|
||||
size = floor(size * halfSize) / halfSize - 2.0 * borderWidth * vec2(1.0, 1.0);
|
||||
|
||||
vec2 coord = gl_FragCoord.xy;
|
||||
coord.x = coord.x - physicalOrigin.x;
|
||||
coord.y = framebufferHeight - coord.y - physicalOrigin.y;
|
||||
vec2 clamped = clamp(coord, origin, origin + size);
|
||||
vec2 gap = clamped - coord;
|
||||
float maxdist = max(abs(gap.x), abs(gap.y));
|
||||
|
||||
// TOOD(jlfwong): Could probably optimize this to use mix somehow.
|
||||
if (maxdist == 0.0) {
|
||||
// Inside viewport rectangle
|
||||
gl_FragColor = vec4(0, 0, 0, 0);
|
||||
} else if (maxdist < borderWidth) {
|
||||
// Inside viewport rectangle at border
|
||||
gl_FragColor = vec4(0.7, 0.7, 0.7, 0.8);
|
||||
} else {
|
||||
// Outside viewport rectangle
|
||||
gl_FragColor = vec4(0.7, 0.7, 0.7, 0.5);
|
||||
}
|
||||
}
|
||||
`,
|
||||
|
||||
blend: {
|
||||
enable: true,
|
||||
func: {
|
||||
srcRGB: 'src alpha',
|
||||
srcAlpha: 'one',
|
||||
dstRGB: 'one minus src alpha',
|
||||
dstAlpha: 'one',
|
||||
},
|
||||
},
|
||||
|
||||
depth: {
|
||||
enable: false,
|
||||
},
|
||||
|
||||
attributes: {
|
||||
// Cover full canvas with a rectangle
|
||||
// with 2 triangles using a triangle
|
||||
// strip.
|
||||
//
|
||||
// 0 +--+ 1
|
||||
// | /|
|
||||
// |/ |
|
||||
// 2 +--+ 3
|
||||
position: [[-1, 1], [1, 1], [-1, -1], [1, -1]],
|
||||
},
|
||||
|
||||
uniforms: {
|
||||
configSpaceToPhysicalViewSpace: (context, props) => {
|
||||
return props.configSpaceToPhysicalViewSpace.flatten()
|
||||
},
|
||||
configSpaceViewportOrigin: (context, props) => {
|
||||
return props.configSpaceViewportRect.origin.flatten()
|
||||
},
|
||||
configSpaceViewportSize: (context, props) => {
|
||||
return props.configSpaceViewportRect.size.flatten()
|
||||
},
|
||||
physicalSize: (context, props) => {
|
||||
return [context.viewportWidth, context.viewportHeight]
|
||||
},
|
||||
physicalOrigin: (context, props) => {
|
||||
return [context.viewportX, context.viewportY]
|
||||
},
|
||||
framebufferHeight: (context, props) => {
|
||||
return context.framebufferHeight
|
||||
},
|
||||
},
|
||||
|
||||
primitive: 'triangle strip',
|
||||
|
||||
count: 4,
|
||||
})
|
||||
constructor(private gl: Graphics.Context) {
|
||||
const vertices = [[-1, 1], [1, 1], [-1, -1], [1, -1]]
|
||||
const floats: number[] = []
|
||||
for (let v of vertices) {
|
||||
floats.push(v[0])
|
||||
floats.push(v[1])
|
||||
}
|
||||
this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
|
||||
this.buffer.upload(new Uint8Array(new Float32Array(floats).buffer))
|
||||
this.material = gl.createMaterial(vertexFormat, vert, frag)
|
||||
}
|
||||
|
||||
render(props: ViewportRectangleRendererProps) {
|
||||
this.command(props)
|
||||
}
|
||||
setUniformAffineTransform(
|
||||
this.material,
|
||||
'configSpaceToPhysicalViewSpace',
|
||||
props.configSpaceToPhysicalViewSpace,
|
||||
)
|
||||
|
||||
resetStats() {
|
||||
return Object.assign(this.command.stats, {cpuTime: 0, gpuTime: 0, count: 0})
|
||||
}
|
||||
stats() {
|
||||
return this.command.stats
|
||||
// TODO(jlfwong): Pack these into a Vec4 instead
|
||||
setUniformVec2(this.material, 'configSpaceViewportOrigin', props.configSpaceViewportRect.origin)
|
||||
setUniformVec2(this.material, 'configSpaceViewportSize', props.configSpaceViewportRect.size)
|
||||
// TODO(jlfwong): Pack these into a Vec4 instead
|
||||
|
||||
const viewport = this.gl.viewport
|
||||
this.material.setUniformVec2('physicalOrigin', viewport.x, viewport.y)
|
||||
this.material.setUniformVec2('physicalSize', viewport.width, viewport.height)
|
||||
|
||||
this.material.setUniformFloat('framebufferHeight', this.gl.renderTargetHeight)
|
||||
|
||||
this.gl.setBlendState(
|
||||
Graphics.BlendOperation.SOURCE_ALPHA,
|
||||
Graphics.BlendOperation.INVERSE_SOURCE_ALPHA,
|
||||
)
|
||||
this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
|
||||
}
|
||||
}
|
||||
|
||||
+102
-172
@@ -1,73 +1,99 @@
|
||||
import regl from 'regl'
|
||||
import {Rect, Vec2, AffineTransform} from '../lib/math'
|
||||
import {Color} from '../lib/color'
|
||||
import {Graphics} from './graphics'
|
||||
import {setUniformAffineTransform} from './utils'
|
||||
|
||||
const vertexFormat = new Graphics.VertexFormat()
|
||||
vertexFormat.add('configSpacePos', Graphics.AttributeType.FLOAT, 2)
|
||||
vertexFormat.add('color', Graphics.AttributeType.FLOAT, 3)
|
||||
|
||||
const vert = `
|
||||
uniform mat3 configSpaceToNDC;
|
||||
|
||||
attribute vec2 configSpacePos;
|
||||
attribute vec3 color;
|
||||
varying vec3 vColor;
|
||||
|
||||
void main() {
|
||||
vColor = color;
|
||||
vec2 position = (configSpaceToNDC * vec3(configSpacePos, 1)).xy;
|
||||
gl_Position = vec4(position, 1, 1);
|
||||
}
|
||||
`
|
||||
|
||||
const frag = `
|
||||
precision mediump float;
|
||||
varying vec3 vColor;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vec4(vColor.rgb, 1);
|
||||
}
|
||||
`
|
||||
|
||||
export class RectangleBatch {
|
||||
private rectCapacity = 1000
|
||||
private rectCount = 0
|
||||
|
||||
private configSpaceOffsets = new Float32Array(this.rectCapacity * 2)
|
||||
private configSpaceSizes = new Float32Array(this.rectCapacity * 2)
|
||||
private colors = new Float32Array(this.rectCapacity * 3)
|
||||
|
||||
constructor(private gl: regl.Instance) {}
|
||||
private rects: Rect[] = []
|
||||
private colors: Color[] = []
|
||||
constructor(private gl: Graphics.Context) {}
|
||||
|
||||
getRectCount() {
|
||||
return this.rectCount
|
||||
return this.rects.length
|
||||
}
|
||||
|
||||
private configSpaceOffsetBuffer: regl.Buffer | null = null
|
||||
getConfigSpaceOffsetBuffer() {
|
||||
if (!this.configSpaceOffsetBuffer)
|
||||
this.configSpaceOffsetBuffer = this.gl.buffer(this.configSpaceOffsets)
|
||||
return this.configSpaceOffsetBuffer
|
||||
}
|
||||
private buffer: Graphics.VertexBuffer | null = null
|
||||
getBuffer(): Graphics.VertexBuffer {
|
||||
if (this.buffer) {
|
||||
return this.buffer
|
||||
}
|
||||
|
||||
private configSpaceSizeBuffer: regl.Buffer | null = null
|
||||
getConfigSpaceSizeBuffer() {
|
||||
if (!this.configSpaceSizeBuffer)
|
||||
this.configSpaceSizeBuffer = this.gl.buffer(this.configSpaceSizes)
|
||||
return this.configSpaceSizeBuffer
|
||||
}
|
||||
const corners = [[0, 0], [1, 0], [0, 1], [1, 0], [0, 1], [1, 1]]
|
||||
|
||||
private colorBuffer: regl.Buffer | null = null
|
||||
getColorBuffer() {
|
||||
if (!this.colorBuffer) this.colorBuffer = this.gl.buffer(this.colors)
|
||||
return this.colorBuffer
|
||||
}
|
||||
const bytes = new Uint8Array(vertexFormat.stride * corners.length * this.rects.length)
|
||||
const floats = new Float32Array(bytes.buffer)
|
||||
let idx = 0
|
||||
|
||||
uploadToGPU() {
|
||||
this.getConfigSpaceOffsetBuffer()
|
||||
this.getConfigSpaceSizeBuffer()
|
||||
this.getColorBuffer()
|
||||
for (let i = 0; i < this.rects.length; i++) {
|
||||
const rect = this.rects[i]
|
||||
const color = this.colors[i]
|
||||
|
||||
// TODO(jlfwong): In the conversion from regl to graphics.ts, I lost the
|
||||
// ability to do instanced drawing. This is a pretty significant hit to
|
||||
// the performance here since I need 6x the memory to allocate these
|
||||
// things. Adding instanced drawing to graphics.ts is non-trivial, so I'm
|
||||
// just going to try this for now.
|
||||
for (let corner of corners) {
|
||||
floats[idx++] = rect.origin.x + corner[0] * rect.size.x
|
||||
floats[idx++] = rect.origin.y + corner[1] * rect.size.y
|
||||
|
||||
floats[idx++] = color.r
|
||||
floats[idx++] = color.g
|
||||
floats[idx++] = color.b
|
||||
}
|
||||
}
|
||||
|
||||
if (idx !== floats.length) {
|
||||
throw new Error("Buffer expected to be full but wasn't")
|
||||
}
|
||||
|
||||
this.buffer = this.gl.createVertexBuffer(bytes.length)
|
||||
this.buffer.upload(bytes)
|
||||
return this.buffer
|
||||
}
|
||||
|
||||
addRect(rect: Rect, color: Color) {
|
||||
const index = this.rectCount++
|
||||
if (index >= this.rectCapacity) {
|
||||
// Not enough capacity, time to resize! We'll double the capacity each time.
|
||||
this.rectCapacity *= 2
|
||||
const configSpaceOffsets = new Float32Array(this.rectCapacity * 2)
|
||||
const configSpaceSizes = new Float32Array(this.rectCapacity * 2)
|
||||
const colors = new Float32Array(this.rectCapacity * 3)
|
||||
this.rects.push(rect)
|
||||
this.colors.push(color)
|
||||
|
||||
configSpaceOffsets.set(this.configSpaceOffsets)
|
||||
configSpaceSizes.set(this.configSpaceSizes)
|
||||
colors.set(this.colors)
|
||||
|
||||
this.configSpaceOffsets = configSpaceOffsets
|
||||
this.configSpaceSizes = configSpaceSizes
|
||||
this.colors = colors
|
||||
if (this.buffer) {
|
||||
this.buffer.free()
|
||||
this.buffer = null
|
||||
}
|
||||
this.configSpaceOffsets[index * 2] = rect.origin.x
|
||||
this.configSpaceOffsets[index * 2 + 1] = rect.origin.y
|
||||
}
|
||||
|
||||
this.configSpaceSizes[index * 2] = rect.size.x
|
||||
this.configSpaceSizes[index * 2 + 1] = rect.size.y
|
||||
|
||||
this.colors[index * 3] = color.r
|
||||
this.colors[index * 3 + 1] = color.g
|
||||
this.colors[index * 3 + 2] = color.b
|
||||
free() {
|
||||
if (this.buffer) {
|
||||
this.buffer.free()
|
||||
this.buffer = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,131 +101,35 @@ export interface RectangleBatchRendererProps {
|
||||
batch: RectangleBatch
|
||||
configSpaceSrcRect: Rect
|
||||
physicalSpaceDstRect: Rect
|
||||
parityMin?: number
|
||||
parityOffset?: number
|
||||
}
|
||||
|
||||
export class RectangleBatchRenderer {
|
||||
private command: regl.Command<RectangleBatchRendererProps>
|
||||
constructor(gl: regl.Instance) {
|
||||
// We draw the parity / 5 into the depth channel so it can be used in a
|
||||
// post-processing step to draw boundaries between rectangles. We use 5
|
||||
// different values (2 per row) + one for the background, so we can
|
||||
// distingish both between adjacent rectangles on a row and between rows!
|
||||
this.command = gl({
|
||||
vert: `
|
||||
uniform mat3 configSpaceToNDC;
|
||||
|
||||
// Non-instanced
|
||||
attribute vec2 corner;
|
||||
|
||||
// Instanced
|
||||
attribute vec2 configSpaceOffset;
|
||||
attribute vec2 configSpaceSize;
|
||||
attribute vec3 color;
|
||||
attribute float index;
|
||||
|
||||
varying vec3 vColor;
|
||||
|
||||
void main() {
|
||||
vColor = color;
|
||||
vec2 configSpacePos = configSpaceOffset + corner * configSpaceSize;
|
||||
vec2 position = (configSpaceToNDC * vec3(configSpacePos, 1)).xy;
|
||||
gl_Position = vec4(position, 1, 1);
|
||||
}
|
||||
`,
|
||||
|
||||
depth: {
|
||||
enable: false,
|
||||
},
|
||||
|
||||
frag: `
|
||||
precision mediump float;
|
||||
varying vec3 vColor;
|
||||
varying float vParity;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vec4(vColor.rgb, 1);
|
||||
}
|
||||
`,
|
||||
|
||||
attributes: {
|
||||
// Non-instanced attributes
|
||||
corner: gl.buffer([[0, 0], [1, 0], [0, 1], [1, 1]]),
|
||||
|
||||
// Instanced attributes
|
||||
configSpaceOffset: (context, props) => {
|
||||
return {
|
||||
buffer: props.batch.getConfigSpaceOffsetBuffer(),
|
||||
offset: 0,
|
||||
stride: 2 * 4,
|
||||
size: 2,
|
||||
divisor: 1,
|
||||
}
|
||||
},
|
||||
configSpaceSize: (context, props) => {
|
||||
return {
|
||||
buffer: props.batch.getConfigSpaceSizeBuffer(),
|
||||
offset: 0,
|
||||
stride: 2 * 4,
|
||||
size: 2,
|
||||
divisor: 1,
|
||||
}
|
||||
},
|
||||
color: (context, props) => {
|
||||
return {
|
||||
buffer: props.batch.getColorBuffer(),
|
||||
offset: 0,
|
||||
stride: 3 * 4,
|
||||
size: 3,
|
||||
divisor: 1,
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
uniforms: {
|
||||
configSpaceToNDC: (context, props) => {
|
||||
const configToPhysical = AffineTransform.betweenRects(
|
||||
props.configSpaceSrcRect,
|
||||
props.physicalSpaceDstRect,
|
||||
)
|
||||
|
||||
const viewportSize = new Vec2(context.viewportWidth, context.viewportHeight)
|
||||
|
||||
const physicalToNDC = AffineTransform.withTranslation(new Vec2(-1, 1)).times(
|
||||
AffineTransform.withScale(new Vec2(2, -2).dividedByPointwise(viewportSize)),
|
||||
)
|
||||
|
||||
return physicalToNDC.times(configToPhysical).flatten()
|
||||
},
|
||||
|
||||
parityOffset: (context, props) => {
|
||||
return props.parityOffset == null ? 0 : props.parityOffset
|
||||
},
|
||||
|
||||
parityMin: (context, props) => {
|
||||
return props.parityMin == null ? 0 : 1 + props.parityMin
|
||||
},
|
||||
},
|
||||
|
||||
instances: (context, props) => {
|
||||
return props.batch.getRectCount()
|
||||
},
|
||||
|
||||
count: 4,
|
||||
|
||||
primitive: 'triangle strip',
|
||||
})
|
||||
material: Graphics.Material
|
||||
constructor(private gl: Graphics.Context) {
|
||||
this.material = gl.createMaterial(vertexFormat, vert, frag)
|
||||
}
|
||||
|
||||
render(props: RectangleBatchRendererProps) {
|
||||
this.command(props)
|
||||
}
|
||||
setUniformAffineTransform(
|
||||
this.material,
|
||||
'configSpaceToNDC',
|
||||
(() => {
|
||||
const configToPhysical = AffineTransform.betweenRects(
|
||||
props.configSpaceSrcRect,
|
||||
props.physicalSpaceDstRect,
|
||||
)
|
||||
|
||||
resetStats() {
|
||||
return Object.assign(this.command.stats, {cpuTime: 0, gpuTime: 0, count: 0})
|
||||
}
|
||||
stats() {
|
||||
return this.command.stats
|
||||
const viewportSize = new Vec2(this.gl.viewport.width, this.gl.viewport.height)
|
||||
|
||||
const physicalToNDC = AffineTransform.withTranslation(new Vec2(-1, 1)).times(
|
||||
AffineTransform.withScale(new Vec2(2, -2).dividedByPointwise(viewportSize)),
|
||||
)
|
||||
|
||||
return physicalToNDC.times(configToPhysical)
|
||||
})(),
|
||||
)
|
||||
|
||||
this.gl.setUnpremultipliedBlendState()
|
||||
this.gl.draw(Graphics.Primitive.TRIANGLES, this.material, props.batch.getBuffer())
|
||||
}
|
||||
}
|
||||
|
||||
+24
-21
@@ -1,31 +1,34 @@
|
||||
import regl from 'regl'
|
||||
import {LRUCache} from '../lib/lru-cache'
|
||||
import {RectangleBatch} from './rectangle-batch-renderer'
|
||||
import {CanvasContext} from './canvas-context'
|
||||
import {RectangleBatch, RectangleBatchRenderer} from './rectangle-batch-renderer'
|
||||
import {Rect, Vec2} from '../lib/math'
|
||||
import {Color} from '../lib/color'
|
||||
import {Graphics} from './graphics'
|
||||
import {TextureRenderer} from './texture-renderer'
|
||||
import {renderInto} from './utils'
|
||||
|
||||
export class RowAtlas<K> {
|
||||
texture: regl.Texture
|
||||
private framebuffer: regl.Framebuffer
|
||||
private renderToFramebuffer: regl.Command<{}>
|
||||
private texture: Graphics.Texture
|
||||
private renderTarget: Graphics.RenderTarget
|
||||
private rowCache: LRUCache<K, number>
|
||||
private clearLineBatch: RectangleBatch
|
||||
|
||||
constructor(private canvasContext: CanvasContext) {
|
||||
this.texture = canvasContext.gl.texture({
|
||||
width: Math.min(canvasContext.getMaxTextureSize(), 4096),
|
||||
height: Math.min(canvasContext.getMaxTextureSize(), 4096),
|
||||
wrapS: 'clamp',
|
||||
wrapT: 'clamp',
|
||||
})
|
||||
this.framebuffer = canvasContext.gl.framebuffer({color: [this.texture]})
|
||||
constructor(
|
||||
private gl: Graphics.Context,
|
||||
private rectangleBatchRenderer: RectangleBatchRenderer,
|
||||
private textureRenderer: TextureRenderer,
|
||||
) {
|
||||
this.texture = gl.createTexture(Graphics.TextureFormat.NEAREST_CLAMP, 4096, 4096)
|
||||
this.renderTarget = gl.createRenderTarget(this.texture)
|
||||
this.rowCache = new LRUCache(this.texture.height)
|
||||
this.renderToFramebuffer = canvasContext.gl({
|
||||
framebuffer: this.framebuffer,
|
||||
})
|
||||
this.clearLineBatch = canvasContext.createRectangleBatch()
|
||||
this.clearLineBatch = new RectangleBatch(gl)
|
||||
this.clearLineBatch.addRect(Rect.unit, new Color(0, 0, 0, 0))
|
||||
|
||||
// All of the cached data is stored GPU-side, and we don't retain a copy of
|
||||
// it client-side. This means when we get a context loss event, the data is
|
||||
// totally gone. So let's clear our CPU-side cache to reflect that fact.
|
||||
gl.addContextResetHandler(() => {
|
||||
this.rowCache.clear()
|
||||
})
|
||||
}
|
||||
|
||||
has(key: K) {
|
||||
@@ -53,7 +56,7 @@ export class RowAtlas<K> {
|
||||
}
|
||||
|
||||
writeToAtlasIfNeeded(keys: K[], render: (textureDstRect: Rect, key: K) => void) {
|
||||
this.renderToFramebuffer((context: regl.Context) => {
|
||||
renderInto(this.gl, this.renderTarget, () => {
|
||||
for (let key of keys) {
|
||||
let row = this.rowCache.get(key)
|
||||
if (row != null) {
|
||||
@@ -64,7 +67,7 @@ export class RowAtlas<K> {
|
||||
row = this.allocateLine(key)
|
||||
|
||||
const textureRect = new Rect(new Vec2(0, row), new Vec2(this.texture.width, 1))
|
||||
this.canvasContext.drawRectangleBatch({
|
||||
this.rectangleBatchRenderer.render({
|
||||
batch: this.clearLineBatch,
|
||||
configSpaceSrcRect: Rect.unit,
|
||||
physicalSpaceDstRect: textureRect,
|
||||
@@ -84,7 +87,7 @@ export class RowAtlas<K> {
|
||||
|
||||
// At this point, we have the row in cache, and we can
|
||||
// paint directly from it into the framebuffer.
|
||||
this.canvasContext.drawTexture({
|
||||
this.textureRenderer.render({
|
||||
texture: this.texture,
|
||||
srcRect: textureRect,
|
||||
dstRect: dstRect,
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
import regl from 'regl'
|
||||
import {Vec2, Rect, AffineTransform} from '../lib/math'
|
||||
|
||||
export interface TextureRendererProps {
|
||||
texture: regl.Texture
|
||||
srcRect: Rect
|
||||
dstRect: Rect
|
||||
}
|
||||
|
||||
export class TextureRenderer {
|
||||
private command: regl.Command<TextureRendererProps>
|
||||
constructor(gl: regl.Instance) {
|
||||
this.command = gl({
|
||||
vert: `
|
||||
uniform mat3 uvTransform;
|
||||
uniform mat3 positionTransform;
|
||||
|
||||
attribute vec2 position;
|
||||
attribute vec2 uv;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
vUv = (uvTransform * vec3(uv, 1)).xy;
|
||||
gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
|
||||
}
|
||||
`,
|
||||
frag: `
|
||||
precision mediump float;
|
||||
|
||||
varying vec2 vUv;
|
||||
uniform sampler2D texture;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = texture2D(texture, vUv);
|
||||
}
|
||||
`,
|
||||
|
||||
depth: {
|
||||
enable: false,
|
||||
},
|
||||
|
||||
attributes: {
|
||||
// Cover full canvas with a rectangle
|
||||
// with 2 triangles using a triangle
|
||||
// strip.
|
||||
//
|
||||
// 0 +--+ 1
|
||||
// | /|
|
||||
// |/ |
|
||||
// 2 +--+ 3
|
||||
position: gl.buffer([[-1, 1], [1, 1], [-1, -1], [1, -1]]),
|
||||
uv: gl.buffer([[0, 1], [1, 1], [0, 0], [1, 0]]),
|
||||
},
|
||||
|
||||
uniforms: {
|
||||
texture: (context, props) => props.texture,
|
||||
uvTransform: (context, props) => {
|
||||
const {srcRect, texture} = props
|
||||
const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
|
||||
.times(AffineTransform.withScale(new Vec2(1, -1)))
|
||||
.times(
|
||||
AffineTransform.betweenRects(
|
||||
new Rect(Vec2.zero, new Vec2(texture.width, texture.height)),
|
||||
Rect.unit,
|
||||
),
|
||||
)
|
||||
const uvRect = physicalToUV.transformRect(srcRect)
|
||||
return AffineTransform.betweenRects(Rect.unit, uvRect).flatten()
|
||||
},
|
||||
positionTransform: (context, props) => {
|
||||
const {dstRect} = props
|
||||
|
||||
const viewportSize = new Vec2(context.viewportWidth, context.viewportHeight)
|
||||
|
||||
const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
|
||||
AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
|
||||
)
|
||||
const ndcRect = physicalToNDC.transformRect(dstRect)
|
||||
return AffineTransform.betweenRects(Rect.NDC, ndcRect).flatten()
|
||||
},
|
||||
},
|
||||
|
||||
primitive: 'triangle strip',
|
||||
|
||||
count: 4,
|
||||
})
|
||||
}
|
||||
|
||||
render(props: TextureRendererProps) {
|
||||
this.command(props)
|
||||
}
|
||||
|
||||
resetStats() {
|
||||
return Object.assign(this.command.stats, {cpuTime: 0, gpuTime: 0, count: 0})
|
||||
}
|
||||
stats() {
|
||||
return this.command.stats
|
||||
}
|
||||
}
|
||||
|
||||
export interface TextureCachedRendererOptions<T> {
|
||||
textureRenderer: TextureRenderer
|
||||
render(t: T): void
|
||||
shouldUpdate(oldProps: T, newProps: T): boolean
|
||||
}
|
||||
|
||||
export class TextureCachedRenderer<T> {
|
||||
private renderUncached: (t: T) => void
|
||||
private shouldUpdate: (oldProps: T, newProps: T) => boolean
|
||||
private texture: regl.Texture
|
||||
private framebuffer: regl.Framebuffer
|
||||
private textureRenderer: TextureRenderer
|
||||
private withContext: regl.Command<{}>
|
||||
|
||||
constructor(private gl: regl.Instance, options: TextureCachedRendererOptions<T>) {
|
||||
this.renderUncached = options.render
|
||||
this.shouldUpdate = options.shouldUpdate
|
||||
this.textureRenderer = options.textureRenderer
|
||||
|
||||
this.texture = gl.texture(1, 1)
|
||||
this.framebuffer = gl.framebuffer({color: [this.texture]})
|
||||
this.withContext = gl({})
|
||||
}
|
||||
|
||||
private lastRenderProps: T | null = null
|
||||
|
||||
private dirty: boolean = false
|
||||
setDirty() {
|
||||
this.dirty = true
|
||||
}
|
||||
|
||||
render(props: T) {
|
||||
this.withContext((context: regl.Context) => {
|
||||
let needsRender = false
|
||||
if (
|
||||
this.texture.width !== context.viewportWidth ||
|
||||
this.texture.height !== context.viewportHeight
|
||||
) {
|
||||
// TODO(jlfwong): Can probably just use this.framebuffer.resize
|
||||
this.texture({width: context.viewportWidth, height: context.viewportHeight})
|
||||
this.framebuffer({color: [this.texture]})
|
||||
needsRender = true
|
||||
} else if (this.lastRenderProps == null) {
|
||||
needsRender = true
|
||||
} else if (this.shouldUpdate(this.lastRenderProps, props)) {
|
||||
needsRender = true
|
||||
} else if (this.dirty) {
|
||||
needsRender = true
|
||||
}
|
||||
|
||||
if (needsRender) {
|
||||
this.gl({
|
||||
viewport: (context, props) => {
|
||||
return {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: context.viewportWidth,
|
||||
height: context.viewportHeight,
|
||||
}
|
||||
},
|
||||
framebuffer: this.framebuffer,
|
||||
})(() => {
|
||||
this.gl.clear({color: [0, 0, 0, 0]})
|
||||
this.renderUncached(props)
|
||||
})
|
||||
}
|
||||
|
||||
const glViewportRect = new Rect(
|
||||
Vec2.zero,
|
||||
new Vec2(context.viewportWidth, context.viewportHeight),
|
||||
)
|
||||
|
||||
// Render from texture
|
||||
this.textureRenderer.render({
|
||||
texture: this.texture,
|
||||
srcRect: glViewportRect,
|
||||
dstRect: glViewportRect,
|
||||
})
|
||||
this.lastRenderProps = props
|
||||
this.dirty = false
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
import {Vec2, Rect, AffineTransform} from '../lib/math'
|
||||
import {Graphics} from './graphics'
|
||||
import {setUniformAffineTransform} from './utils'
|
||||
|
||||
export interface TextureRendererProps {
|
||||
texture: Graphics.Texture
|
||||
srcRect: Rect
|
||||
dstRect: Rect
|
||||
}
|
||||
|
||||
const vert = `
|
||||
uniform mat3 uvTransform;
|
||||
uniform mat3 positionTransform;
|
||||
|
||||
attribute vec2 position;
|
||||
attribute vec2 uv;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
vUv = (uvTransform * vec3(uv, 1)).xy;
|
||||
gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
|
||||
}
|
||||
`
|
||||
|
||||
const frag = `
|
||||
precision mediump float;
|
||||
|
||||
varying vec2 vUv;
|
||||
uniform sampler2D texture;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = texture2D(texture, vUv);
|
||||
}
|
||||
`
|
||||
|
||||
export interface TextureRendererProps {
|
||||
texture: Graphics.Texture
|
||||
srcRect: Rect
|
||||
dstRect: Rect
|
||||
}
|
||||
|
||||
export class TextureRenderer {
|
||||
private buffer: Graphics.VertexBuffer
|
||||
private material: Graphics.Material
|
||||
|
||||
constructor(private gl: Graphics.Context) {
|
||||
const vertexFormat = new Graphics.VertexFormat()
|
||||
vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
|
||||
vertexFormat.add('uv', Graphics.AttributeType.FLOAT, 2)
|
||||
|
||||
const vertices = [
|
||||
{pos: [-1, 1], uv: [0, 1]},
|
||||
{pos: [1, 1], uv: [1, 1]},
|
||||
{pos: [-1, -1], uv: [0, 0]},
|
||||
{pos: [1, -1], uv: [1, 0]},
|
||||
]
|
||||
const floats: number[] = []
|
||||
for (let v of vertices) {
|
||||
floats.push(v.pos[0])
|
||||
floats.push(v.pos[1])
|
||||
floats.push(v.uv[0])
|
||||
floats.push(v.uv[1])
|
||||
}
|
||||
|
||||
this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
|
||||
this.buffer.upload(new Uint8Array(new Float32Array(floats).buffer))
|
||||
this.material = gl.createMaterial(vertexFormat, vert, frag)
|
||||
}
|
||||
|
||||
render(props: TextureRendererProps) {
|
||||
this.material.setUniformSampler('texture', props.texture, 0)
|
||||
setUniformAffineTransform(
|
||||
this.material,
|
||||
'uvTransform',
|
||||
(() => {
|
||||
const {srcRect, texture} = props
|
||||
const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
|
||||
.times(AffineTransform.withScale(new Vec2(1, -1)))
|
||||
.times(
|
||||
AffineTransform.betweenRects(
|
||||
new Rect(Vec2.zero, new Vec2(texture.width, texture.height)),
|
||||
Rect.unit,
|
||||
),
|
||||
)
|
||||
const uvRect = physicalToUV.transformRect(srcRect)
|
||||
return AffineTransform.betweenRects(Rect.unit, uvRect)
|
||||
})(),
|
||||
)
|
||||
setUniformAffineTransform(
|
||||
this.material,
|
||||
'positionTransform',
|
||||
(() => {
|
||||
const {dstRect} = props
|
||||
|
||||
const {viewport} = this.gl
|
||||
const viewportSize = new Vec2(viewport.width, viewport.height)
|
||||
|
||||
const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
|
||||
AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
|
||||
)
|
||||
const ndcRect = physicalToNDC.transformRect(dstRect)
|
||||
return AffineTransform.betweenRects(Rect.NDC, ndcRect)
|
||||
})(),
|
||||
)
|
||||
|
||||
this.gl.setUnpremultipliedBlendState()
|
||||
this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import {Graphics} from './graphics'
|
||||
import {AffineTransform, Vec2} from '../lib/math'
|
||||
|
||||
export function setUniformAffineTransform(
|
||||
material: Graphics.Material,
|
||||
name: string,
|
||||
transform: AffineTransform,
|
||||
) {
|
||||
let {m00, m01, m02, m10, m11, m12} = transform
|
||||
material.setUniformMat3(name, m00, m01, m02, m10, m11, m12, 0, 0, 1)
|
||||
}
|
||||
export function setUniformVec2(material: Graphics.Material, name: string, vec: Vec2) {
|
||||
material.setUniformVec2(name, vec.x, vec.y)
|
||||
}
|
||||
|
||||
export function renderInto(gl: Graphics.Context, target: Graphics.RenderTarget, cb: () => void) {
|
||||
gl.setRenderTarget(target)
|
||||
gl.setViewport(0, 0, target.texture.width, target.texture.height)
|
||||
cb()
|
||||
gl.setRenderTarget(null)
|
||||
}
|
||||
@@ -3866,24 +3866,6 @@ Object {
|
||||
"selfWeight": 0,
|
||||
"totalWeight": 9020084,
|
||||
},
|
||||
Frame {
|
||||
"col": undefined,
|
||||
"file": undefined,
|
||||
"key": "null:dyld::paths_expand_roots(char const**, char const*, char const*)",
|
||||
"line": undefined,
|
||||
"name": "dyld::paths_expand_roots(char const**, char const*, char const*)",
|
||||
"selfWeight": 0,
|
||||
"totalWeight": 0,
|
||||
},
|
||||
Frame {
|
||||
"col": undefined,
|
||||
"file": undefined,
|
||||
"key": "null:strlen",
|
||||
"line": undefined,
|
||||
"name": "strlen",
|
||||
"selfWeight": 0,
|
||||
"totalWeight": 0,
|
||||
},
|
||||
Frame {
|
||||
"col": undefined,
|
||||
"file": undefined,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,12 +19,15 @@ function parseBGFoldedStacks(contents: string): BGSample[] {
|
||||
return samples
|
||||
}
|
||||
|
||||
export function importFromBGFlameGraph(contents: string): Profile {
|
||||
export function importFromBGFlameGraph(contents: string): Profile | null {
|
||||
const parsed = parseBGFoldedStacks(contents)
|
||||
const duration = parsed.reduce((prev: number, cur: BGSample) => prev + cur.duration, 0)
|
||||
const profile = new StackListProfileBuilder(duration)
|
||||
if (parsed.length === 0) {
|
||||
return null
|
||||
}
|
||||
for (let sample of parsed) {
|
||||
profile.appendSample(sample.stack, sample.duration)
|
||||
profile.appendSampleWithWeight(sample.stack, sample.duration)
|
||||
}
|
||||
return profile.build()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import {importProfileGroup} from '.'
|
||||
|
||||
test('importProfileGroup', async () => {
|
||||
// Importing garbage should return null
|
||||
expect(await importProfileGroup('unknown', '')).toBe(null)
|
||||
expect(await importProfileGroup('unknown', 'Hello world')).toBe(null)
|
||||
expect(await importProfileGroup('unknown', 'Hello\n\nWorld')).toBe(null)
|
||||
})
|
||||
@@ -8,6 +8,7 @@ import {importFromBGFlameGraph} from './bg-flamegraph'
|
||||
import {importFromFirefox} from './firefox'
|
||||
import {importSpeedscopeProfiles} from '../lib/file-format'
|
||||
import {importFromV8ProfLog} from './v8proflog'
|
||||
import {importFromLinuxPerf} from './linux-tools-perf'
|
||||
|
||||
export async function importProfileGroup(
|
||||
fileName: string,
|
||||
@@ -53,6 +54,9 @@ async function _importProfileGroup(
|
||||
} else if (fileName.endsWith('.instruments.txt')) {
|
||||
console.log('Importing as Instruments.app deep copy')
|
||||
return toGroup(importFromInstrumentsDeepCopy(contents))
|
||||
} else if (fileName.endsWith('.linux-perf.txt')) {
|
||||
console.log('Importing as output of linux perf script')
|
||||
return importFromLinuxPerf(contents)
|
||||
} else if (fileName.endsWith('.collapsedstack.txt')) {
|
||||
console.log('Importing as collapsed stack format')
|
||||
return toGroup(importFromBGFlameGraph(contents))
|
||||
@@ -103,6 +107,12 @@ async function _importProfileGroup(
|
||||
console.log('Importing as collapsed stack format')
|
||||
return toGroup(importFromBGFlameGraph(contents))
|
||||
}
|
||||
|
||||
const fromLinuxPerf = importFromLinuxPerf(contents)
|
||||
if (fromLinuxPerf) {
|
||||
console.log('Importing from linux perf script output')
|
||||
return fromLinuxPerf
|
||||
}
|
||||
}
|
||||
|
||||
// Unrecognized format
|
||||
|
||||
@@ -579,7 +579,7 @@ export function importThreadFromInstrumentsTrace(args: {
|
||||
if (lastTimestamp === null) {
|
||||
// The first sample is sometimes fairly late in the profile for some reason.
|
||||
// We'll just say nothing was known to be on the stack in that time.
|
||||
profile.appendSample([], sample.timestamp)
|
||||
profile.appendSampleWithWeight([], sample.timestamp)
|
||||
lastTimestamp = sample.timestamp
|
||||
}
|
||||
|
||||
@@ -587,7 +587,7 @@ export function importThreadFromInstrumentsTrace(args: {
|
||||
throw new Error('Timestamps out of order!')
|
||||
}
|
||||
|
||||
profile.appendSample(stackForSample, sample.timestamp - lastTimestamp)
|
||||
profile.appendSampleWithWeight(stackForSample, sample.timestamp - lastTimestamp)
|
||||
lastTimestamp = sample.timestamp
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import {checkProfileSnapshot} from '../lib/test-utils'
|
||||
|
||||
describe('importFromLinuxPerf', async () => {
|
||||
test('simple.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/simple.linux-perf.txt')
|
||||
})
|
||||
test('one-sample.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/one-sample.linux-perf.txt')
|
||||
})
|
||||
test('forks.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/forks.linux-perf.txt')
|
||||
})
|
||||
test('simple-with-header.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/simple-with-header.linux-perf.txt')
|
||||
})
|
||||
test('simple-with-pids.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/simple-with-pid.linux-perf.txt')
|
||||
})
|
||||
test('system-wide.linux-perf.txt', async () => {
|
||||
await checkProfileSnapshot('./sample/profiles/linux-perf/system-wide.linux-perf.txt')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,130 @@
|
||||
import {StackListProfileBuilder, ProfileGroup} from '../lib/profile'
|
||||
import {itMap, getOrInsert} from '../lib/utils'
|
||||
import {TimeFormatter} from '../lib/value-formatters'
|
||||
|
||||
// This imports the output of the "perf script" command on linux.
|
||||
//
|
||||
// Reference: https://github.com/torvalds/linux/blob/0fbc4aea/tools/perf/builtin-script.c#L1622
|
||||
// Reference: https://github.com/brendangregg/FlameGraph/blob/18c3dea/stackcollapse-perf.pl#L163
|
||||
|
||||
interface PerfStackFrame {
|
||||
address: string
|
||||
symbolName: string
|
||||
file: string
|
||||
}
|
||||
|
||||
interface PerfEvent {
|
||||
command: string | null
|
||||
processID: number | null
|
||||
threadID: number | null
|
||||
time: number | null
|
||||
eventType: string
|
||||
stack: PerfStackFrame[]
|
||||
}
|
||||
|
||||
function parseEvent(rawEvent: string): PerfEvent | null {
|
||||
const lines = rawEvent.split('\n').filter(l => !/^\s*#/.exec(l))
|
||||
|
||||
const event: PerfEvent = {
|
||||
command: null,
|
||||
processID: null,
|
||||
threadID: null,
|
||||
time: null,
|
||||
eventType: '',
|
||||
stack: [],
|
||||
}
|
||||
|
||||
const firstLine = lines.shift()
|
||||
if (!firstLine) return null
|
||||
|
||||
// Note: command name may contain spaces, e.g.
|
||||
//
|
||||
// V8 WorkerThread 25607 4794564.109216: cycles:
|
||||
const eventStartMatch = /^(\S.+?)\s+(\d+)(?:\/?(\d+))?\s+/.exec(firstLine)
|
||||
if (!eventStartMatch) return null
|
||||
|
||||
event.command = eventStartMatch[1]
|
||||
|
||||
// default "perf script" output has TID but not PID
|
||||
if (eventStartMatch[3]) {
|
||||
event.processID = parseInt(eventStartMatch[2], 10)
|
||||
event.threadID = parseInt(eventStartMatch[3], 10)
|
||||
} else {
|
||||
event.threadID = parseInt(eventStartMatch[2], 10)
|
||||
}
|
||||
|
||||
const timeMatch = /\s+(\d+\.\d+):\s+/.exec(firstLine)
|
||||
if (timeMatch) {
|
||||
event.time = parseFloat(timeMatch[1])
|
||||
}
|
||||
|
||||
const evName = /(\S+):\s*$/.exec(firstLine)
|
||||
if (evName) {
|
||||
event.eventType = evName[1]
|
||||
}
|
||||
|
||||
for (let line of lines) {
|
||||
const lineMatch = /^\s*(\w+)\s*(.+) \((\S*)\)/.exec(line)
|
||||
if (!lineMatch) continue
|
||||
let [, address, symbolName, file] = lineMatch
|
||||
|
||||
// Linux 4.8 included symbol offsets in perf script output by default, eg:
|
||||
// 7fffb84c9afc cpu_startup_entry+0x800047c022ec ([kernel.kallsyms])
|
||||
// strip these off:
|
||||
symbolName = symbolName.replace(/\+0x[\da-f]+$/, '')
|
||||
|
||||
event.stack.push({address: `0x${address}`, symbolName, file})
|
||||
}
|
||||
event.stack.reverse()
|
||||
|
||||
return event
|
||||
}
|
||||
|
||||
export function importFromLinuxPerf(contents: string): ProfileGroup | null {
|
||||
const profiles = new Map<string, StackListProfileBuilder>()
|
||||
|
||||
let eventType: string | null = null
|
||||
const events = contents.split('\n\n').map(parseEvent)
|
||||
|
||||
for (let event of events) {
|
||||
if (event == null) continue
|
||||
if (eventType != null && eventType != event.eventType) continue
|
||||
if (event.time == null) continue
|
||||
eventType = event.eventType
|
||||
|
||||
let profileNameParts = []
|
||||
if (event.command) profileNameParts.push(event.command)
|
||||
if (event.processID) profileNameParts.push(`pid: ${event.processID}`)
|
||||
if (event.threadID) profileNameParts.push(`tid: ${event.threadID}`)
|
||||
const profileName = profileNameParts.join(' ')
|
||||
const builderState = getOrInsert(profiles, profileName, () => {
|
||||
const builder = new StackListProfileBuilder()
|
||||
builder.setName(profileName)
|
||||
builder.setValueFormatter(new TimeFormatter('seconds'))
|
||||
return builder
|
||||
})
|
||||
|
||||
const builder = builderState
|
||||
|
||||
builder.appendSampleWithTimestamp(
|
||||
event.stack.map(({symbolName, file}) => {
|
||||
return {
|
||||
key: `${symbolName} (${file})`,
|
||||
name: symbolName === '[unknown]' ? `??? (${file})` : symbolName,
|
||||
file: file,
|
||||
}
|
||||
}),
|
||||
event.time!,
|
||||
)
|
||||
}
|
||||
|
||||
if (profiles.size === 0) {
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
name: profiles.size === 1 ? Array.from(profiles.keys())[0] : '',
|
||||
indexToView: 0,
|
||||
profiles: Array.from(itMap(profiles.values(), builder => builder.build())),
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ export function importFromStackprof(stackprofProfile: StackprofProfile): Profile
|
||||
sampleDuration += raw_timestamp_deltas[sampleIndex++]
|
||||
}
|
||||
|
||||
profile.appendSample(stack, sampleDuration)
|
||||
profile.appendSampleWithWeight(stack, sampleDuration)
|
||||
prevStack = stack
|
||||
}
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ export function importFromV8ProfLog(v8log: V8LogProfile): Profile {
|
||||
}
|
||||
stack.push(getFrameInfo(id))
|
||||
}
|
||||
profile.appendSample(stack, tick.tm - lastTm)
|
||||
profile.appendSampleWithWeight(stack, tick.tm - lastTm)
|
||||
lastTm = tick.tm
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ function importSpeedscopeProfile(
|
||||
for (let i = 0; i < samples.length; i++) {
|
||||
const stack = samples[i]
|
||||
const weight = weights[i]
|
||||
profile.appendSample(stack.map(n => frameInfos[n]), weight)
|
||||
profile.appendSampleWithWeight(stack.map(n => frameInfos[n]), weight)
|
||||
}
|
||||
|
||||
return profile.build()
|
||||
|
||||
@@ -159,4 +159,9 @@ export class LRUCache<K, V> {
|
||||
this.map.delete(key)
|
||||
return [key, value]
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.list = new List<K>()
|
||||
this.map = new Map<K, LRUCacheNode<K, V>>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,9 +147,9 @@ test('StackListProfileBuilder', () => {
|
||||
]
|
||||
|
||||
samples.forEach(stack => {
|
||||
b.appendSample(stack, 1)
|
||||
b.appendSampleWithWeight(stack, 1)
|
||||
})
|
||||
b.appendSample([], 4)
|
||||
b.appendSampleWithWeight([], 4)
|
||||
|
||||
const profile = b.build()
|
||||
expect(profile.getTotalWeight()).toBe(samples.length + 4)
|
||||
@@ -170,9 +170,9 @@ test('StackListProfileBuilder separates non-contiguous', () => {
|
||||
]
|
||||
|
||||
samples.forEach(stack => {
|
||||
b.appendSample(stack, 1)
|
||||
b.appendSampleWithWeight(stack, 1)
|
||||
})
|
||||
b.appendSample([], 4)
|
||||
b.appendSampleWithWeight([], 4)
|
||||
const profile = b.build()
|
||||
|
||||
expect(toTreeString(profile, true)).toMatchSnapshot('grouped')
|
||||
@@ -251,7 +251,7 @@ test('getInvertedProfileForCallersOf', () => {
|
||||
[fd, fb],
|
||||
]
|
||||
samples.forEach(stack => {
|
||||
b.appendSample(stack, 1)
|
||||
b.appendSampleWithWeight(stack, 1)
|
||||
})
|
||||
|
||||
const profile = b.build()
|
||||
@@ -279,7 +279,7 @@ test('getProfileForCalleesOf', () => {
|
||||
[fd, fb],
|
||||
]
|
||||
samples.forEach(stack => {
|
||||
b.appendSample(stack, 1)
|
||||
b.appendSampleWithWeight(stack, 1)
|
||||
})
|
||||
|
||||
const profile = b.build()
|
||||
@@ -305,7 +305,7 @@ test('getProfileWithRecursionFlattened', () => {
|
||||
[fa, fb, fa],
|
||||
]
|
||||
samples.forEach(stack => {
|
||||
b.appendSample(stack, 1)
|
||||
b.appendSampleWithWeight(stack, 1)
|
||||
})
|
||||
|
||||
const profile = b.build()
|
||||
|
||||
+51
-5
@@ -337,7 +337,7 @@ export class Profile {
|
||||
for (let n: CallTreeNode | null = node; n != null && n.frame !== Frame.root; n = n.parent) {
|
||||
stack.push(n.frame)
|
||||
}
|
||||
builder.appendSample(stack, node.getTotalWeight())
|
||||
builder.appendSampleWithWeight(stack, node.getTotalWeight())
|
||||
}
|
||||
|
||||
const ret = builder.build()
|
||||
@@ -355,7 +355,7 @@ export class Profile {
|
||||
|
||||
function visit(node: CallTreeNode) {
|
||||
stack.push(node.frame)
|
||||
builder.appendSample(stack, node.getSelfWeight())
|
||||
builder.appendSampleWithWeight(stack, node.getSelfWeight())
|
||||
for (let child of node.children) {
|
||||
visit(child)
|
||||
}
|
||||
@@ -450,17 +450,63 @@ export class StackListProfileBuilder extends Profile {
|
||||
frame.addToTotalWeight(weight)
|
||||
}
|
||||
|
||||
this.samples.push(node)
|
||||
this.weights.push(weight)
|
||||
if (node === lastOf(this.samples)) {
|
||||
this.weights[this.weights.length - 1] += weight
|
||||
} else {
|
||||
this.samples.push(node)
|
||||
this.weights.push(weight)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
appendSample(stack: FrameInfo[], weight: number) {
|
||||
appendSampleWithWeight(stack: FrameInfo[], weight: number) {
|
||||
if (weight === 0) {
|
||||
// Samples with zero weight have no effect, so let's ignore them
|
||||
return
|
||||
}
|
||||
if (weight < 0) {
|
||||
throw new Error('Samples must have positive weights')
|
||||
}
|
||||
|
||||
this._appendSample(stack, weight, true)
|
||||
this._appendSample(stack, weight, false)
|
||||
}
|
||||
|
||||
private pendingSample: {
|
||||
stack: FrameInfo[]
|
||||
startTimestamp: number
|
||||
centralTimestamp: number
|
||||
} | null = null
|
||||
appendSampleWithTimestamp(stack: FrameInfo[], timestamp: number) {
|
||||
if (this.pendingSample) {
|
||||
if (timestamp < this.pendingSample.centralTimestamp) {
|
||||
throw new Error('Timestamps received out of order')
|
||||
}
|
||||
const endTimestamp = (timestamp + this.pendingSample.centralTimestamp) / 2
|
||||
this.appendSampleWithWeight(
|
||||
this.pendingSample.stack,
|
||||
endTimestamp - this.pendingSample.startTimestamp,
|
||||
)
|
||||
this.pendingSample = {stack, startTimestamp: endTimestamp, centralTimestamp: timestamp}
|
||||
} else {
|
||||
this.pendingSample = {stack, startTimestamp: timestamp, centralTimestamp: timestamp}
|
||||
}
|
||||
}
|
||||
|
||||
build(): Profile {
|
||||
if (this.pendingSample) {
|
||||
if (this.samples.length > 0) {
|
||||
this.appendSampleWithWeight(
|
||||
this.pendingSample.stack,
|
||||
this.pendingSample.centralTimestamp - this.pendingSample.startTimestamp,
|
||||
)
|
||||
} else {
|
||||
// There is only a single sample. In this case, units will be meaningless,
|
||||
// so we'll append with a weight of 1 and also clear any value formatter
|
||||
this.appendSampleWithWeight(this.pendingSample.stack, 1)
|
||||
this.setValueFormatter(new RawValueFormatter())
|
||||
}
|
||||
}
|
||||
this.totalWeight = Math.max(this.totalWeight, this.weights.reduce((a, b) => a + b, 0))
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -33,7 +33,11 @@ export const getCanvasContext = memoizeByReference((canvas: HTMLCanvasElement) =
|
||||
})
|
||||
|
||||
export const getRowAtlas = memoizeByReference((canvasContext: CanvasContext) => {
|
||||
return new RowAtlas<FlamechartRowAtlasKey>(canvasContext)
|
||||
return new RowAtlas<FlamechartRowAtlasKey>(
|
||||
canvasContext.gl,
|
||||
canvasContext.rectangleBatchRenderer,
|
||||
canvasContext.textureRenderer,
|
||||
)
|
||||
})
|
||||
|
||||
export const getProfileWithRecursionFlattened = memoizeByReference((profile: Profile) =>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as fs from 'fs'
|
||||
|
||||
import {Store, AnyAction} from '../../node_modules/redux'
|
||||
import {Store, AnyAction} from 'redux'
|
||||
import {ApplicationState, createApplicationStore} from '.'
|
||||
import {importSpeedscopeProfiles} from '../lib/file-format'
|
||||
|
||||
|
||||
Vendored
-589
@@ -1,589 +0,0 @@
|
||||
declare module 'regl' {
|
||||
interface InitializationOptions {
|
||||
/** A reference to a WebGL rendering context. (Default created from canvas) */
|
||||
gl?: WebGLRenderingContext
|
||||
/** A reference to an HTML canvas element. (Default created and appending to container) */
|
||||
canvas?: HTMLCanvasElement | string
|
||||
/** A container element which regl inserts a canvas into. (Default document.body) */
|
||||
container?: HTMLElement | string
|
||||
/** The context creation attributes passed to the WebGL context constructor. See below for defaults. */
|
||||
attributes?: {
|
||||
/** Boolean that indicates if the canvas contains an alpha buffer. */
|
||||
alpha?: boolean
|
||||
/** Boolean that indicates that the drawing buffer has a depth buffer of at least 16 bits. */
|
||||
depth?: boolean
|
||||
/** Boolean that indicates that the drawing buffer has a stencil buffer of at least 8 bits. */
|
||||
stencil?: boolean
|
||||
/** Boolean that indicates whether or not to perform anti-aliasing. */
|
||||
antialias?: boolean
|
||||
/** Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha. */
|
||||
premultipliedAlpha?: boolean
|
||||
/** If the value is true the buffers will not be cleared and will preserve their values until cleared or overwritten by the author. */
|
||||
preserveDrawingBuffer?: boolean
|
||||
/** Boolean that indicates if a context will be created if the system performance is low. */
|
||||
failIfMajorPerformanceCavet?: boolean
|
||||
}
|
||||
/** A multiplier which is used to scale the canvas size relative to the container. (Default window.devicePixelRatio) */
|
||||
pixelRatio?: number
|
||||
/** A list of extensions that must be supported by WebGL context. Default [] */
|
||||
extensions?: string[] | string
|
||||
/** A list of extensions which are loaded opportunistically. Default [] */
|
||||
optionalExtensions?: string[] | string
|
||||
/** If set, turns on profiling for all commands by default. (Default false) */
|
||||
profile?: boolean
|
||||
/**
|
||||
* An optional callback which accepts a pair of arguments, (err, regl) that
|
||||
* is called after the application loads. If not specified, context creation
|
||||
* errors throw.
|
||||
*/
|
||||
onDone?: (err: Error, regl: regl.Instance) => void
|
||||
}
|
||||
function regl(options: InitializationOptions): regl.Instance
|
||||
|
||||
/** Create fullscreen canvas */
|
||||
function regl(): regl.Instance
|
||||
|
||||
/** Build from an existing canvas */
|
||||
function regl(canvas: HTMLCanvasElement): regl.Instance
|
||||
|
||||
/** Build from an existing div container */
|
||||
function regl(container: HTMLElement): regl.Instance
|
||||
|
||||
/** Build from an existing WebGL context */
|
||||
function regl(gl: WebGLRenderingContext): regl.Instance
|
||||
|
||||
namespace regl {
|
||||
export type vec2 = [number, number]
|
||||
export type vec3 = [number, number, number]
|
||||
export type vec4 = [number, number, number, number]
|
||||
export type mat3 = [number, number, number, number, number, number, number, number, number]
|
||||
export type mat4 = [
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number,
|
||||
number
|
||||
]
|
||||
type GlslPrimitive = number | vec2 | vec3 | vec4 | mat3 | mat4
|
||||
|
||||
interface Tick {
|
||||
cancel(): void
|
||||
}
|
||||
|
||||
interface Instance {
|
||||
<P>(params: CommandOptions<P>): Command<P>
|
||||
|
||||
clear(args: {
|
||||
color?: [number, number, number, number]
|
||||
depth?: number
|
||||
stencil?: number
|
||||
}): void
|
||||
|
||||
// TODO(jlfwong): read()
|
||||
|
||||
buffer(args: BufferArgs): Buffer
|
||||
texture(width: number, height: number): Texture
|
||||
texture(args: TextureArgs): Texture
|
||||
framebuffer(args: FramebufferOptions): Framebuffer
|
||||
renderbuffer(args: RenderBufferOptions): RenderBuffer
|
||||
|
||||
limits: {
|
||||
colorBits: [number, number, number, number]
|
||||
depthBits: number
|
||||
stencilBits: number
|
||||
subpixelBits: number
|
||||
extensions: string[]
|
||||
maxAnistropic: number
|
||||
maxDrawbuffers: number
|
||||
maxColorAttachments: number
|
||||
pointSizeDims: number
|
||||
lineWidthDims: number
|
||||
maxViewportDims: number
|
||||
maxCombinedTextureUnits: number
|
||||
maxCubeMapSize: number
|
||||
maxTextureUnits: number
|
||||
maxTextureSize: number
|
||||
maxAttributes: number
|
||||
maxVertexUniforms: number
|
||||
maxVertexTextureUnits: number
|
||||
maxFragmentUniforms: number
|
||||
glsl: string
|
||||
renderer: string
|
||||
vendor: string
|
||||
version: string
|
||||
}
|
||||
|
||||
stats: {
|
||||
bufferCount: number
|
||||
elementsCount: number
|
||||
framebufferCount: number
|
||||
shaderCount: number
|
||||
textureCount: number
|
||||
cubeCount: number
|
||||
renderbufferCount: number
|
||||
getTotalTextureSize(): number
|
||||
getTotalBufferSize(): number
|
||||
getTotalRenderbufferSize(): number
|
||||
getMaxUniformsCount(): number
|
||||
maxTextureUnits(): number
|
||||
}
|
||||
|
||||
destroy(): void
|
||||
|
||||
frame(callback: (context: Context) => void): Tick
|
||||
}
|
||||
|
||||
type TypedArray =
|
||||
| Int8Array
|
||||
| Uint8Array
|
||||
| Uint8ClampedArray
|
||||
| Int16Array
|
||||
| Uint16Array
|
||||
| Int32Array
|
||||
| Uint32Array
|
||||
| Float32Array
|
||||
| Float64Array
|
||||
|
||||
type DrawMode =
|
||||
| 'points'
|
||||
| 'lines'
|
||||
| 'line strip'
|
||||
| 'line loop'
|
||||
| 'triangles'
|
||||
| 'triangle strip'
|
||||
| 'triangle fan'
|
||||
|
||||
interface Context {
|
||||
tick: number
|
||||
time: number
|
||||
viewportWidth: number
|
||||
viewportHeight: number
|
||||
framebufferWidth: number
|
||||
framebufferHeight: number
|
||||
drawingBufferWidth: number
|
||||
drawingBufferHeight: number
|
||||
pixelRatio: number
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
interface BufferOptions {
|
||||
data?: TypedArray | GlslPrimitive[]
|
||||
|
||||
/** If data is null or not present reserves space for the buffer */
|
||||
length?: number
|
||||
|
||||
/** Sets array buffer usage hint */
|
||||
usage?: 'static' | 'dynamic' | 'stream'
|
||||
}
|
||||
type BufferArgs = number | number[] | vec2[] | vec3[] | mat3[] | TypedArray | BufferOptions
|
||||
interface Buffer {
|
||||
(args: BufferArgs): void
|
||||
stats: {
|
||||
size: number
|
||||
}
|
||||
destroy(): void
|
||||
}
|
||||
|
||||
interface ElementsOptions {
|
||||
data?: TypedArray
|
||||
usage?: 'static' | 'dynamic' | 'stream'
|
||||
length?: number
|
||||
primitive?: GlslPrimitive
|
||||
count?: number
|
||||
}
|
||||
type ElementsArgs = vec3[] | ElementsOptions
|
||||
interface Elements {
|
||||
(args: ElementsArgs): void
|
||||
destroy(): void
|
||||
}
|
||||
|
||||
type MagFilter = 'nearest' | 'linear'
|
||||
type MinFilter =
|
||||
| 'nearest'
|
||||
| 'linear'
|
||||
| 'mipmap'
|
||||
| 'linear mipmap linear'
|
||||
| 'nearest mipmap linear'
|
||||
| 'nearest mipmap nearest'
|
||||
type WrapMode = 'repeat' | 'clamp' | 'mirror'
|
||||
type TextureFormat =
|
||||
| 'alpha'
|
||||
| 'luminance'
|
||||
| 'luminance alpha'
|
||||
| 'rgb'
|
||||
| 'rgba'
|
||||
| 'rgba4'
|
||||
| 'rgb5 a1'
|
||||
| 'rgb565'
|
||||
| 'srgb'
|
||||
| 'srgba'
|
||||
| 'depth'
|
||||
| 'depth stencil'
|
||||
| 'rgb s3tc dxt1'
|
||||
| 'rgb s3tc dxt5'
|
||||
| 'rgb atc'
|
||||
| 'rgba atc explicit alpha'
|
||||
| 'rgba atc interpolated alpha'
|
||||
| 'rgb pvrtc 4bppv1'
|
||||
| 'rgb pvrtc 2bppv1'
|
||||
| 'rgba pvrtc 4bppv1'
|
||||
| 'rgba pvrtc 2bppv1'
|
||||
| 'rgb etc1'
|
||||
type TextureType = 'uint8' | 'uint16' | 'float' | 'float32' | 'half float' | 'float16'
|
||||
type ColorSpace = 'none' | 'browser'
|
||||
type MipmapHint = "don't care" | 'dont care' | 'nice' | 'fast'
|
||||
|
||||
type TextureData =
|
||||
| number[]
|
||||
| number[][]
|
||||
| TypedArray
|
||||
| HTMLImageElement
|
||||
| HTMLVideoElement
|
||||
| HTMLCanvasElement
|
||||
| CanvasRenderingContext2D
|
||||
interface TextureOptions {
|
||||
width?: number
|
||||
height?: number
|
||||
shape?: [number, number] | [number, number, number]
|
||||
radius?: number
|
||||
|
||||
/** Sets magnification filter */
|
||||
mag?: MagFilter
|
||||
/** Sets minification filter */
|
||||
min?: MinFilter
|
||||
/** Sets wrap mode on S axis */
|
||||
wrapS?: WrapMode
|
||||
/** Sets wrap mode on T axis */
|
||||
wrapT?: WrapMode
|
||||
/** Sets number of anisotropic samples, requires EXT_texture_filter_anisotropic */
|
||||
aniso?: number
|
||||
format?: TextureFormat
|
||||
type?: TextureType
|
||||
mipmap?: MipmapHint | boolean
|
||||
/** Flips textures vertically when uploading */
|
||||
flipY?: boolean
|
||||
/** Sets unpack alignment per pixel */
|
||||
alignment?: number
|
||||
/** Premultiply alpha when unpacking */
|
||||
premultiplyAlpha?: boolean
|
||||
colorSpace?: ColorSpace
|
||||
|
||||
copy?: boolean
|
||||
|
||||
data?: TextureData
|
||||
}
|
||||
type TextureArgs = TextureData | TextureOptions
|
||||
interface Texture {
|
||||
width: number
|
||||
height: number
|
||||
|
||||
(args: TextureArgs): void
|
||||
resize(width: number, height: number): void
|
||||
destroy(): void
|
||||
stats: {
|
||||
size: number
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(jlfwong): Cube maps
|
||||
// TODO(jlfwong): Cubic frame buffers
|
||||
|
||||
interface RenderBufferOptions {
|
||||
format?:
|
||||
| 'rgba4'
|
||||
| 'rgb565'
|
||||
| 'rgb5 a1'
|
||||
| 'depth'
|
||||
| 'stencil'
|
||||
| 'depth stencil'
|
||||
| 'srgba'
|
||||
| 'rgba16f'
|
||||
| 'rgb16f'
|
||||
| 'rgba32f'
|
||||
width?: number
|
||||
height?: number
|
||||
shape?: [number, number]
|
||||
radius?: number
|
||||
}
|
||||
interface RenderBuffer {
|
||||
(options: RenderBufferOptions): void
|
||||
resize(width: number, height: number): void
|
||||
destroy(): void
|
||||
stats: {
|
||||
size: number
|
||||
}
|
||||
}
|
||||
|
||||
interface FramebufferOptions {
|
||||
width?: number
|
||||
height?: number
|
||||
shape?: [number, number]
|
||||
color?: RenderBuffer[] | Texture[]
|
||||
depth?: boolean | RenderBuffer | Texture
|
||||
stencil?: boolean | RenderBuffer | Texture
|
||||
depthStencil?: boolean | RenderBuffer | Texture
|
||||
colorFormat?:
|
||||
| 'rgba'
|
||||
| 'rgba4'
|
||||
| 'rgb565'
|
||||
| 'rgb5 a1'
|
||||
| 'rgb16f'
|
||||
| 'rgba16f'
|
||||
| 'rgba32f'
|
||||
| 'srgba'
|
||||
colorType?: 'uint8' | 'half float' | 'float'
|
||||
}
|
||||
interface Framebuffer {
|
||||
width: number
|
||||
height: number
|
||||
color?: RenderBuffer[]
|
||||
depth?: RenderBuffer
|
||||
|
||||
(options: FramebufferOptions): void
|
||||
use(cb: (context: Context) => void): void
|
||||
resize(width: number, height: number): void
|
||||
destroy(): void
|
||||
}
|
||||
|
||||
type Uniform = number | vec2 | vec3 | mat3 | Texture
|
||||
|
||||
interface AttributeOptions {
|
||||
buffer?: Buffer | BufferArgs
|
||||
offset?: number
|
||||
stride?: number
|
||||
normalized?: boolean
|
||||
size?: number
|
||||
divisor?: number
|
||||
}
|
||||
type Attribute =
|
||||
| AttributeOptions
|
||||
| Buffer
|
||||
| BufferArgs
|
||||
| {constant: number | vec2 | vec3 | vec4 | mat3 | mat4}
|
||||
|
||||
interface Computed<P, T> {
|
||||
(context: Context, props: P, batchId: number): T
|
||||
}
|
||||
type MaybeComputed<P, T> = Computed<P, T> | T
|
||||
|
||||
type DepthFunction =
|
||||
| 'never'
|
||||
| 'always'
|
||||
| '<'
|
||||
| 'less'
|
||||
| '<='
|
||||
| 'lequal'
|
||||
| '>'
|
||||
| 'greater'
|
||||
| '>='
|
||||
| 'gequal'
|
||||
| '='
|
||||
| 'equal'
|
||||
| '!='
|
||||
| 'notequal'
|
||||
type BlendFunction =
|
||||
| 0
|
||||
| 'zero'
|
||||
| 1
|
||||
| 'one'
|
||||
| 'src color'
|
||||
| 'one minus src color'
|
||||
| 'src alpha'
|
||||
| 'one minus src alpha'
|
||||
| 'dst color'
|
||||
| 'one minus dst color'
|
||||
| 'dst alpha'
|
||||
| 'one minus dst alpha'
|
||||
| 'constant color'
|
||||
| 'one minus constant color'
|
||||
| 'one minus constant alpha'
|
||||
| 'src alpha saturate'
|
||||
type BlendEquation = 'add' | 'subtract' | 'reverse subtract' | 'min' | 'max'
|
||||
type StencilFunction = DepthFunction
|
||||
type StencilOp =
|
||||
| 'zero'
|
||||
| 'keep'
|
||||
| 'replace'
|
||||
| 'invert'
|
||||
| 'increment'
|
||||
| 'decrement'
|
||||
| 'increment wrap'
|
||||
| 'decrement wrap'
|
||||
interface CommandOptions<P> {
|
||||
/** Source code of vertex shader */
|
||||
vert?: string
|
||||
|
||||
/** Source code of fragment shader */
|
||||
frag?: string
|
||||
|
||||
context?: {[contextName: string]: MaybeComputed<P, any>}
|
||||
|
||||
uniforms?: {[uniformName: string]: MaybeComputed<P, Uniform>}
|
||||
|
||||
attributes?: {[attributeName: string]: MaybeComputed<P, Attribute>}
|
||||
|
||||
primitive?: DrawMode
|
||||
|
||||
/** Number of vertices to draw */
|
||||
count?: MaybeComputed<P, number>
|
||||
|
||||
/** Offset of primitives to draw */
|
||||
offset?: MaybeComputed<P, number>
|
||||
|
||||
/** Number of instances to render */
|
||||
instances?: MaybeComputed<P, number>
|
||||
|
||||
/** Element array buffer */
|
||||
elements?: MaybeComputed<P, Elements | ElementsArgs>
|
||||
|
||||
framebuffer?: MaybeComputed<P, Framebuffer>
|
||||
|
||||
profile?: MaybeComputed<P, boolean>
|
||||
|
||||
depth?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
mask?: boolean
|
||||
func?: DepthFunction
|
||||
range?: [number, number]
|
||||
}
|
||||
>
|
||||
|
||||
blend?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
func?:
|
||||
| {
|
||||
src: BlendFunction
|
||||
dst: BlendFunction
|
||||
}
|
||||
| {
|
||||
srcRGB: BlendFunction
|
||||
srcAlpha: BlendFunction
|
||||
dstRGB: BlendFunction
|
||||
dstAlpha: BlendFunction
|
||||
}
|
||||
equation?:
|
||||
| BlendEquation
|
||||
| {
|
||||
rgb: BlendEquation
|
||||
alpha: BlendEquation
|
||||
}
|
||||
color?: vec4
|
||||
}
|
||||
>
|
||||
|
||||
stencil?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
mask?: number
|
||||
func?: StencilFunction
|
||||
opFront?: {fail: StencilOp; zfail: StencilOp; pass: StencilOp}
|
||||
opBack?: {fail: StencilOp; zfail: StencilOp; pass: StencilOp}
|
||||
}
|
||||
>
|
||||
|
||||
polygonOffset?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
offset?: {
|
||||
factor: number
|
||||
units: number
|
||||
}
|
||||
}
|
||||
>
|
||||
|
||||
cull?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
face?: 'front' | 'back'
|
||||
}
|
||||
>
|
||||
|
||||
frontFace?: MaybeComputed<P, 'cw' | 'ccw'>
|
||||
|
||||
dither?: MaybeComputed<P, boolean>
|
||||
|
||||
lineWidth?: MaybeComputed<P, number>
|
||||
|
||||
colorMask?: MaybeComputed<P, [boolean, boolean, boolean, boolean]>
|
||||
|
||||
sample?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
alpha?: boolean
|
||||
coverage?: {
|
||||
value: number
|
||||
invert: boolean
|
||||
}
|
||||
}
|
||||
>
|
||||
|
||||
scissor?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
enable?: boolean
|
||||
box?: {
|
||||
x: number
|
||||
y: number
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
}
|
||||
>
|
||||
|
||||
viewport?: MaybeComputed<
|
||||
P,
|
||||
{
|
||||
x: number
|
||||
y: number
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
>
|
||||
}
|
||||
|
||||
function prop<P>(name: keyof P): (context: Context, props: P, batchId: number) => P[keyof P]
|
||||
function context<P>(
|
||||
name: keyof Context,
|
||||
): (context: Context, props: P, batchId: number) => Context[keyof Context]
|
||||
|
||||
interface Command<P> {
|
||||
/** One shot rendering */
|
||||
(): void
|
||||
(p: P): void
|
||||
|
||||
/** Render a batch */
|
||||
(ps: P[]): void
|
||||
|
||||
/** Scoped commands */
|
||||
(cb: (context: Context) => void): void
|
||||
(p: P, cb: (context: Context) => void): void
|
||||
|
||||
stats: {
|
||||
gpuTime: number
|
||||
cpuTime: number
|
||||
hitCount: number
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default regl
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
import {createContainer, Dispatch, bindActionCreator, ActionCreator} from '../lib/typed-redux'
|
||||
import {Application, ActiveProfileState} from './application'
|
||||
import {ApplicationState} from '../store'
|
||||
import {getProfileToView} from '../store/getters'
|
||||
import {getProfileToView, getCanvasContext} from '../store/getters'
|
||||
import {actions} from '../store/actions'
|
||||
import {Graphics} from '../gl/graphics'
|
||||
|
||||
export const ApplicationContainer = createContainer(
|
||||
Application,
|
||||
@@ -26,6 +27,8 @@ export const ApplicationContainer = createContainer(
|
||||
return bindActionCreator(dispatch, actionCreator)
|
||||
}
|
||||
|
||||
// TODO(jlfwong): Cache this and resizeCanvas below to prevent re-renders
|
||||
// due to changing props.
|
||||
const setters = {
|
||||
setGLCanvas: wrapActionCreator(actions.setGLCanvas),
|
||||
setLoading: wrapActionCreator(actions.setLoading),
|
||||
@@ -40,6 +43,18 @@ export const ApplicationContainer = createContainer(
|
||||
return {
|
||||
activeProfileState,
|
||||
dispatch,
|
||||
resizeCanvas: (
|
||||
widthInPixels: number,
|
||||
heightInPixels: number,
|
||||
widthInAppUnits: number,
|
||||
heightInAppUnits: number,
|
||||
) => {
|
||||
if (state.glCanvas) {
|
||||
const gl = getCanvasContext(state.glCanvas).gl
|
||||
gl.resize(widthInPixels, heightInPixels, widthInAppUnits, heightInAppUnits)
|
||||
gl.clear(new Graphics.Color(1, 1, 1, 1))
|
||||
}
|
||||
},
|
||||
...setters,
|
||||
...state,
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import {StatelessComponent} from '../lib/typed-redux'
|
||||
import {LeftHeavyFlamechartView, ChronoFlamechartView} from './flamechart-view-container'
|
||||
import {SandwichViewState} from '../store/sandwich-view-state'
|
||||
import {FlamechartViewState} from '../store/flamechart-view-state'
|
||||
import {Graphics} from '../gl/graphics'
|
||||
|
||||
const importModule = import('../import')
|
||||
// Force eager loading of the module
|
||||
@@ -168,6 +169,7 @@ export class Toolbar extends StatelessComponent<ToolbarProps> {
|
||||
}
|
||||
|
||||
interface GLCanvasProps {
|
||||
resizeCanvas: typeof Graphics.Context.prototype.resize
|
||||
setGLCanvas: (canvas: HTMLCanvasElement | null) => void
|
||||
}
|
||||
export class GLCanvas extends Component<GLCanvasProps, void> {
|
||||
@@ -197,8 +199,12 @@ export class GLCanvas extends Component<GLCanvasProps, void> {
|
||||
// Already at the right size
|
||||
if (width === oldWidth && height === oldHeight) return
|
||||
|
||||
this.canvas.width = width
|
||||
this.canvas.height = height
|
||||
this.props.resizeCanvas(
|
||||
width,
|
||||
height,
|
||||
width / window.devicePixelRatio,
|
||||
height / window.devicePixelRatio,
|
||||
)
|
||||
}
|
||||
|
||||
onWindowResize = () => {
|
||||
@@ -226,6 +232,7 @@ export interface ActiveProfileState {
|
||||
}
|
||||
|
||||
export type ApplicationProps = ApplicationState & {
|
||||
resizeCanvas: typeof Graphics.Context.prototype.resize
|
||||
setGLCanvas: (canvas: HTMLCanvasElement | null) => void
|
||||
setLoading: (loading: boolean) => void
|
||||
setError: (error: boolean) => void
|
||||
@@ -608,7 +615,7 @@ export class Application extends StatelessComponent<ApplicationProps> {
|
||||
onDragLeave={this.onDragLeave}
|
||||
className={css(style.root, this.props.dragActive && style.dragTargetRoot)}
|
||||
>
|
||||
<GLCanvas setGLCanvas={this.props.setGLCanvas} />
|
||||
<GLCanvas setGLCanvas={this.props.setGLCanvas} resizeCanvas={this.props.resizeCanvas} />
|
||||
<Toolbar
|
||||
saveFile={this.saveFile}
|
||||
browseForFile={this.browseForFile}
|
||||
|
||||
@@ -6,7 +6,6 @@ import {FlamechartRenderer} from '../gl/flamechart-renderer'
|
||||
import {style} from './flamechart-style'
|
||||
import {FontFamily, FontSize, Colors, Sizes, commonStyle} from './style'
|
||||
import {CanvasContext} from '../gl/canvas-context'
|
||||
import {TextureCachedRenderer} from '../gl/texture-cached-renderer'
|
||||
import {cachedMeasureTextWidth} from '../lib/text-utils'
|
||||
|
||||
interface FlamechartMinimapViewProps {
|
||||
@@ -71,45 +70,13 @@ export class FlamechartMinimapView extends Component<FlamechartMinimapViewProps,
|
||||
return AffineTransform.withTranslation(new Vec2(-bounds.left, -bounds.top))
|
||||
}
|
||||
|
||||
private cachedRenderer: TextureCachedRenderer<{
|
||||
physicalSize: Vec2
|
||||
}> | null = null
|
||||
private renderRects() {
|
||||
if (!this.container) return
|
||||
|
||||
// Hasn't resized yet -- no point in rendering yet
|
||||
if (this.physicalViewSize().x < 2) return
|
||||
|
||||
if (!this.cachedRenderer) {
|
||||
this.cachedRenderer = this.props.canvasContext.createTextureCachedRenderer({
|
||||
shouldUpdate(oldProps, newProps) {
|
||||
if (!oldProps.physicalSize.equals(newProps.physicalSize)) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
render: props => {
|
||||
this.props.flamechartRenderer.render({
|
||||
physicalSpaceDstRect: new Rect(
|
||||
this.minimapOrigin(),
|
||||
this.physicalViewSize().minus(this.minimapOrigin()),
|
||||
),
|
||||
configSpaceSrcRect: new Rect(new Vec2(0, 0), this.configSpaceSize()),
|
||||
renderOutlines: false,
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
this.props.canvasContext.renderInto(this.container, context => {
|
||||
// TODO(jlfwong): Switch back to the texture cached renderer once I figure out
|
||||
// how to resize a framebuffer while another framebuffer is active. It seems
|
||||
// to crash regl. I should submit a reduced repro case and hopefully get it fixed?
|
||||
/*
|
||||
this.cachedRenderer!.render({
|
||||
physicalSize: this.physicalViewSize()
|
||||
})
|
||||
*/
|
||||
this.props.canvasContext.renderBehind(this.container, () => {
|
||||
this.props.flamechartRenderer.render({
|
||||
configSpaceSrcRect: new Rect(new Vec2(0, 0), this.configSpaceSize()),
|
||||
physicalSpaceDstRect: new Rect(
|
||||
@@ -118,7 +85,8 @@ export class FlamechartMinimapView extends Component<FlamechartMinimapViewProps,
|
||||
),
|
||||
renderOutlines: false,
|
||||
})
|
||||
this.props.canvasContext.drawViewportRectangle({
|
||||
|
||||
this.props.canvasContext.viewportRectangleRenderer.render({
|
||||
configSpaceViewportRect: this.props.configSpaceViewportRect,
|
||||
configSpaceToPhysicalViewSpace: this.configSpaceToPhysicalViewSpace(),
|
||||
})
|
||||
@@ -190,9 +158,6 @@ export class FlamechartMinimapView extends Component<FlamechartMinimapViewProps,
|
||||
|
||||
componentWillReceiveProps(nextProps: FlamechartMinimapViewProps) {
|
||||
if (this.props.flamechart !== nextProps.flamechart) {
|
||||
if (this.cachedRenderer) {
|
||||
this.cachedRenderer.setDirty()
|
||||
}
|
||||
this.renderCanvas()
|
||||
} else if (this.props.configSpaceViewportRect != nextProps.configSpaceViewportRect) {
|
||||
this.renderCanvas()
|
||||
@@ -409,7 +374,7 @@ export class FlamechartMinimapView extends Component<FlamechartMinimapViewProps,
|
||||
}
|
||||
}
|
||||
|
||||
private onMouseLeave = (ev: MouseEvent) => {
|
||||
private onMouseLeave = () => {
|
||||
if (this.draggingMode == null) {
|
||||
document.body.style.cursor = 'default'
|
||||
}
|
||||
|
||||
@@ -227,22 +227,24 @@ export class FlamechartPanZoomView extends Component<FlamechartPanZoomViewProps,
|
||||
)
|
||||
}
|
||||
|
||||
const trimmedText = trimTextMid(
|
||||
ctx,
|
||||
frame.node.frame.name,
|
||||
physicalLabelBounds.width() - 2 * LABEL_PADDING_PX,
|
||||
)
|
||||
if (physicalLabelBounds.width() > minWidthToRender) {
|
||||
const trimmedText = trimTextMid(
|
||||
ctx,
|
||||
frame.node.frame.name,
|
||||
physicalLabelBounds.width() - 2 * LABEL_PADDING_PX,
|
||||
)
|
||||
|
||||
// Note that this is specifying the position of the starting text
|
||||
// baseline.
|
||||
ctx.fillText(
|
||||
trimmedText,
|
||||
physicalLabelBounds.left() + LABEL_PADDING_PX,
|
||||
Math.round(
|
||||
physicalLabelBounds.bottom() -
|
||||
(physicalViewSpaceFrameHeight - physicalViewSpaceFontSize) / 2,
|
||||
),
|
||||
)
|
||||
// Note that this is specifying the position of the starting text
|
||||
// baseline.
|
||||
ctx.fillText(
|
||||
trimmedText,
|
||||
physicalLabelBounds.left() + LABEL_PADDING_PX,
|
||||
Math.round(
|
||||
physicalLabelBounds.bottom() -
|
||||
(physicalViewSpaceFrameHeight - physicalViewSpaceFontSize) / 2,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
for (let child of frame.children) {
|
||||
renderFrameLabelAndChildren(child, depth + 1)
|
||||
@@ -410,7 +412,7 @@ export class FlamechartPanZoomView extends Component<FlamechartPanZoomViewProps,
|
||||
|
||||
if (this.props.configSpaceViewportRect.isEmpty()) return
|
||||
|
||||
this.props.canvasContext.renderInto(this.container, context => {
|
||||
this.props.canvasContext.renderBehind(this.container, () => {
|
||||
this.props.flamechartRenderer.render({
|
||||
physicalSpaceDstRect: this.physicalBounds(),
|
||||
configSpaceSrcRect: this.props.configSpaceViewportRect,
|
||||
|
||||
@@ -103,7 +103,14 @@ export const createMemoizedFlamechartRenderer = (options?: FlamechartRendererOpt
|
||||
canvasContext: CanvasContext
|
||||
flamechart: Flamechart
|
||||
}): FlamechartRenderer => {
|
||||
return new FlamechartRenderer(canvasContext, getRowAtlas(canvasContext), flamechart, options)
|
||||
return new FlamechartRenderer(
|
||||
canvasContext.gl,
|
||||
getRowAtlas(canvasContext),
|
||||
flamechart,
|
||||
canvasContext.rectangleBatchRenderer,
|
||||
canvasContext.flamechartColorPassRenderer,
|
||||
options,
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user