mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-10 10:17:11 +03:00
74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
/** @babel */
|
|
|
|
import Chart from 'chart.js'
|
|
import glob from 'glob'
|
|
import fs from 'fs-plus'
|
|
import path from 'path'
|
|
|
|
export default async function ({test, benchmarkPaths}) {
|
|
document.body.style.backgroundColor = '#ffffff'
|
|
document.body.style.overflow = 'auto'
|
|
|
|
let paths = []
|
|
for (const benchmarkPath of benchmarkPaths) {
|
|
if (fs.isDirectorySync(benchmarkPath)) {
|
|
paths = paths.concat(glob.sync(path.join(benchmarkPath, '**', '*.bench.js')))
|
|
} else {
|
|
paths.push(benchmarkPath)
|
|
}
|
|
}
|
|
|
|
while (paths.length > 0) {
|
|
const benchmark = require(paths.shift())({test})
|
|
let results
|
|
if (benchmark instanceof Promise) {
|
|
results = await benchmark
|
|
} else {
|
|
results = benchmark
|
|
}
|
|
|
|
const dataByBenchmarkName = {}
|
|
for (const {name, duration, x} of results) {
|
|
dataByBenchmarkName[name] = dataByBenchmarkName[name] || {points: []}
|
|
dataByBenchmarkName[name].points.push({x, y: duration})
|
|
}
|
|
|
|
const benchmarkContainer = document.createElement('div')
|
|
document.body.appendChild(benchmarkContainer)
|
|
for (const key in dataByBenchmarkName) {
|
|
const data = dataByBenchmarkName[key]
|
|
if (data.points.length > 1) {
|
|
const canvas = document.createElement('canvas')
|
|
benchmarkContainer.appendChild(canvas)
|
|
const chart = new Chart(canvas, {
|
|
type: 'line',
|
|
data: {
|
|
datasets: [{label: key, fill: false, data: data.points}]
|
|
},
|
|
options: {
|
|
showLines: false,
|
|
scales: {xAxes: [{type: 'linear', position: 'bottom'}]}
|
|
}
|
|
})
|
|
|
|
const textualOutput = `${key}:\n\n` + data.points.map((p) => `${p.x}\t${p.y}`).join('\n')
|
|
console.log(textualOutput)
|
|
} else {
|
|
const title = document.createElement('h2')
|
|
title.textContent = key
|
|
benchmarkContainer.appendChild(title)
|
|
const duration = document.createElement('p')
|
|
duration.textContent = `${data.points[0].y}ms`
|
|
benchmarkContainer.appendChild(duration)
|
|
|
|
const textualOutput = `${key}: ${data.points[0].y}`
|
|
console.log(textualOutput)
|
|
}
|
|
|
|
global.atom.reset()
|
|
}
|
|
}
|
|
|
|
return 0
|
|
}
|