Skip to content

Commit

Permalink
workflow(benchmark): warmup run (#287)
Browse files Browse the repository at this point in the history
  • Loading branch information
LittleSound authored Nov 11, 2024
1 parent b5ed2ec commit 2d30c71
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 17 deletions.
2 changes: 1 addition & 1 deletion benchmark/client/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
}
</style>
</head>
<body>
<body class="done">
<div id="app"></div>
<script type="module" src="./index.ts"></script>
</body>
Expand Down
68 changes: 52 additions & 16 deletions benchmark/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import sirv from 'sirv'
import { launch } from 'puppeteer'
import colors from 'picocolors'
import { exec, getSha } from '../scripts/utils.js'
import process from 'node:process'
import readline from 'node:readline'

// Thanks to https://github.com/krausest/js-framework-benchmark (Apache-2.0 license)
const {
Expand All @@ -20,6 +22,7 @@ const {
noVapor,
port: portStr,
count: countStr,
warmupCount: warmupCountStr,
noHeadless,
devBuild,
},
Expand Down Expand Up @@ -56,6 +59,11 @@ const {
short: 'c',
default: '30',
},
warmupCount: {
type: 'string',
short: 'w',
default: '5',
},
noHeadless: {
type: 'boolean',
},
Expand All @@ -68,6 +76,7 @@ const {

const port = +(/** @type {string}*/ (portStr))
const count = +(/** @type {string}*/ (countStr))
const warmupCount = +(/** @type {string}*/ (warmupCountStr))
const sha = await getSha(true)

if (!skipLib) {
Expand Down Expand Up @@ -226,22 +235,11 @@ async function doBench(browser, isVapor) {
await forceGC()
const t = performance.now()

for (let i = 0; i < count; i++) {
await clickButton('run') // test: create rows
await clickButton('update') // partial update
await clickButton('swaprows') // swap rows
await select() // test: select row, remove row
await clickButton('clear') // clear rows
console.log('warmup run')
await eachRun(() => withoutRecord(benchOnce), warmupCount)

await withoutRecord(() => clickButton('run'))
await clickButton('add') // append rows to large table

await withoutRecord(() => clickButton('clear'))
await clickButton('runLots') // create many rows
await withoutRecord(() => clickButton('clear'))

// TODO replace all rows
}
console.log('benchmark run')
await eachRun(benchOnce, count)

console.info(
'Total time:',
Expand All @@ -261,6 +259,23 @@ async function doBench(browser, isVapor) {
await page.close()
return result

async function benchOnce() {
await clickButton('run') // test: create rows
await clickButton('update') // partial update
await clickButton('swaprows') // swap rows
await select() // test: select row, remove row
await clickButton('clear') // clear rows

await withoutRecord(() => clickButton('run'))
await clickButton('add') // append rows to large table

await withoutRecord(() => clickButton('clear'))
await clickButton('runLots') // create many rows
await withoutRecord(() => clickButton('clear'))

// TODO replace all rows
}

function getTimes() {
return page.evaluate(() => /** @type {any} */ (globalThis).times)
}
Expand All @@ -273,9 +288,13 @@ async function doBench(browser, isVapor) {

/** @param {() => any} fn */
async function withoutRecord(fn) {
const currentRecordTime = await page.evaluate(() => globalThis.recordTime)
await page.evaluate(() => (globalThis.recordTime = false))
await fn()
await page.evaluate(() => (globalThis.recordTime = true))
await page.evaluate(
currentRecordTime => (globalThis.recordTime = currentRecordTime),
currentRecordTime,
)
}

/** @param {string} id */
Expand All @@ -298,6 +317,23 @@ async function doBench(browser, isVapor) {
}
}

/**
* @param {Function} bench
* @param {number} count
*/
async function eachRun(bench, count) {
for (let i = 0; i < count; i++) {
readline.cursorTo(process.stdout, 0)
readline.clearLine(process.stdout, 0)
process.stdout.write(`${i + 1}/${count}`)
await bench()
}
if (count === 0) {
process.stdout.write('0/0 (skip)')
}
process.stdout.write('\n')
}

async function initBrowser() {
const disableFeatures = [
'Translate', // avoid translation popups
Expand Down

0 comments on commit 2d30c71

Please sign in to comment.