PaletteModel::rebuild splits the bulk score-only scan into per-thread chunks via QtConcurrent::blockingMapped when item count exceeds kParallelThreshold (10000). The scan is a pure map over read-only data (FuzzyRanker::score is a stateless static; m_items not mutated); chunks are concatenated in order and finalizeVisible imposes a deterministic sort, so the result is bit-identical to the serial path regardless of thread timing. Incremental (type-forward) path stays serial — it only touches <=1000 items. First-scan at 397k symbols (mobydick, 16 cores): ~373ms -> ~61ms. Link Qt6::Concurrent into the palette lib. New test parallelScanIsCorrectAndDeterministic (40k items) guards correctness. |
||
|---|---|---|
| .. | ||
| PERF.md | ||
| PLAN.md | ||
| radials.example.json | ||