Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.
Observed visual trace, draft 1
The adapter can publish what it drew for each registered graphic on each Present. This record is separate from the pixel producer and gives no game command or native sequence authority. A successful Present alone is not display acceptance.
Open Local\OpenHoops.Presentation.Trace.1.<token> with FILE_MAP_READ, using
the same private random token as the pixel channel. Match the host PID and process
creation time to the actual game process. Independent readers do not claim the
pixel producer. framework/trace.py provides the checked reader.
The header is 64 bytes and identifies version 1, 1,520-byte frames and a ring of
64 frames (97,344 bytes total). native/presentation/trace.hpp defines the wire
layout. Each frame has a 32-bit odd/even sequence guard. Read it before and after
copying the frame, require the same even value, and check the expected Present
number. The aligned published count uses an atomic 64-bit write. Readers must
report overwritten or incoherent frames as gaps, rather than guessing their
contents. The Python collector stops at its explicit output budget.
Every owner row reports primitive draw counts, replacement/fallback counts and one or more reasons: missing frame/plane, mutex contention/abandonment, invalid frame, changed sequence, upload failure, unavailable/changed/stale context, producer expiry, unavailable device, wrong target, failed draw, replacement or intentional hiding. Hundreds of primitives in one row still describe one frame. No primitive count may be presented as a count of failed frames.
observed_visible means the native owner reached its guarded draw boundary.
It is true even when replacement pixels were unavailable. A contiguous series
of such Presents receives an occurrence number, first/last observation tick and
observed_started/observed_ended flags. One absent Present ends this observed
window. A later draw or device generation change starts another window. These
boundaries do not distinguish native completion, cancellation, pause or a brief
gap, and do not identify a card's player, award or sequence stage.
Consumers may use the observations to diagnose rendering and measure entry or mid-window fallback. Semantic graphics still need separately verified content and lifecycle bindings. An unknown binding must retain native drawing. These records never allow a producer to omit a native draw; the host retains all identity, resource, context, freshness and successful-draw checks.
AS passes the Windows wire/collector tests. Exact GPU and game verification are
tracked separately in analysis/presentation-framework74/.