perf(renderer): slow process-lite runtime telemetry refresh

This commit is contained in:
777genius 2026-05-31 03:46:25 +03:00
parent b2c416dee6
commit bc660e7e9b
2 changed files with 19 additions and 5 deletions

View file

@ -361,6 +361,8 @@ export function initializeNotificationListeners(): () => void {
const TEAM_REFRESH_THROTTLE_MS = 800;
const TEAM_PRESENCE_REFRESH_THROTTLE_MS = 400;
const TEAM_MEMBER_SPAWN_REFRESH_THROTTLE_MS = 500;
const TEAM_AGENT_RUNTIME_REFRESH_THROTTLE_MS = 500;
const TEAM_AGENT_RUNTIME_PROCESS_LITE_REFRESH_THROTTLE_MS = 5_000;
const TEAM_LIST_REFRESH_THROTTLE_MS = 2000;
const GLOBAL_TASKS_REFRESH_THROTTLE_MS = 500;
const GLOBAL_TASKS_REFRESH_DURING_LAUNCH_THROTTLE_MS = 5000;
@ -512,6 +514,10 @@ export function initializeNotificationListeners(): () => void {
if (teamAgentRuntimeRefreshTimers.has(timerKey)) {
return;
}
const throttleMs =
reason === 'event:process-lite'
? TEAM_AGENT_RUNTIME_PROCESS_LITE_REFRESH_THROTTLE_MS
: TEAM_AGENT_RUNTIME_REFRESH_THROTTLE_MS;
const timer = setTimeout(() => {
teamAgentRuntimeRefreshTimers.delete(timerKey);
if (options.skipIfHiddenAtExecution === true && !isTeamVisibleInAnyPane(teamName)) {
@ -533,7 +539,7 @@ export function initializeNotificationListeners(): () => void {
operation: 'fetchTeamAgentRuntime',
});
void useStore.getState().fetchTeamAgentRuntime(teamName);
}, TEAM_MEMBER_SPAWN_REFRESH_THROTTLE_MS);
}, throttleMs);
teamAgentRuntimeRefreshTimers.set(timerKey, timer);
};
const scheduleProcessLiteRuntimeRefresh = (teamName: string): void => {

View file

@ -298,8 +298,7 @@ describe('team change throttling', () => {
await vi.advanceTimersByTimeAsync(500);
expect(fetchMemberSpawnStatusesSpy).toHaveBeenCalledTimes(1);
expect(fetchMemberSpawnStatusesSpy).toHaveBeenCalledWith('my-team');
expect(fetchTeamAgentRuntimeSpy).toHaveBeenCalledTimes(1);
expect(fetchTeamAgentRuntimeSpy).toHaveBeenCalledWith('my-team');
expect(fetchTeamAgentRuntimeSpy).not.toHaveBeenCalled();
expect(refreshTeamDataSpy).not.toHaveBeenCalled();
expect(fetchTeamsSpy).not.toHaveBeenCalled();
@ -312,6 +311,10 @@ describe('team change throttling', () => {
expect(refreshTeamDataSpy).toHaveBeenCalledTimes(1);
expect(refreshTeamDataSpy).toHaveBeenCalledWith('my-team', { withDedup: true });
await vi.advanceTimersByTimeAsync(2_500);
expect(fetchTeamAgentRuntimeSpy).toHaveBeenCalledTimes(1);
expect(fetchTeamAgentRuntimeSpy).toHaveBeenCalledWith('my-team');
const summary = summarizeTeamRefreshFanout('my-team');
expect(summary.rows).toEqual(
expect.arrayContaining([
@ -436,14 +439,19 @@ describe('team change throttling', () => {
expect(refreshTeamDataSpy).not.toHaveBeenCalled();
await vi.advanceTimersByTimeAsync(799);
expect(refreshTeamDataSpy).not.toHaveBeenCalled();
expect(fetchMemberSpawnStatusesSpy).toHaveBeenCalledWith('my-team');
expect(fetchTeamAgentRuntimeSpy).not.toHaveBeenCalled();
await vi.advanceTimersByTimeAsync(1);
expect(fetchMemberSpawnStatusesSpy).toHaveBeenCalledWith('my-team');
expect(fetchMemberSpawnStatusesSpy).toHaveBeenCalledTimes(1);
expect(fetchTeamAgentRuntimeSpy).not.toHaveBeenCalled();
await vi.advanceTimersByTimeAsync(4_200);
expect(fetchTeamAgentRuntimeSpy).toHaveBeenCalledWith('my-team');
expect(useStore.getState().selectedTeamData).toBeNull();
expect(useStore.getState().teamDataCacheByName['my-team']).toBeUndefined();
await vi.advanceTimersByTimeAsync(19_200);
await vi.advanceTimersByTimeAsync(15_000);
expect(fetchTeamsSpy).not.toHaveBeenCalled();
expect(refreshTeamDataSpy).not.toHaveBeenCalled();