orca/src/preload/renderer-heap-statistics-re...

75 lines
2.2 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest'
import { readRendererHeapStatistics } from './renderer-heap-statistics-reader'
const heapStatistics = {
totalHeapSize: 2048,
totalHeapSizeExecutable: 0,
totalPhysicalSize: 2048,
totalAvailableSize: 4_000_000,
usedHeapSize: 1536,
heapSizeLimit: 4_292_608,
mallocedMemory: 64,
peakMallocedMemory: 96,
doesZapGarbage: false
}
const source = (overrides: {
heap?: () => Electron.HeapStatistics
blink?: () => Electron.BlinkMemoryInfo
}): Parameters<typeof readRendererHeapStatistics>[0] =>
({
getHeapStatistics: overrides.heap ?? ((): Electron.HeapStatistics => heapStatistics),
getBlinkMemoryInfo:
overrides.blink ?? ((): Electron.BlinkMemoryInfo => ({ allocated: 1227, total: 1280 }))
}) as Parameters<typeof readRendererHeapStatistics>[0]
describe('readRendererHeapStatistics', () => {
it('reports V8 sizes in the kilobytes Electron returns', () => {
expect(readRendererHeapStatistics(source({}))).toEqual({
usedHeapKB: 1536,
totalHeapKB: 2048,
heapLimitKB: 4_292_608,
mallocedKB: 64,
blinkAllocatedKB: 1227
})
})
it('keeps the exact V8 read when only the Blink metric throws', () => {
// Why: Blink's number is supplementary. Discarding the V8 read over its
// absence would send callers back to the quantized `performance.memory`
// this reader exists to replace — silently defeating the whole feature.
const result = readRendererHeapStatistics(
source({
blink: () => {
throw new Error('getBlinkMemoryInfo unavailable')
}
})
)
expect(result).toEqual({
usedHeapKB: 1536,
totalHeapKB: 2048,
heapLimitKB: 4_292_608,
mallocedKB: 64,
blinkAllocatedKB: undefined
})
})
it('returns null only when the primary V8 read fails', () => {
const blink = vi.fn()
expect(
readRendererHeapStatistics(
source({
heap: () => {
throw new Error('getHeapStatistics unavailable')
},
blink: blink as never
})
)
).toBeNull()
// Why: no reason to pay for the auxiliary call once the result is unusable.
expect(blink).not.toHaveBeenCalled()
})
})