bricks-cli
Version:
Command line tool for developing ambitious ember.js apps
68 lines (51 loc) • 1.69 kB
JavaScript
module.exports.printSlowTrees = printSlowTrees
function printSlowTrees(graph, factor) {
var sortedTrees = sortResults(graph)
var minimumTime = graph.totalTime * (factor || 0.05)
var logLines = []
for (var i = 0; i < sortedTrees.length; i++) {
var node = sortedTrees[i]
var name = node.tree.description || node.tree.constructor.name
if (node.selfTime > minimumTime) {
logLines.push(pad(name, 30) + ' | ' + pad(Math.floor(node.selfTime / 1e6) + 'ms', 15))
}
}
if (logLines.length > 0) {
logLines.unshift(pad('', 30, '-') + '-+-' + pad('', 15, '-'))
logLines.unshift(pad('Slowest Trees', 30) + ' | ' + pad('Total', 15))
}
console.log('\n' + logLines.join('\n') + '\n')
}
function sortResults(graph) {
var flattenedTrees = []
function process(node) {
if (flattenedTrees.indexOf(node) > -1) { return } // for de-duping
flattenedTrees.push(node)
var length = node.subtrees.length
for (var i = 0; i < length; i++) {
process(node.subtrees[i])
}
}
process(graph) // kick off with the top item
return flattenedTrees.sort(function(a, b) {
return b.selfTime - a.selfTime
})
}
function pad(str, len, char, dir) {
if (!char) { char = ' '}
if (len + 1 >= str.length)
switch (dir){
case 'left':
str = Array(len + 1 - str.length).join(char) + str
break
case 'both':
var padlen = len - str.length
var right = Math.ceil(padlen / 2)
var left = padlen - right
str = Array(left + 1).join(char) + str + Array(right + 1).join(char)
break
default:
str = str + Array(len + 1 - str.length).join(char)
}
return str
}