diff options
| author | Berke Güzel <wenekar1@gmail.com> | 2026-10-15 12:53:42 +0300 |
|---|---|---|
| committer | Berke Güzel <wenekar1@gmail.com> | 2026-10-15 12:53:42 +0300 |
| commit | bd8222e615134c3ec5e7a07b6b1fa97c9bd4a471 (patch) | |
| tree | 477acdf2fecca51f17c8bc0b461d8fe247f1e233 /src/cell.h | |
| parent | 6d2dc774947787dcef73a3251d1e9ec51bc526df (diff) | |
Convert each changed snapshot row once
The atomic update counted arena words by converting every changed row in
phase 1, then converted it again in apply(). A history row is decoded on
each conversion, so paging through history took 74% longer, and a full
redraw 20% longer.
A changed row is now converted once. Small updates reserve the arena for
the most their rows can add, then convert in apply() straight into the
cells, as before. Larger updates and rebuilds convert into a stage in
phase 1, with cluster records after the live ones or in a spare arena,
and apply() copies the smaller of the kept and staged parts, swapping
the stage in when that saves the copy. A failed update still changes
nothing a reader sees.
A row that scrolls in from below no longer counts as kept when its new
key is 0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'src/cell.h')
0 files changed, 0 insertions, 0 deletions
