22
33const { sun, linux, windows, v8 } = require ( './platform' )
44const debug = require ( 'debug' ) ( '0x' )
5- const { join, isAbsolute, relative } = require ( 'path' )
5+ const { join, isAbsolute, relative, dirname } = require ( 'path' )
66const fs = require ( 'fs' )
77const validate = require ( './lib/validate' ) ( require ( './schema.json' ) )
88const traceStacksToTicks = require ( './lib/trace-stacks-to-ticks' )
@@ -26,11 +26,18 @@ async function zeroEks (args) {
2626
2727 validate ( args )
2828 const { collectOnly, visualizeOnly, writeTicks, treeDebug, mapFrames } = args
29- if ( collectOnly && visualizeOnly ) {
30- throw Error ( '"collect only" and "visualize only" cannot be used together' )
29+
30+ let incompatibleOptions = 0
31+ if ( collectOnly ) incompatibleOptions += 1
32+ if ( visualizeOnly ) incompatibleOptions += 1
33+ if ( visualizeV8Profile ) incompatibleOptions += 1
34+
35+ if ( incompatibleOptions > 1 ) {
36+ throw Error ( 'Only one of "collect only", "visualize only", "visualize v8 profile" can be used' )
3137 }
3238
3339 if ( visualizeOnly ) return visualize ( args )
40+ if ( visualizeV8Profile ) return visualizeV8Profile ( args )
3441
3542 args . title = args . title || `node ${ args . argv . join ( ' ' ) } `
3643 var { ticks, pid, folder, inlined } = await startProcessAndCollectTraceData ( args )
@@ -97,11 +104,21 @@ async function generateFlamegraph (opts) {
97104 return file
98105}
99106
107+ function getFolder ( file , workingDir ) {
108+ return isAbsolute ( file )
109+ ? relative ( workingDir , file )
110+ : file
111+ }
112+
113+ async function visualizeV8Profile ( opts ) {
114+ const folder = dirname ( opts . visualizeV8Profile )
115+ const file = await render ( { ...opts , folder } )
116+ return file
117+ }
118+
100119async function visualize ( { visualizeOnly, treeDebug, workingDir, title, mapFrames, open, name, pathToNodeBinary } ) {
101120 try {
102- const folder = isAbsolute ( visualizeOnly )
103- ? relative ( workingDir , visualizeOnly )
104- : visualizeOnly
121+ const folder = getFolder ( visualizeOnly , workingDir )
105122 const ls = fs . readdirSync ( folder )
106123 const traceFile = / ^ s t a c k s \. ( .* ) \. o u t $ /
107124 const isolateLog = / ^ i s o l a t e - ( ( 0 x ) ? [ 0 - 9 A - F a - f ] { 2 , 16 } ) - ( .* ) - v 8 \. ( l o g | j s o n ) $ /
0 commit comments