Context
#942 Phase-1 baseline, cold scenario: pioarduino-resolve costs 185–237 s of the 700–808 s cold build. Harness stderr shows repeated sequential esp32-xtensa-gcc ... downloading lines followed by a single extracting — the pipeline downloads, then extracts, then installs, largely serially. fbuild-packages has a download_all() that spawns per-URL tasks, but the ESP32 toolchain/platform/framework ensure path doesn't fan out, and extraction doesn't overlap with the next download.
Additionally fw-libs (162 s cold) only starts after resolve completes — compile of framework libs could begin as soon as its toolchain + sources are present rather than waiting for all packages.
Proposal
- Pipeline the package ensure path: concurrent downloads (bounded), extract-while-downloading (stream or start extract per completed archive), install-while-extracting.
- Start dependent build phases as soon as their specific inputs are ready instead of barriering on full resolve (e.g. fw-libs can start when toolchain + core sources exist, while libraries still download).
Acceptance criteria
Part of #942.
Context
#942 Phase-1 baseline, cold scenario:
pioarduino-resolvecosts 185–237 s of the 700–808 s cold build. Harness stderr shows repeated sequentialesp32-xtensa-gcc ... downloadinglines followed by a singleextracting— the pipeline downloads, then extracts, then installs, largely serially.fbuild-packageshas adownload_all()that spawns per-URL tasks, but the ESP32 toolchain/platform/framework ensure path doesn't fan out, and extraction doesn't overlap with the next download.Additionally
fw-libs(162 s cold) only starts after resolve completes — compile of framework libs could begin as soon as its toolchain + sources are present rather than waiting for all packages.Proposal
Acceptance criteria
pioarduino-resolvewall time (or its serialized portion) drops by ≥ 40% in the meta: profiling-driven build performance burndown (Docker Linux, NightDriverStrip, cold vs hot cache) #942 harness on the same network.Part of #942.