diff --git a/packages/SwingSet/src/kernel/kernel.js b/packages/SwingSet/src/kernel/kernel.js index 6ea24bb3d49..13a41731d4c 100644 --- a/packages/SwingSet/src/kernel/kernel.js +++ b/packages/SwingSet/src/kernel/kernel.js @@ -146,8 +146,14 @@ export default function buildKernel( } harden(testLog); - function makeVatConsole(vatID) { - const origConsole = makeConsole(`${debugPrefix}SwingSet:${vatID}`); + function makeVatConsole(kind, vatID) { + const origConsole = makeConsole(`${debugPrefix}SwingSet:${kind}:${vatID}`); + if (kind === 'ls') { + // LiveSlots is not recorded to kernelSlog. + // The slog captures 1: what a vat is told to do, and + // 2: what a vat says about its activities + return origConsole; + } return kernelSlog.vatConsole(vatID, origConsole); } diff --git a/packages/SwingSet/src/kernel/liveSlots.js b/packages/SwingSet/src/kernel/liveSlots.js index c2add6ca14f..b42698ec667 100644 --- a/packages/SwingSet/src/kernel/liveSlots.js +++ b/packages/SwingSet/src/kernel/liveSlots.js @@ -28,6 +28,7 @@ const DEFAULT_VIRTUAL_OBJECT_CACHE_SIZE = 3; // XXX ridiculously small value to * @param {number} cacheSize Maximum number of entries in the virtual object state cache * @param {*} vatPowers * @param {*} vatParameters + * @param {Console} console * @returns {*} { vatGlobals, dispatch, setBuildRootObject } * * setBuildRootObject should be called, once, with a function that will @@ -36,7 +37,14 @@ const DEFAULT_VIRTUAL_OBJECT_CACHE_SIZE = 3; // XXX ridiculously small value to * * buildRootObject(vatPowers, vatParameters) */ -function build(syscall, forVatID, cacheSize, vatPowers, vatParameters) { +function build( + syscall, + forVatID, + cacheSize, + vatPowers, + vatParameters, + console, +) { const enableLSDebug = false; function lsdebug(...args) { if (enableLSDebug) { @@ -214,6 +222,12 @@ function build(syscall, forVatID, cacheSize, vatPowers, vatParameters) { // eslint-disable-next-line no-use-before-define const m = makeMarshal(convertValToSlot, convertSlotToVal, { marshalName: `liveSlots:${forVatID}`, + marshalSaveError: err => + // By sending this to `console.log`, under cosmic-swingset this is + // controlled by the `console` option given to makeLiveSlots. For Agoric, + // this output is enabled by `agoric start -v` and not enabled without the + // `-v` flag. + console.log('Logging sent error stack', err), }); const { @@ -635,6 +649,7 @@ function build(syscall, forVatID, cacheSize, vatPowers, vatParameters) { * @param {*} vatParameters * @param {number} cacheSize Upper bound on virtual object cache size * @param {*} _gcTools + * @param {Console} [liveSlotsConsole] * @returns {*} { vatGlobals, dispatch, setBuildRootObject } * * setBuildRootObject should be called, once, with a function that will @@ -666,12 +681,20 @@ export function makeLiveSlots( vatParameters = harden({}), cacheSize = DEFAULT_VIRTUAL_OBJECT_CACHE_SIZE, _gcTools, + liveSlotsConsole = console, ) { const allVatPowers = { ...vatPowers, makeMarshal, }; - const r = build(syscall, forVatID, cacheSize, allVatPowers, vatParameters); + const r = build( + syscall, + forVatID, + cacheSize, + allVatPowers, + vatParameters, + liveSlotsConsole, + ); const { vatGlobals, dispatch, setBuildRootObject } = r; // omit 'm' return harden({ vatGlobals, dispatch, setBuildRootObject }); } diff --git a/packages/SwingSet/src/kernel/loadVat.js b/packages/SwingSet/src/kernel/loadVat.js index 73d6a7781b0..4260c57c8fc 100644 --- a/packages/SwingSet/src/kernel/loadVat.js +++ b/packages/SwingSet/src/kernel/loadVat.js @@ -209,7 +209,8 @@ export function makeVatLoader(stuff) { enablePipelining, enableInternalMetering: !isDynamic, notifyTermination, - vatConsole: makeVatConsole(vatID), + vatConsole: makeVatConsole('vat', vatID), + liveSlotsConsole: makeVatConsole('ls', vatID), vatParameters, virtualObjectCacheSize, }; diff --git a/packages/SwingSet/src/kernel/vatManager/factory.js b/packages/SwingSet/src/kernel/vatManager/factory.js index bf6dff91fd8..048eb21e22e 100644 --- a/packages/SwingSet/src/kernel/vatManager/factory.js +++ b/packages/SwingSet/src/kernel/vatManager/factory.js @@ -59,6 +59,7 @@ export function makeVatManagerFactory({ 'metered', 'enableSetup', 'enableInternalMetering', + 'liveSlotsConsole', 'notifyTermination', 'virtualObjectCacheSize', 'vatParameters', diff --git a/packages/SwingSet/src/kernel/vatManager/manager-local.js b/packages/SwingSet/src/kernel/vatManager/manager-local.js index b3f9455a197..ab855419ede 100644 --- a/packages/SwingSet/src/kernel/vatManager/manager-local.js +++ b/packages/SwingSet/src/kernel/vatManager/manager-local.js @@ -88,6 +88,7 @@ export function makeLocalVatManagerFactory(tools) { enableInternalMetering = false, vatParameters = {}, vatConsole, + liveSlotsConsole, virtualObjectCacheSize, } = managerOptions; assert(vatConsole, 'vats need managerOptions.vatConsole'); @@ -110,6 +111,7 @@ export function makeLocalVatManagerFactory(tools) { vatParameters, virtualObjectCacheSize, gcTools, + liveSlotsConsole, ); let meterRecord = null;