Closed
Conversation
* Use an environment var instead of 'number of days' if set * Add CommonAssemblyInfo to Paratext8Plugin * Update comments in CommonAssemblyInfoTemplate Change-Id: Ic8d71929c4cf0600b0621a0def6645bacee9710e
- Add a target to build an installer and a test patch so that we can quickly test that each FLEx file is patched - Add a build step to record files expected to be installed (binaries installed by our installer; *not* merge modules, etc.) - Install a utility to read this list and verify installation Change-Id: I3dcfdcaa414075d6bd645ff084f04382cf9dca0f
7cd19f0 to
7169774
Compare
Contributor
Author
|
Gerrit hath returned to the land of the living |
johnml1135
added a commit
that referenced
this pull request
Mar 5, 2026
# This is the 1st commit message: feat(render): expand DataTree render scenarios and persist benchmark timings standardize DataTree test data with predictable field naming across scenarios add per-scenario timing capture and write results to datatree-timings.json add Newtonsoft.Json to DetailControlsTests for timing serialization add render-testing skill documentation for baseline and benchmark workflow remove obsolete generated Build/FieldWorks.targets.bad file update checked-in test result artifact for current render test run fix: resolve build blocker + timing test layout gaps - Remove duplicate Kernel project entry in FieldWorks.sln that blocked NuGet restore (first entry was missing EndProject) - Add CitationForm and Senses parts to test Normal layout so timing tests produce real slices instead of 0 - Add LexSense-Detail-Senses part and subsense recursion to GlossSn layout so WorkloadGrowsWithComplexity test correctly validates that deeper scenarios produce more slices - Include user edits to implementation-paths.md OS-3: All 4 DataTreeTiming tests now pass perf: add render-testing workflow + timing enhancement log - Update render-testing skill with explicit devil's advocate stage, retest/review, and mandatory TIMING_ENHANCEMENTS.md before commit. - Refine DataTree tab-index optimization safety by moving final ResetTabIndices(0) to CreateSlices finally. - Keep DeepSuspendLayout/DeepResumeLayout batching in DummyObjectSlice.BecomeReal. - Mark OS-3 and OS-5 complete in OpenSpec tasks and add TIMING_ENHANCEMENTS.md with measured outcomes. Validation: build.ps1 -BuildTests; test.ps1 -TestFilter DataTreeTiming -NoBuild perf: paint pipeline optimization — clip-rect culling + double-buffering - HandlePaintLinesBetweenSlices: skip separator lines outside paint clip rect, reducing per-paint iteration from O(N) to O(visible) during scroll/partial repaints. Avoids O(N) XML attribute parsing on off-screen slices. - DataTree constructor: enable OptimizedDoubleBuffer + AllPaintingInWmPaint to eliminate flicker during paint. - Add DataTreeTiming_PaintPerformance test for paint-time regression detection. - Update render-testing skill with test coverage assessment step. - Update TIMING_ENHANCEMENTS.md with enhancements 3 and 4. perf: layout path optimization — early-exit guard, construction skip, paint-path skip Enhancement 5: Slice.SetWidthForDataTreeLayout returns early when m_widthHasBeenSetByDataTree && Width == width, avoiding redundant splitter resizing and event handler churn on every layout pass. Enhancement 6: DataTree.OnSizeChanged skips the O(N) splitter adjustment loop during ConstructingSlices. HandleLayout1(fFull=true) handles width synchronization after construction completes. Enhancement 7: HandleLayout1 paint path (fFull=false) skips SetWidthForDataTreeLayout for non-visible slices, reducing width-sync work from O(N) to O(K) per paint where K is visible slice count. Also fixes RemoveDuplicateCustomFields test to match Test.fwlayout Normal layout changes from prior commit. perf: XML attribute caching + MakeSliceVisible high-water mark Enhancement 8: Cache header/skipSpacerLine/sameObject XML attributes on Slice as lazy bool? fields. Eliminates per-paint XML parsing in HandlePaintLinesBetweenSlices (~2,700 XML lookups/sec at 60Hz with 15 visible slices reduced to 0 after first access). Enhancement 9: Change MakeSliceVisible from static to instance method. Pass known index from HandleLayout1 caller (avoids O(N) IndexOf). Track m_lastVisibleHighWaterMark so the inner 'make preceding visible' loop amortizes to O(N) total instead of O(N*V). Preserves the .NET Framework bug workaround (LT-7307). Reset mark in CreateSlices. perf: construction-path guards + optimization regression tests Enhancement 10: Skip ResetTabIndices in RemoveSlice during ConstructingSlices. Mirror of Enhancement 1 — the finally block in CreateSlices already does a single ResetTabIndices(0) after all removals/insertions complete. Enhancement 11: Skip AdjustSliceSplitPosition in InstallSlice during ConstructingSlices. HandleLayout1(fFull=true) sets correct widths + splitter positions after construction, making per-insert adjustment redundant. Added 7 optimization regression tests (DataTreeOpt_ prefix): - WidthStabilityAfterLayout (Enhancement 5) - AllViewportSlicesVisible (Enhancement 9) - XmlCacheConsistency (Enhancement 8) - XmlCacheInvalidationOnConfigChange (Enhancement 8) - SequentialPaintsProduceIdenticalOutput (Enhancements 3,4,7,8) - SlicePositionsMonotonicallyIncreasing (Enhancement 3) - IsHeaderNodeDelegatesToCachedProperty (Enhancement 8) All 12 DataTree tests pass (5 timing + 7 optimization). # This is the commit message #2: feat: Enhancement 12 — binary search in HandleLayout1 paint path Add FindFirstPotentiallyVisibleSlice binary search to skip above-viewport slices during paint-path layout. Addresses JohnT's original TODO in OnPaint. - HandleLayout1 now starts iteration at the first potentially visible slice (with -1 safety margin) instead of index 0 on paint-path calls - Timing improvements: shallow -71%, deep -20%, extreme -7%, paint -11% - 5 binary-search risk-reduction tests added (DataTreeOpt_ prefix) - Regenerate snapshot baselines after layout/parts changes from 64ab221 - Add mandatory snapshot regression check (Step 6) to render-testing skill - Update TIMING_ENHANCEMENTS.md with E12 measurements and devil's advocate # This is the commit message #3: The real optimization - HWND virtualization # This is the commit message #4: fix: correct VwDrawRootBuffered coordinate mapping + trailing separator bars Three rendering quality fixes for the snapshot capture pipeline: 1. VwDrawRootBuffered coordinate fix (CompositeViewCapture.cs): GetCoordRects returns rcDst in rootSite-local coordinates (origin at HorizMargin, 0). The overlay code was passing clientRect with the rootSite's position relative to the DataTree (e.g. X=175), causing VwDrawRootBuffered to offset rcDst by (-175, -y) and render content at negative X — clipping or hiding it entirely. Fix: render each rootSite into a temp bitmap at local coords (0,0,w,h), then composite into the main bitmap at the correct DataTree-relative position. 2. EnsureAllSlicesInitialized uses BecomeRealInPlace (CompositeViewCapture.cs): Replaced manual handle-forcing with the production ViewSlice initialization path, which sets AllowLayout=true and triggers rootBox.Layout with the correct width. 3. Trailing separator bar removal (VectorReferenceView.cs, PossibilityVectorReferenceView.cs): DisplayVec called AddSeparatorBar after every item including the last, causing VwSeparatorBox to draw unwanted grey bars after single/final items like 'Main Dictionary'. Added guard to only add separators between items. Baselines regenerated — all 6 scenarios show 40-70% more rendered content. All 23 DataTree tests pass (timing + optimization + snapshots). # This is the commit message #5: Added tests before virtualization # This is the commit message #6: update renders # This is the commit message #7: Hwnd implementation started # This is the commit message #8: upgrade openspec # This is the commit message #9: hwnd implementation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This change is