mirror of https://github.com/status-im/metro.git
Move systrace helper out of the packager
Summary: @public The profiler helper shouldn't live inside the packager itself, move it to the packager.js file with other middlewares. Reviewed By: @martinbigio Differential Revision: D2424878
This commit is contained in:
parent
b59784573b
commit
91e235465b
46
packager.js
46
packager.js
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var execFile = require('child_process').execFile;
|
var childProcess = require('child_process');
|
||||||
var http = require('http');
|
var http = require('http');
|
||||||
var isAbsolutePath = require('absolute-path');
|
var isAbsolutePath = require('absolute-path');
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ function getDevToolsLauncher(options) {
|
||||||
var debuggerURL = 'http://localhost:' + options.port + '/debugger-ui';
|
var debuggerURL = 'http://localhost:' + options.port + '/debugger-ui';
|
||||||
var script = 'launchChromeDevTools.applescript';
|
var script = 'launchChromeDevTools.applescript';
|
||||||
console.log('Launching Dev Tools...');
|
console.log('Launching Dev Tools...');
|
||||||
execFile(path.join(__dirname, script), [debuggerURL], function(err, stdout, stderr) {
|
childProcess.execFile(path.join(__dirname, script), [debuggerURL], function(err, stdout, stderr) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.log('Failed to run ' + script, err);
|
console.log('Failed to run ' + script, err);
|
||||||
}
|
}
|
||||||
|
@ -223,6 +223,47 @@ function statusPageMiddleware(req, res, next) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function systraceProfileMiddleware(req, res, next) {
|
||||||
|
if (req.url !== '/profile') {
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Dumping profile information...');
|
||||||
|
const dumpName = '/tmp/dump_' + Date.now() + '.json';
|
||||||
|
const prefix = process.env.TRACE_VIEWER_PATH || '';
|
||||||
|
const cmd = path.join(prefix, 'trace2html') + ' ' + dumpName;
|
||||||
|
fs.writeFileSync(dumpName, req.rawBody);
|
||||||
|
childProcess.exec(cmd, function(error) {
|
||||||
|
if (error) {
|
||||||
|
if (error.code === 127) {
|
||||||
|
console.error(
|
||||||
|
'\n** Failed executing `' + cmd + '` **\n\n' +
|
||||||
|
'Google trace-viewer is required to visualize the data, do you have it installled?\n\n' +
|
||||||
|
'You can get it at:\n\n' +
|
||||||
|
' https://github.com/google/trace-viewer\n\n' +
|
||||||
|
'If it\'s not in your path, you can set a custom path with:\n\n' +
|
||||||
|
' TRACE_VIEWER_PATH=/path/to/trace-viewer\n\n' +
|
||||||
|
'NOTE: Your profile data was kept at:\n\n' +
|
||||||
|
' ' + dumpName
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.error('Unknown error', error);
|
||||||
|
}
|
||||||
|
res.end();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
childProcess.exec('rm ' + dumpName);
|
||||||
|
childProcess.exec('open ' + dumpName.replace(/json$/, 'html'), function(err) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getAppMiddleware(options) {
|
function getAppMiddleware(options) {
|
||||||
var transformerPath = options.transformer;
|
var transformerPath = options.transformer;
|
||||||
if (!isAbsolutePath(transformerPath)) {
|
if (!isAbsolutePath(transformerPath)) {
|
||||||
|
@ -255,6 +296,7 @@ function runServer(
|
||||||
.use(openStackFrameInEditor)
|
.use(openStackFrameInEditor)
|
||||||
.use(getDevToolsLauncher(options))
|
.use(getDevToolsLauncher(options))
|
||||||
.use(statusPageMiddleware)
|
.use(statusPageMiddleware)
|
||||||
|
.use(systraceProfileMiddleware)
|
||||||
// Temporarily disable flow check until it's more stable
|
// Temporarily disable flow check until it's more stable
|
||||||
//.use(getFlowTypeCheckMiddleware(options))
|
//.use(getFlowTypeCheckMiddleware(options))
|
||||||
.use(getAppMiddleware(options));
|
.use(getAppMiddleware(options));
|
||||||
|
|
|
@ -16,8 +16,6 @@ const Promise = require('promise');
|
||||||
|
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
const declareOpts = require('../lib/declareOpts');
|
const declareOpts = require('../lib/declareOpts');
|
||||||
const exec = require('child_process').exec;
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const url = require('url');
|
const url = require('url');
|
||||||
|
|
||||||
|
@ -290,42 +288,6 @@ class Server {
|
||||||
).done(() => Activity.endEvent(assetEvent));
|
).done(() => Activity.endEvent(assetEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
_processProfile(req, res) {
|
|
||||||
console.log('Dumping profile information...');
|
|
||||||
const dumpName = '/tmp/dump_' + Date.now() + '.json';
|
|
||||||
const prefix = process.env.TRACE_VIEWER_PATH || '';
|
|
||||||
const cmd = path.join(prefix, 'trace2html') + ' ' + dumpName;
|
|
||||||
fs.writeFileSync(dumpName, req.rawBody);
|
|
||||||
exec(cmd, error => {
|
|
||||||
if (error) {
|
|
||||||
if (error.code === 127) {
|
|
||||||
console.error(
|
|
||||||
'\n** Failed executing `' + cmd + '` **\n\n' +
|
|
||||||
'Google trace-viewer is required to visualize the data, do you have it installled?\n\n' +
|
|
||||||
'You can get it at:\n\n' +
|
|
||||||
' https://github.com/google/trace-viewer\n\n' +
|
|
||||||
'If it\'s not in your path, you can set a custom path with:\n\n' +
|
|
||||||
' TRACE_VIEWER_PATH=/path/to/trace-viewer\n\n' +
|
|
||||||
'NOTE: Your profile data was kept at:\n\n' +
|
|
||||||
' ' + dumpName
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
console.error('Unknown error', error);
|
|
||||||
}
|
|
||||||
res.end();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
exec('rm ' + dumpName);
|
|
||||||
exec('open ' + dumpName.replace(/json$/, 'html'), err => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
res.end();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
processRequest(req, res, next) {
|
processRequest(req, res, next) {
|
||||||
const urlObj = url.parse(req.url, true);
|
const urlObj = url.parse(req.url, true);
|
||||||
var pathname = urlObj.pathname;
|
var pathname = urlObj.pathname;
|
||||||
|
@ -346,9 +308,6 @@ class Server {
|
||||||
} else if (pathname.match(/^\/assets\//)) {
|
} else if (pathname.match(/^\/assets\//)) {
|
||||||
this._processAssetsRequest(req, res);
|
this._processAssetsRequest(req, res);
|
||||||
return;
|
return;
|
||||||
} else if (pathname.match(/^\/profile\/?$/)) {
|
|
||||||
this._processProfile(req, res);
|
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue