|
1 | | -const { b } = require("./colours"); |
| 1 | +const MS_IN_MINUTE = 60000; |
| 2 | +const MS_IN_SECOND = 1000; |
| 3 | + |
| 4 | +const { fg, bg } = require("./colours"); |
2 | 5 | const { groupBy, getAverages, getTotalActiveTime } = require("./utils"); |
3 | 6 |
|
4 | | -const humanTime = ms => { |
5 | | - const hours = ms / 3600000; |
6 | | - const minutes = ms / 60000; |
7 | | - const seconds = ms / 1000; |
| 7 | +const humanTime = (ms, options = {}) => { |
| 8 | + if (options.verbose) { |
| 9 | + return ms.toLocaleString() + " ms"; |
| 10 | + } |
| 11 | + |
| 12 | + const minutes = Math.floor(ms / MS_IN_MINUTE); |
| 13 | + const secondsRaw = (ms - minutes * MS_IN_MINUTE) / MS_IN_SECOND; |
| 14 | + const secondsWhole = Math.floor(secondsRaw); |
| 15 | + const remainderPrecision = secondsWhole > 0 ? 2 : 3; |
| 16 | + const secondsRemainder = Math.min(secondsRaw - secondsWhole, 0.99); |
| 17 | + const seconds = |
| 18 | + secondsWhole + |
| 19 | + secondsRemainder |
| 20 | + .toPrecision(remainderPrecision) |
| 21 | + .replace(/^0/, "") |
| 22 | + .replace(/0+$/, "") |
| 23 | + .replace(/^\.$/, ""); |
| 24 | + |
| 25 | + let time = ""; |
| 26 | + |
| 27 | + if (minutes > 0) time += minutes + " mins, "; |
| 28 | + time += seconds + " secs"; |
8 | 29 |
|
9 | | - if (hours > 0.5) return hours.toFixed(2) + " hours"; |
10 | | - if (minutes > 0.5) return minutes.toFixed(2) + " minutes"; |
11 | | - if (seconds > 0.5) return seconds.toFixed(2) + " seconds"; |
12 | | - return ms.toFixed(0) + " milliseconds"; |
| 30 | + return time; |
13 | 31 | }; |
14 | 32 |
|
15 | | -module.exports.getHumanOutput = outputObj => { |
16 | | - const delim = "----------------------------"; |
17 | | - let output = delim + "\n"; |
| 33 | +module.exports.getHumanOutput = (outputObj, options = {}) => { |
| 34 | + const hT = x => humanTime(x, options); |
| 35 | + const smpTag = bg(" SMP ") + " ⏱ "; |
| 36 | + let output = "\n\n" + smpTag + "\n"; |
18 | 37 |
|
19 | 38 | if (outputObj.misc) { |
20 | 39 | output += |
21 | 40 | "General output time took " + |
22 | | - b(humanTime(outputObj.misc.compileTime), outputObj.misc.compileTime); |
| 41 | + fg(hT(outputObj.misc.compileTime, options), outputObj.misc.compileTime); |
23 | 42 | output += "\n\n"; |
24 | 43 | } |
25 | 44 | if (outputObj.plugins) { |
26 | | - Object.keys(outputObj.plugins).forEach(pluginName => { |
27 | | - output += |
28 | | - b(pluginName) + |
29 | | - " took " + |
30 | | - b( |
31 | | - humanTime(outputObj.plugins[pluginName]), |
32 | | - outputObj.plugins[pluginName] |
33 | | - ); |
34 | | - output += "\n"; |
35 | | - }); |
| 45 | + output += smpTag + " Plugins\n"; |
| 46 | + Object.keys(outputObj.plugins) |
| 47 | + .sort( |
| 48 | + (name1, name2) => outputObj.plugins[name2] - outputObj.plugins[name1] |
| 49 | + ) |
| 50 | + .forEach(pluginName => { |
| 51 | + output += |
| 52 | + fg(pluginName) + |
| 53 | + " took " + |
| 54 | + fg(hT(outputObj.plugins[pluginName]), outputObj.plugins[pluginName]); |
| 55 | + output += "\n"; |
| 56 | + }); |
36 | 57 | output += "\n"; |
37 | 58 | } |
38 | 59 | if (outputObj.loaders) { |
39 | | - outputObj.loaders.build.forEach(loaderObj => { |
40 | | - output += |
41 | | - loaderObj.loaders.map(b).join(", and \n") + |
42 | | - " took " + |
43 | | - b(humanTime(loaderObj.activeTime), loaderObj.activeTime); |
44 | | - output += "\n"; |
45 | | - output += |
46 | | - " median = " + humanTime(loaderObj.averages.median) + ",\n"; |
47 | | - output += |
48 | | - " mean = " + humanTime(loaderObj.averages.mean) + ",\n"; |
49 | | - if (typeof loaderObj.averages.variance === "number") |
| 60 | + output += smpTag + " Loaders\n"; |
| 61 | + outputObj.loaders.build |
| 62 | + .sort((obj1, obj2) => obj2.activeTime - obj1.activeTime) |
| 63 | + .forEach(loaderObj => { |
50 | 64 | output += |
51 | | - " s.d = " + |
52 | | - humanTime(Math.sqrt(loaderObj.averages.variance)) + |
53 | | - ", \n"; |
54 | | - output += |
55 | | - " range = (" + |
56 | | - humanTime(loaderObj.averages.range.start) + |
57 | | - ", " + |
58 | | - humanTime(loaderObj.averages.range.end) + |
59 | | - "), \n"; |
60 | | - output += " module count = " + loaderObj.averages.dataPoints + "\n"; |
61 | | - }); |
| 65 | + loaderObj.loaders.map(fg).join(", and \n") + |
| 66 | + " took " + |
| 67 | + fg(hT(loaderObj.activeTime), loaderObj.activeTime) + |
| 68 | + "\n"; |
| 69 | + |
| 70 | + if (options.verbose) { |
| 71 | + output += |
| 72 | + " median = " + hT(loaderObj.averages.median) + ",\n"; |
| 73 | + output += " mean = " + hT(loaderObj.averages.mean) + ",\n"; |
| 74 | + if (typeof loaderObj.averages.variance === "number") |
| 75 | + output += |
| 76 | + " s.d = " + |
| 77 | + hT(Math.sqrt(loaderObj.averages.variance)) + |
| 78 | + ", \n"; |
| 79 | + output += |
| 80 | + " range = (" + |
| 81 | + hT(loaderObj.averages.range.start) + |
| 82 | + " --> " + |
| 83 | + hT(loaderObj.averages.range.end) + |
| 84 | + "), \n"; |
| 85 | + } |
| 86 | + |
| 87 | + output += " module count = " + loaderObj.averages.dataPoints + "\n"; |
| 88 | + }); |
62 | 89 | } |
63 | 90 |
|
64 | | - output += delim + "\n"; |
| 91 | + output += "\n\n"; |
65 | 92 |
|
66 | 93 | return output; |
67 | 94 | }; |
|
0 commit comments