session-tab-flash.spec.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { benchmark, expect } from "../benchmark"
  2. import { expectSessionTitle } from "../../utils/waits"
  3. import { fixture } from "./session-timeline-stress.fixture"
  4. import {
  5. collectCachedRepaintTrace,
  6. compressCachedRepaintTrace,
  7. installCachedRepaintProbe,
  8. waitForCachedRepaintWindow,
  9. } from "./session-tab-repaint-probe"
  10. import { waitForStableTimeline } from "./session-tab-switch-probe"
  11. import {
  12. installStressSessionTabs,
  13. installTimelineSettings,
  14. mockStressTimeline,
  15. stressSessionHref,
  16. } from "./timeline-test-helpers"
  17. benchmark("samples cached session repaint after the click", async ({ page, report }) => {
  18. benchmark.setTimeout(120_000)
  19. await mockStressTimeline(page)
  20. await installStressSessionTabs(page)
  21. await installTimelineSettings(page)
  22. await page.goto(stressSessionHref(fixture.targetID))
  23. await expectSessionTitle(page, fixture.expected.targetTitle)
  24. await waitForStableTimeline(page, fixture.expected.targetMessageIDs.at(-1)!)
  25. await page
  26. .locator(`[data-slot="titlebar-tabs"] a[href="${stressSessionHref(fixture.sourceID)}"]`)
  27. .first()
  28. .click()
  29. await expectSessionTitle(page, fixture.expected.sourceTitle)
  30. await waitForStableTimeline(page, fixture.expected.sourceMessageIDs.at(-1)!)
  31. await installCachedRepaintProbe(page, {
  32. targetHref: stressSessionHref(fixture.targetID),
  33. destination: fixture.messages[fixture.targetID].map((message) => message.info.id),
  34. source: fixture.messages[fixture.sourceID].map((message) => message.info.id),
  35. last: fixture.expected.targetMessageIDs.at(-1)!,
  36. windowMs: 1_000,
  37. })
  38. await page
  39. .locator(`[data-slot="titlebar-tabs"] a[href="${stressSessionHref(fixture.targetID)}"]`)
  40. .first()
  41. .click()
  42. await Promise.all([expectSessionTitle(page, fixture.expected.targetTitle), waitForCachedRepaintWindow(page, 1_000)])
  43. const result = await collectCachedRepaintTrace(page)
  44. report(compressCachedRepaintTrace(result))
  45. expect(result.samples.length).toBeGreaterThan(0)
  46. })
  47. benchmark("prefetches every open session tab", async ({ page, report }) => {
  48. const prefetched = new Set<string>()
  49. await mockStressTimeline(page, {
  50. onMessages: (input) => {
  51. if (!input.before && input.phase === "start") prefetched.add(input.sessionID)
  52. },
  53. })
  54. await installStressSessionTabs(page, {
  55. sessionIDs: [fixture.sourceID, fixture.targetID, fixture.childID],
  56. })
  57. await installTimelineSettings(page)
  58. await page.goto(stressSessionHref(fixture.sourceID))
  59. await expectSessionTitle(page, fixture.expected.sourceTitle)
  60. await expect.poll(() => prefetched.has(fixture.childID)).toBe(true)
  61. report({ prefetched: [...prefetched] })
  62. })