diff --git a/packages/SwingSet/src/kernel/state/vatKeeper.js b/packages/SwingSet/src/kernel/state/vatKeeper.js index d307bc77e7b..91a05ce8757 100644 --- a/packages/SwingSet/src/kernel/state/vatKeeper.js +++ b/packages/SwingSet/src/kernel/state/vatKeeper.js @@ -677,13 +677,7 @@ export function makeVatKeeper( restartWorker, ); - const { - hash: snapshotID, - uncompressedSize, - dbSaveSeconds, - compressedSize, - compressSeconds, - } = info; + const { hash: snapshotID } = info; // push a save-snapshot transcript entry addToTranscript(makeSaveSnapshotItem(snapshotID)); @@ -695,18 +689,6 @@ export function makeVatKeeper( // always starts with an initialize-worker or load-snapshot // pseudo-delivery addToTranscript(makeLoadSnapshotItem(snapshotID)); - - kernelSlog.write({ - type: 'heap-snapshot-save', - vatID, - snapshotID, - uncompressedSize, - dbSaveSeconds, - compressedSize, - compressSeconds, - endPosition, - restartWorker, - }); } /** diff --git a/packages/SwingSet/src/kernel/vat-loader/manager-subprocess-xsnap.js b/packages/SwingSet/src/kernel/vat-loader/manager-subprocess-xsnap.js index ff9a4bb1d50..aeb66fd19dd 100644 --- a/packages/SwingSet/src/kernel/vat-loader/manager-subprocess-xsnap.js +++ b/packages/SwingSet/src/kernel/vat-loader/manager-subprocess-xsnap.js @@ -128,8 +128,10 @@ export function makeXsSubprocessFactory({ const vatKeeper = kernelKeeper.provideVatKeeper(vatID); const snapshotInfo = vatKeeper.getSnapshotInfo(); + let uncompressedSizeLoaded = null; if (snapshotInfo) { kernelSlog.write({ type: 'heap-snapshot-load', vatID, ...snapshotInfo }); + uncompressedSizeLoaded = snapshotInfo.uncompressedSize; } // `startXSnap` adds `nameDisplayArg` as a dummy argument so that 'ps' @@ -240,9 +242,31 @@ export function makeXsSubprocessFactory({ async function makeSnapshot(snapPos, snapStore, restartWorker) { const snapshotDescription = `${vatID}-${snapPos}`; const snapshotStream = worker.makeSnapshotStream(snapshotDescription); + const saveSnapshot = async saveStream => { + const results = await snapStore.saveSnapshot( + vatID, + snapPos, + saveStream, + ); + const { hash: snapshotID, ...metrics } = results; + const uncompressedSizeDelta = + uncompressedSizeLoaded && + metrics.uncompressedSize - uncompressedSizeLoaded; + uncompressedSizeLoaded = results.uncompressedSize; + kernelSlog.write({ + type: 'heap-snapshot-save', + vatID, + snapshotID, + endPosition: snapPos, + ...metrics, + uncompressedSizeDelta, + restartWorker, + }); + return results; + }; if (!restartWorker) { - return snapStore.saveSnapshot(vatID, snapPos, snapshotStream); + return saveSnapshot(snapshotStream); } /** @type {AsyncGenerator[]} */ @@ -268,7 +292,7 @@ export function makeXsSubprocessFactory({ snapshotDescription, }, }), - snapStore.saveSnapshot(vatID, snapPos, snapStoreSaveStream), + saveSnapshot(snapStoreSaveStream), ]); await closeP;