mirror of
https://github.com/stablyai/orca.git
synced 2026-09-29 08:03:20 +00:00
perf: remember equivalent session tab source identities
This commit is contained in:
@@ -90,6 +90,34 @@ afterEach(() => {
|
||||
})
|
||||
|
||||
describe('session write subscriber allocation', () => {
|
||||
it.each(['tabsByWorktree', 'unifiedTabsByWorktree'] as const)(
|
||||
'remembers an equivalent %s source before unrelated writes',
|
||||
(field) => {
|
||||
const harness = createHarness()
|
||||
try {
|
||||
harness.write(() => ({ [field]: { 'wt-1': [] } }))
|
||||
vi.advanceTimersByTime(500)
|
||||
harness.persisted.length = 0
|
||||
|
||||
harness.write(() => ({ [field]: { 'wt-1': [] } }))
|
||||
const calls = countFilterCalls(() => {
|
||||
for (let write = 0; write < 200; write += 1) {
|
||||
harness.write(() => ({ runtimePaneTitlesByTabId: {} }))
|
||||
}
|
||||
})
|
||||
expect(calls).toBe(0)
|
||||
vi.advanceTimersByTime(500)
|
||||
expect(harness.persisted).toHaveLength(0)
|
||||
|
||||
harness.write(() => ({ activeTabId: 'next-tab' }))
|
||||
vi.advanceTimersByTime(500)
|
||||
expect(harness.persisted).toHaveLength(1)
|
||||
} finally {
|
||||
harness.dispose()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
it('allocates nothing for store writes that touch no session field', () => {
|
||||
const harness = createHarness()
|
||||
try {
|
||||
|
||||
@@ -233,12 +233,13 @@ export function createSessionWriteSubscriber({
|
||||
prev === null
|
||||
? [...SESSION_RELEVANT_FIELDS]
|
||||
: SESSION_RELEVANT_FIELDS.filter((key) => prev?.[key] !== next[key])
|
||||
// Equivalent projections still consume the new source identities.
|
||||
prevTabsSource = state.tabsByWorktree
|
||||
prevUnifiedTabsSource = state.unifiedTabsByWorktree
|
||||
if (changedFields.length === 0 && pendingChangedFields.size === 0) {
|
||||
return
|
||||
}
|
||||
prev = next
|
||||
prevTabsSource = state.tabsByWorktree
|
||||
prevUnifiedTabsSource = state.unifiedTabsByWorktree
|
||||
for (const field of changedFields) {
|
||||
pendingChangedFields.add(field)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user