mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
feat(engine,producer,cli): drawElement release telemetry on render_complete (#2002)
Default-on drawElement ships with a runtime self-verification net (#1998); this makes its in-the-wild behavior observable. Every render_complete event now answers: which capture mode actually ran, why drawElement disengaged when it did (compile gate / producer clamp / engine init gate), whether the self-verify net fired and why, and how much margin verification had. Follows the static-dedup telemetry pattern: engine session fields → CapturePerfSummary → RenderPerfSummary.drawElement → snake_case props on render_complete. New event props: de_capture_mode, de_compile_gate, de_clamp_reason, de_gate_reason, de_worker_encode, de_verify_armed, de_verify_checked, de_verify_min_db (margin above the 32dB threshold — drift here is the early-warning signal before fallbacks spike), de_verify_init_ms, de_self_verify_fallback, de_fallback_reason, de_blank_suspects, de_blank_deterministic_accepts, de_blank_recaptures, de_boundary_frames, de_ncpr_fallbacks. Validated end-to-end on live renders: drawelement path reports mode/verify counters/minDb/init cost; a blur-gated comp reports mode=screenshot + gate_reason=css_effect:filter; a forced verification failure reports self_verify_fallback=true + fallback_reason=psnr. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
906c8d04f8
commit
1005703441
@@ -1662,6 +1662,22 @@ function trackRenderMetrics(
|
||||
staticDedupSkipReason: perf?.staticDedup?.skipReason,
|
||||
staticDedupPredictedFrames: perf?.staticDedup?.predictedFrames,
|
||||
staticDedupReusedFrames: perf?.staticDedup?.reusedFrames,
|
||||
deCaptureMode: perf?.drawElement?.mode,
|
||||
deCompileGate: perf?.drawElement?.compileGate,
|
||||
deClampReason: perf?.drawElement?.clampReason,
|
||||
deGateReason: perf?.drawElement?.gateReason,
|
||||
deWorkerEncode: perf?.drawElement?.workerEncode,
|
||||
deVerifyArmed: perf?.drawElement?.verifyArmed,
|
||||
deVerifyChecked: perf?.drawElement?.verifyChecked,
|
||||
deVerifyMinDb: perf?.drawElement?.verifyMinDb,
|
||||
deVerifyInitMs: perf?.drawElement?.verifyInitMs,
|
||||
deSelfVerifyFallback: perf?.drawElement?.selfVerifyFallback,
|
||||
deFallbackReason: perf?.drawElement?.fallbackReason,
|
||||
deBlankSuspects: perf?.drawElement?.blankSuspects,
|
||||
deBlankDeterministicAccepts: perf?.drawElement?.blankDeterministicAccepts,
|
||||
deBlankRecaptures: perf?.drawElement?.blankRecaptures,
|
||||
deBoundaryFrames: perf?.drawElement?.boundaryFrames,
|
||||
deNcprFallbacks: perf?.drawElement?.ncprFallbacks,
|
||||
compositionDurationMs,
|
||||
compositionWidth: perf?.resolution.width,
|
||||
compositionHeight: perf?.resolution.height,
|
||||
|
||||
@@ -114,6 +114,24 @@ export function trackRenderComplete(
|
||||
staticDedupSkipReason?: string;
|
||||
staticDedupPredictedFrames?: number;
|
||||
staticDedupReusedFrames?: number;
|
||||
// drawElement fast-capture outcome (default-on release visibility).
|
||||
// Undefined on render paths with no capture session.
|
||||
deCaptureMode?: string;
|
||||
deCompileGate?: string;
|
||||
deClampReason?: string;
|
||||
deGateReason?: string;
|
||||
deWorkerEncode?: boolean;
|
||||
deVerifyArmed?: number;
|
||||
deVerifyChecked?: number;
|
||||
deVerifyMinDb?: number;
|
||||
deVerifyInitMs?: number;
|
||||
deSelfVerifyFallback?: boolean;
|
||||
deFallbackReason?: string;
|
||||
deBlankSuspects?: number;
|
||||
deBlankDeterministicAccepts?: number;
|
||||
deBlankRecaptures?: number;
|
||||
deBoundaryFrames?: number;
|
||||
deNcprFallbacks?: number;
|
||||
// "cli" when triggered by `hyperframes render` (default), "studio" when
|
||||
// triggered by a studio preview-server render (POST /api/projects/:id/render).
|
||||
source?: "cli" | "studio";
|
||||
@@ -170,6 +188,22 @@ export function trackRenderComplete(
|
||||
static_dedup_skip_reason: props.staticDedupSkipReason,
|
||||
static_dedup_predicted_frames: props.staticDedupPredictedFrames,
|
||||
static_dedup_reused_frames: props.staticDedupReusedFrames,
|
||||
de_capture_mode: props.deCaptureMode,
|
||||
de_compile_gate: props.deCompileGate,
|
||||
de_clamp_reason: props.deClampReason,
|
||||
de_gate_reason: props.deGateReason,
|
||||
de_worker_encode: props.deWorkerEncode,
|
||||
de_verify_armed: props.deVerifyArmed,
|
||||
de_verify_checked: props.deVerifyChecked,
|
||||
de_verify_min_db: props.deVerifyMinDb,
|
||||
de_verify_init_ms: props.deVerifyInitMs,
|
||||
de_self_verify_fallback: props.deSelfVerifyFallback,
|
||||
de_fallback_reason: props.deFallbackReason,
|
||||
de_blank_suspects: props.deBlankSuspects,
|
||||
de_blank_deterministic_accepts: props.deBlankDeterministicAccepts,
|
||||
de_blank_recaptures: props.deBlankRecaptures,
|
||||
de_boundary_frames: props.deBoundaryFrames,
|
||||
de_ncpr_fallbacks: props.deNcprFallbacks,
|
||||
source: props.source ?? "cli",
|
||||
composition_duration_ms: props.compositionDurationMs,
|
||||
composition_width: props.compositionWidth,
|
||||
|
||||
Reference in New Issue
Block a user