mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-08 09:37:47 +03:00
93 lines
3.2 KiB
TypeScript
93 lines
3.2 KiB
TypeScript
// One long diff in the review pane: `src/routes.ts` as a full-context patch of 1,559 lines (60 KB), highlighted in a
|
||
// worker, or 15,599 lines (603 KB), past the size above which the viewer renders plain text. At 1366×768.
|
||
import { bench, web, type Case } from "@hona/strobe"
|
||
import { reviewDiffs, routesDiff } from "./fixtures/diffs"
|
||
import { cached } from "./fixtures/mock"
|
||
import { openReview, review } from "./fixtures/review"
|
||
import { keepStartStorage, saveStartStorage } from "./fixtures/storage"
|
||
import { mockTimelineSession, serveDiffs, timeline } from "./fixtures/timeline"
|
||
|
||
// The pane opening on the diff, in a fresh document each run.
|
||
const open: Case<{}> = {
|
||
primary: "main.work",
|
||
metrics: ["run.duration"],
|
||
async run({ page }) {
|
||
await page.press(review.shortcut, { until: review.line, timeout: 60_000 })
|
||
await page.idle()
|
||
},
|
||
async reset({ page, prepared }) {
|
||
await page.goto(prepared.path, { until: timeline, timeout: 60_000 })
|
||
await page.idle()
|
||
},
|
||
}
|
||
|
||
export default bench({
|
||
targets: {
|
||
web: web({
|
||
expect: { title: "OpenCode" },
|
||
viewport: { width: 1366, height: 768 },
|
||
async prepare(ctx) {
|
||
const { case: name, url } = ctx
|
||
const page = cached(ctx)
|
||
await keepStartStorage(page)
|
||
const session = await mockTimelineSession(page, { server: new URL(url).origin, historyTurns: 0 })
|
||
await serveDiffs(page, changes(name))
|
||
|
||
return session
|
||
},
|
||
url: ({ prepared }) => prepared.path,
|
||
}),
|
||
},
|
||
|
||
async setup({ case: name, page }) {
|
||
await page.waitFor(timeline, { timeout: 60_000 })
|
||
|
||
// The long diff rendered once, then the pane moved to another file.
|
||
if (name === "return to a long diff") {
|
||
await openReview(page)
|
||
// The pane widens to fit the diff after its first file shows, which moves Next: click it once the pane rests.
|
||
await page.idle()
|
||
await page.click(review.next)
|
||
await page.waitFor(review.file, { text: "routes.ts" })
|
||
await page.waitFor(review.line)
|
||
await page.click(review.previous)
|
||
await page.waitFor(review.file, { text: "generated-000.ts" })
|
||
}
|
||
|
||
await page.idle()
|
||
// A reload keeps the review open (the app saves its layout on pagehide), so every run starts from this storage.
|
||
await saveStartStorage(page)
|
||
},
|
||
|
||
cases: {
|
||
"open a long diff": open,
|
||
"open a huge diff": open,
|
||
|
||
// Back to a diff the viewer highlighted before: the worker's cache should answer.
|
||
"return to a long diff": {
|
||
primary: "main.work",
|
||
metrics: ["run.duration"],
|
||
async run({ page }) {
|
||
await page.click(review.next)
|
||
await page.waitFor(review.file, { text: "routes.ts" })
|
||
await page.waitFor(review.line)
|
||
await page.idle()
|
||
},
|
||
async reset({ page }) {
|
||
await page.click(review.previous)
|
||
await page.waitFor(review.file, { text: "generated-000.ts" })
|
||
await page.idle()
|
||
},
|
||
},
|
||
},
|
||
})
|
||
|
||
/** The workspace's changes for a case: the huge diff alone, a small file before the long one, or the long one alone. */
|
||
function changes(name: string) {
|
||
if (name === "open a huge diff") return [routesDiff(1_200)]
|
||
|
||
if (name === "return to a long diff") return [reviewDiffs(1)[0], routesDiff(120)]
|
||
|
||
return [routesDiff(120)]
|
||
}
|