Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • armada
  • tide-table
  • slop_bakeoff.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    fix(slop): headless never reached the GPU — `--gl hw` was software all along · 1fdfb85f
    Every bake-off render failed, for two independent reasons, and the second one had
    been sitting in this file as a comment asserting the opposite of the truth.
    
    ## 1. The playwright browser cache is empty now
    
    `chromeBinary()` scans `~/.cache/ms-playwright` for a full chromium build and
    returns `undefined` if it finds none, on the documented theory that this "lets
    playwright pick". It does not. Playwright reaches for the exact build it shipped
    against — `chromium_headless_shell-1234` — which was never downloaded, so every
    render died with "Executable doesn't exist" before rendering a frame. The cache
    directory is now absent entirely (it held build 1217 back in July). Falls back to
    `/usr/bin/chromium`: a full build, already driven by the SoundCloud transport, and
    no ~150 MB pull into PLN's shared cache behind his back.
    
    ## 2. `--gl hw` never got hardware GL
    
    The old comment claimed swiftshader manages ~7 fps and that `--gl hw` "asks for
    the real integrated GPU via EGL. Falls back by simply measuring worse." It was
    not falling back — it never left software. Instead of inferring the backend from
    frame rate on a machine whose load is a variable, I asked WebGL what it resolved
    to:
    
        headless + --use-angle=swiftshader -> SwiftShader (Subzero)
        headless + --use-gl=egl            -> SwiftShader (Subzero)   <- identical
        HEADFUL                            -> Mesa Intel UHD (CML GT2)
    
    Headless cannot reach this box's GPU whatever the flag. Which explains the
    symptom exactly: landscape 1920x1080 captured 3.5 fps on swiftshader and 3.2 fps
    on "hw", tripping the renderer's own under-5-fps guard both times — two numbers
    that look like noise and were actually the same backend twice.
    
    `--gl hw` now means HEADFUL. Measured after: **11.4 fps captured, page rendering
    17** — 3.3x, comfortably past the guard. Note the bottleneck has moved: the page
    now renders faster than the CDP screencast drains, so the next lever is the
    capture path (frame encoding), not the GPU. Cost is a visible window for the
    duration of each capture.
    
    The July note warned against trusting those fps follow-ups because they were
    measured at load average 12.5, and it was right to. But the fix was not a quieter
    benchmark — it was asking a question that load cannot corrupt. Third time this
    month a "the rig is broken" finding turned out to be the instrument.
    PLN (Algolia) authored Aug 17, 2026
    1fdfb85f
slop_bakeoff.py 14.2 KB
EditWeb IDE
×

Replace slop_bakeoff.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.