gramps
432adfdaef
perf(render): take-4 slice 2 — IsOpaque memcpy, integer bilinear, pump scratch pool
Take 4: pacing held (sync perfect) but avg render stayed 58.9ms — 2M
managed row-walk iterations + a fresh 8.3MB buffer every tick (LOH churn
into GC stalls inside the render measurement).
- VideoFrame.IsOpaque: producer-contract flag (screen capture + webcam —
DWM/MF fill alpha 255; media/chat/web/static NOT flagged). Full-cover
aligned opaque backdrop = ONE Buffer.BlockCopy; black pre-fill skipped
when it covers.
- General BlitContent: integer 8.8 fixed-point bilinear + blend, row
invariants hoisted, no per-pixel division/Math.Round. Within ±1 of the
float reference (pixel tests allow ±2). Research per derivative-work
rule: libyuv row/scale kernels (chromium.googlesource.com/libyuv/libyuv).
- FramePump scratch pool (max 4, length-keyed, owned-by-reference):
release strictly AFTER SubmitFrameAsync returns (stdin write copies);
Contains-guard makes the transition Cut alias safe.
- Removed the dead per-tick fromScene render + fromSceneProvider seam —
BlendFrame consumes TransitionService.FromFrame captured at Start; the
pump's render fed nothing. MainViewModel call site updated (signature).
Bugs caught by the pixel probes pre-ship (recorded MyMistakes): first
Bilinear double-shifted both stages (solid-255 sampled to ~1 -> general
path drew nothing); sentinel 0xAB collided with an x+y pixel. FakeEncoder
snapshots submitted frames (mirrors real copy semantics under recycling).
ONE integration test: Pump_Pools_ScratchBuffers_Across_Frames_Without_
Stale_Pixels (alternating backdrops + repeated backing identity). Direct
pin: Composite_OpaqueFullCover_Backdrop_CopiesEveryPixel_Into_Scratch.
Clean build 0 warnings; 59/59 per-class + RealApp boot-smoke. take 5
verdict: expect avg render <= ~10ms, ~300/300 frames. Docs same commit:
ai.md pipeline section, TASKS.md TASK 18, HANDOFF rewritten (Unit B spec
+ settled decisions queued).
2026-09-04 09:35:59 -07:00
..
2026-08-06 14:35:34 -07:00
2026-08-14 09:20:03 -07:00
2026-08-26 06:48:14 -07:00
2026-08-31 10:48:10 -07:00
2026-08-30 07:13:17 -07:00
2026-09-01 21:22:57 -07:00
2026-08-31 17:53:34 -07:00
2026-08-30 22:32:45 -07:00
2026-08-31 10:48:10 -07:00
2026-09-04 09:35:59 -07:00
2026-08-30 07:15:26 -07:00
2026-08-31 19:32:41 -07:00
2026-08-30 08:52:03 -07:00
2026-08-31 10:21:47 -07:00
2026-08-31 17:53:34 -07:00
2026-08-30 08:34:10 -07:00
2026-08-31 17:53:34 -07:00
2026-09-01 22:25:20 -07:00
2026-09-01 22:25:20 -07:00
2026-08-30 08:24:22 -07:00
2026-08-30 22:09:02 -07:00
2026-08-31 17:53:34 -07:00
2026-08-07 17:44:16 -07:00
2026-08-04 17:12:32 -07:00
2026-08-31 08:59:38 -07:00
2026-08-31 08:59:38 -07:00