chore: add typecheck profiling (#35622)
This commit is contained in:
parent
bf01264661
commit
984430c97d
4 changed files with 242 additions and 1 deletions
66
script/profile-typecheck-packages.ts
Normal file
66
script/profile-typecheck-packages.ts
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env bun
|
||||
|
||||
import path from "path"
|
||||
|
||||
const root = path.resolve(import.meta.dir, "..")
|
||||
const proc = Bun.spawn(
|
||||
[
|
||||
"bun",
|
||||
"turbo",
|
||||
"typecheck",
|
||||
"--concurrency=1",
|
||||
"--force",
|
||||
"--continue=always",
|
||||
"--summarize",
|
||||
"--output-logs=errors-only",
|
||||
],
|
||||
{
|
||||
cwd: root,
|
||||
stdout: "pipe",
|
||||
stderr: "pipe",
|
||||
},
|
||||
)
|
||||
const [stdout, stderr, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited])
|
||||
const output = stdout + stderr
|
||||
if (exitCode !== 0) {
|
||||
process.stdout.write(stdout)
|
||||
process.stderr.write(stderr)
|
||||
process.exit(exitCode)
|
||||
}
|
||||
|
||||
const summary = output.match(/Summary:\s+(.+\.json)/)?.[1]?.trim()
|
||||
if (!summary) {
|
||||
process.stdout.write(stdout)
|
||||
process.stderr.write(stderr)
|
||||
throw new Error("Turbo did not report a run summary")
|
||||
}
|
||||
|
||||
const report = (await Bun.file(summary).json()) as {
|
||||
tasks: Array<{
|
||||
taskId: string
|
||||
execution: { startTime: number; endTime: number; exitCode: number } | null
|
||||
}>
|
||||
}
|
||||
const tasks = report.tasks
|
||||
.flatMap((task) =>
|
||||
task.execution
|
||||
? [
|
||||
{
|
||||
task: task.taskId.replace(/#typecheck$/, ""),
|
||||
durationMs: task.execution.endTime - task.execution.startTime,
|
||||
},
|
||||
]
|
||||
: [],
|
||||
)
|
||||
.sort((a, b) => b.durationMs - a.durationMs)
|
||||
const total = tasks.reduce((duration, task) => duration + task.durationMs, 0)
|
||||
const width = Math.max(...tasks.map((task) => task.task.length), "Package".length)
|
||||
|
||||
console.log(`Package${" ".repeat(width - "Package".length)} Time Share`)
|
||||
tasks.forEach((task) => {
|
||||
const duration = `${(task.durationMs / 1000).toFixed(2)}s`.padStart(7)
|
||||
const share = `${((task.durationMs / total) * 100).toFixed(1)}%`.padStart(6)
|
||||
console.log(`${task.task.padEnd(width)} ${duration} ${share}`)
|
||||
})
|
||||
console.log(`\nTotal serial task time: ${(total / 1000).toFixed(2)}s`)
|
||||
console.log(`Turbo summary: ${path.relative(root, summary)}`)
|
||||
Loading…
Add table
Add a link
Reference in a new issue