You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Genuinely geometry-only variant for the dense content_overlap re-sampling
22
-
// grid. It keeps only the timeline setTime + preferred-target seek cascade and
23
-
// drops EVERY post-seek wait — no rAF settle, no font wait, no paint-settle
24
-
// sleep — because getBoundingClientRect geometry is valid synchronously once
25
-
// GSAP has written the inline transforms at setTime; a geometry-only reader
26
-
// never paints, so it needs none of the visual-stability waits. At up to
27
-
// OVERLAP_MAX_SAMPLES seeks the full AUDIT settle (double rAF + up to 500ms
28
-
// font wait + 120ms sleep) is ~30s of frame waits + ~72s of sleep with no DOM
29
-
// work; this variant eliminates all of it.
21
+
// Geometry-only seek for the dense content_overlap grid: getBoundingClientRect is valid synchronously after setTime, so drop all post-seek waits (rAF/font/sleep) that would multiply across the dense grid.
@@ -448,23 +438,7 @@ function buildOverlapSampleTimes(duration: number): number[] {
448
438
);
449
439
}
450
440
451
-
/**
452
-
* Dense motion-overlap re-sampling. Reruns ONLY content_overlap on a fine time
453
-
* grid so transient text collisions during continuous motion are observed at
454
-
* all — the detector itself is unchanged (same 0.2-area threshold), only the
455
-
* sampling density is.
456
-
*
457
-
* This runs UNCONDITIONALLY (bounded + text-only), NOT gated on sparse-grid
458
-
* geometry fingerprints changing. That gate was the motivating false-negative:
459
-
* an animation aliased to the sparse grid (the same pose sampled at every base
460
-
* point) has identical fingerprints yet still collides *between* those samples,
461
-
* so gating on fingerprint change skipped the exact transient this pass exists
462
-
* to catch. A static composition simply yields no overlaps at the extra times,
463
-
* so the only cost of running always is a bounded set of cheap text-only seeks.
464
-
* Findings feed the existing collapse/persistence tiering (a graze stays info,
465
-
* a held collision re-promotes to error). Skips times already in the base grid
466
-
* to avoid double-collecting overlaps collectLayout already found.
467
-
*/
441
+
/** Reruns content_overlap on a fine grid, unconditionally rather than gated on fingerprint change, since an animation aliased to the sparse grid collides between identical-fingerprint samples. */
468
442
asyncfunctioncollectMotionOverlapSamples(
469
443
driver: CheckAuditDriver,
470
444
grid: SampleGrid,
@@ -473,12 +447,7 @@ async function collectMotionOverlapSamples(
// only, which is valid synchronously after the timeline setTime (GSAP
478
-
// writes inline transforms synchronously). The dense pass makes up to
479
-
// OVERLAP_MAX_SAMPLES seeks, so skipping the 120ms per-seek paint settle
480
-
// here (vs. the full-settle driver.seek the base grid uses to feed
481
-
// contrast/rotation/frame checks) removes ~72s of pure sleep at the ceiling.
450
+
// Settle-free seek: collectOverlap reads getBoundingClientRect geometry, valid synchronously after setTime, so the dense pass skips the per-seek paint settle.
/** Cheap settle-free seek for the geometry-only dense content_overlap pass:
177
-
* setTime + timeline seek with no paint-settle sleep. Only collectOverlap
178
-
* (getBoundingClientRect geometry) consumes the result, which is valid
179
-
* synchronously after setTime — see checkPipeline collectMotionOverlapSamples. */
176
+
/** Settle-free seek for the geometry-only dense content_overlap pass; only collectOverlap consumes it, and getBoundingClientRect is valid synchronously after setTime. */
0 commit comments