Frontmatter
| id | 9396 |
| title | E2E: Implement Synthetic Thumb Drag Profiles for Optical Pinning Validation |
| state | Closed |
| labels | aitestinggrid |
| assignees | tobiu |
| createdAt | Mar 8, 2026, 6:48 PM |
| updatedAt | Mar 8, 2026, 6:55 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9396 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9380 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 8, 2026, 6:49 PM |
E2E: Implement Synthetic Thumb Drag Profiles for Optical Pinning Validation
tobiu added parent issue #9380 on Mar 8, 2026, 6:48 PM

tobiu
Mar 8, 2026, 6:49 PM
The GridRowPinning.spec.mjs and GridThumbDragDevIndex.spec.mjs test files have been successfully updated, committed, and pushed.
Test Results (BigData / 100k rows):
- Total Frames Measured: 17851
- Total Blank Frames (White Flash): 105
- Total Jitter Bounces Detected: 10
Test Results (DevIndex / OffscreenCanvas):
- Total Frames Measured: 13253
- Total Blank Frames (White Flash): 141
- Total Jitter Bounces Detected: 10
Conclusion: The data has fundamentally shifted our understanding of browser rendering. The CSS variables mathematically worked, but the browser GPU compositor destroys off-screen textures during massive native scroll jumps faster than we can rescue them with CSS transforms. We must abandon optical pinning as a cure for the white flash.
tobiu assigned to @tobiu on Mar 8, 2026, 6:49 PM
tobiu closed this issue on Mar 8, 2026, 6:49 PM
This ticket documents the enhancement of both
GridRowPinning.spec.mjs(BigData) andGridThumbDragDevIndex.spec.mjs(DevIndex) to include synthetic scrollbar thumb drag simulations.The Enhancements: Since Playwright cannot natively grab and drag an OS-level
overflow: autoscrollbar thumb, we implemented synthetic drag profiles (Steady Slow Drag, Ping-Pong Drag, Massive Snap Drag) by:mousedownevent on the custom.neo-grid-vertical-scrollbarnode to trigger the addon'sisThumbDraggingstate.wrapper.scrollTopin rapid loops to bypass native momentum physics and instantly test the addon's synchronous CSS variable injection.mouseupto release the state.Empirical Findings from Playwright Telemetry:
Architectural Reality Check: The testing proves that optical CSS transforms cannot "rescue" pixels during a massive native scroll jump. When the browser's native scroll engine processes a massive
scrollTopjump, it destroys the old GPU compositor tile and allocates a new empty tile. Even if we synchronously translate the DOM nodes into the new viewport in the exact same 16ms frame, the browser has already flushed the pixels and paints a white rectangle until the layout engine finishes a full repaint.This confirms that with native
overflow: autoscrollbars, preventing a white flash on a massive jump is physically impossible in an async worker environment without predictive rendering heuristics or abandoning the native scrollbar entirely.