chore: generate
This commit is contained in:
parent
a4551a94b4
commit
d465cd476a
@ -18,9 +18,7 @@ export function summarizeFirstNavigation(samples: FirstNavigationSample[]) {
|
|||||||
const categories = samples.map(category)
|
const categories = samples.map(category)
|
||||||
const stable = categories.findIndex(
|
const stable = categories.findIndex(
|
||||||
(value, index) =>
|
(value, index) =>
|
||||||
value === "destination" &&
|
value === "destination" && categories[index + 1] === "destination" && categories[index + 2] === "destination",
|
||||||
categories[index + 1] === "destination" &&
|
|
||||||
categories[index + 2] === "destination",
|
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
samples: samples.length,
|
samples: samples.length,
|
||||||
|
|||||||
@ -72,7 +72,8 @@ export async function measureFirstNavigation(
|
|||||||
)
|
)
|
||||||
await input.navigate()
|
await input.navigate()
|
||||||
await page.waitForFunction(() => {
|
await page.waitForFunction(() => {
|
||||||
const samples = (window as Window & { __firstNavigationProbe?: FirstNavigationProbe }).__firstNavigationProbe?.samples
|
const samples = (window as Window & { __firstNavigationProbe?: FirstNavigationProbe }).__firstNavigationProbe
|
||||||
|
?.samples
|
||||||
if (!samples) return false
|
if (!samples) return false
|
||||||
return samples.length >= 3 && samples.slice(-3).every((sample) => sample.destination && !sample.source)
|
return samples.length >= 3 && samples.slice(-3).every((sample) => sample.destination && !sample.source)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -20,7 +20,9 @@ export function summarizeNavigationMilestones(samples: NavigationMilestoneSample
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
samples: samples.length,
|
samples: samples.length,
|
||||||
milestones: Object.fromEntries(names.map((name) => [name, summarize((sample) => sample.milestones[name] === true)])),
|
milestones: Object.fromEntries(
|
||||||
|
names.map((name) => [name, summarize((sample) => sample.milestones[name] === true)]),
|
||||||
|
),
|
||||||
all: summarize((sample) => names.every((name) => sample.milestones[name] === true)),
|
all: summarize((sample) => names.every((name) => sample.milestones[name] === true)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,75 +40,78 @@ export async function measureNavigationMilestones(
|
|||||||
navigate: () => Promise<void>
|
navigate: () => Promise<void>
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
await page.evaluate(({ triggerSelector, milestones }) => {
|
await page.evaluate(
|
||||||
const samples: NavigationMilestoneSample[] = []
|
({ triggerSelector, milestones }) => {
|
||||||
const streaks = new Map<string, number>()
|
const samples: NavigationMilestoneSample[] = []
|
||||||
const marked = new Set<string>()
|
const streaks = new Map<string, number>()
|
||||||
let started: number | undefined
|
const marked = new Set<string>()
|
||||||
let running = true
|
let started: number | undefined
|
||||||
const visible = (selector: string) =>
|
let running = true
|
||||||
[...document.querySelectorAll<HTMLElement>(selector)].some((element) => {
|
const visible = (selector: string) =>
|
||||||
const rect = element.getBoundingClientRect()
|
[...document.querySelectorAll<HTMLElement>(selector)].some((element) => {
|
||||||
const style = getComputedStyle(element)
|
const rect = element.getBoundingClientRect()
|
||||||
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none"
|
const style = getComputedStyle(element)
|
||||||
})
|
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none"
|
||||||
const sample = () => {
|
})
|
||||||
if (!running || started === undefined) return
|
const sample = () => {
|
||||||
requestAnimationFrame(() => {
|
if (!running || started === undefined) return
|
||||||
setTimeout(() => {
|
requestAnimationFrame(() => {
|
||||||
if (!running || started === undefined) return
|
setTimeout(() => {
|
||||||
const current = Object.fromEntries(
|
if (!running || started === undefined) return
|
||||||
Object.entries(milestones).map(([name, milestone]) => [
|
const current = Object.fromEntries(
|
||||||
name,
|
Object.entries(milestones).map(([name, milestone]) => [
|
||||||
milestone.visible === false ? !document.querySelector(milestone.selector) : visible(milestone.selector),
|
name,
|
||||||
]),
|
milestone.visible === false ? !document.querySelector(milestone.selector) : visible(milestone.selector),
|
||||||
)
|
]),
|
||||||
samples.push({
|
)
|
||||||
observedAtMs: performance.now() - started,
|
samples.push({
|
||||||
milestones: current,
|
observedAtMs: performance.now() - started,
|
||||||
})
|
milestones: current,
|
||||||
Object.entries(current).forEach(([name, value]) => {
|
})
|
||||||
if (!value) {
|
Object.entries(current).forEach(([name, value]) => {
|
||||||
streaks.set(name, 0)
|
if (!value) {
|
||||||
return
|
streaks.set(name, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!marked.has(`${name}.first`)) {
|
||||||
|
performance.mark(`opencode.navigation.${name}.first`)
|
||||||
|
marked.add(`${name}.first`)
|
||||||
|
}
|
||||||
|
const streak = (streaks.get(name) ?? 0) + 1
|
||||||
|
streaks.set(name, streak)
|
||||||
|
if (streak === 3) performance.mark(`opencode.navigation.${name}.stable`)
|
||||||
|
})
|
||||||
|
const all = Object.values(current).every(Boolean)
|
||||||
|
const allStreak = all ? (streaks.get("all") ?? 0) + 1 : 0
|
||||||
|
streaks.set("all", allStreak)
|
||||||
|
if (all && !marked.has("all.first")) {
|
||||||
|
performance.mark("opencode.navigation.all.first")
|
||||||
|
marked.add("all.first")
|
||||||
}
|
}
|
||||||
if (!marked.has(`${name}.first`)) {
|
if (allStreak === 3) performance.mark("opencode.navigation.all.stable")
|
||||||
performance.mark(`opencode.navigation.${name}.first`)
|
sample()
|
||||||
marked.add(`${name}.first`)
|
}, 0)
|
||||||
}
|
})
|
||||||
const streak = (streaks.get(name) ?? 0) + 1
|
}
|
||||||
streaks.set(name, streak)
|
document.addEventListener(
|
||||||
if (streak === 3) performance.mark(`opencode.navigation.${name}.stable`)
|
"click",
|
||||||
})
|
(event) => {
|
||||||
const all = Object.values(current).every(Boolean)
|
if (!(event.target instanceof Element) || !event.target.closest(triggerSelector)) return
|
||||||
const allStreak = all ? (streaks.get("all") ?? 0) + 1 : 0
|
started = performance.now()
|
||||||
streaks.set("all", allStreak)
|
performance.mark("opencode.navigation.click")
|
||||||
if (all && !marked.has("all.first")) {
|
|
||||||
performance.mark("opencode.navigation.all.first")
|
|
||||||
marked.add("all.first")
|
|
||||||
}
|
|
||||||
if (allStreak === 3) performance.mark("opencode.navigation.all.stable")
|
|
||||||
sample()
|
sample()
|
||||||
}, 0)
|
},
|
||||||
})
|
{ capture: true, once: true },
|
||||||
}
|
)
|
||||||
document.addEventListener(
|
;(window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones = {
|
||||||
"click",
|
samples,
|
||||||
(event) => {
|
stop: () => {
|
||||||
if (!(event.target instanceof Element) || !event.target.closest(triggerSelector)) return
|
running = false
|
||||||
started = performance.now()
|
},
|
||||||
performance.mark("opencode.navigation.click")
|
}
|
||||||
sample()
|
},
|
||||||
},
|
{ triggerSelector: input.triggerSelector, milestones: input.milestones },
|
||||||
{ capture: true, once: true },
|
)
|
||||||
)
|
|
||||||
;(window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones = {
|
|
||||||
samples,
|
|
||||||
stop: () => {
|
|
||||||
running = false
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}, { triggerSelector: input.triggerSelector, milestones: input.milestones })
|
|
||||||
await input.navigate()
|
await input.navigate()
|
||||||
await page.waitForFunction(() => {
|
await page.waitForFunction(() => {
|
||||||
const samples = (window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones
|
const samples = (window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones
|
||||||
|
|||||||
@ -344,9 +344,7 @@ export const fixture = {
|
|||||||
targetMessageIDs: targetMessages
|
targetMessageIDs: targetMessages
|
||||||
.filter((message) => message.info.role === "user")
|
.filter((message) => message.info.role === "user")
|
||||||
.map((message) => message.info.id),
|
.map((message) => message.info.id),
|
||||||
childMessageIDs: childMessages
|
childMessageIDs: childMessages.filter((message) => message.info.role === "user").map((message) => message.info.id),
|
||||||
.filter((message) => message.info.role === "user")
|
|
||||||
.map((message) => message.info.id),
|
|
||||||
targetPartIDs: targetMessages.flatMap((message) =>
|
targetPartIDs: targetMessages.flatMap((message) =>
|
||||||
orderedParts(message)
|
orderedParts(message)
|
||||||
.filter(renderable)
|
.filter(renderable)
|
||||||
|
|||||||
@ -47,17 +47,15 @@ export async function installStressSessionTabs(page: Page, input?: { draftID?: s
|
|||||||
)
|
)
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
"opencode.global.dat:tabs",
|
"opencode.global.dat:tabs",
|
||||||
JSON.stringify(
|
JSON.stringify([
|
||||||
[
|
...sessionIDs.map((sessionId) => ({
|
||||||
...sessionIDs.map((sessionId) => ({
|
type: "session",
|
||||||
type: "session",
|
server,
|
||||||
server,
|
dirBase64,
|
||||||
dirBase64,
|
sessionId,
|
||||||
sessionId,
|
})),
|
||||||
})),
|
...(draftID ? [{ type: "draft", draftID, server, directory }] : []),
|
||||||
...(draftID ? [{ type: "draft", draftID, server, directory }] : []),
|
]),
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1149,7 +1149,8 @@ export default function Page() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const onHistoryScroll = () => {
|
const onHistoryScroll = () => {
|
||||||
if (historyRequest || historyLoading() || !autoScroll.userScrolled() || !scroller || scroller.scrollTop >= 200) return
|
if (historyRequest || historyLoading() || !autoScroll.userScrolled() || !scroller || scroller.scrollTop >= 200)
|
||||||
|
return
|
||||||
void loadOlder()
|
void loadOlder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user