| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start( |
| 'Checks that inspector does not retain old collected scripts.\n'); |
| |
| (async function main() { |
| InspectorTest.log('Limit scripts cache size to 1MB'); |
| const maxScriptsCacheSize = 1e6; |
| Protocol.Debugger.enable({maxScriptsCacheSize}); |
| const scriptIds = []; |
| Protocol.Debugger.onScriptParsed(message => scriptIds.push(message.params.scriptId)); |
| |
| InspectorTest.log('Generate 15 scripts 100KB each'); |
| await Protocol.Runtime.evaluate({ |
| expression: 'for (let i = 0; i < 15; ++i) eval(`"${new Array(5e4).fill("й").join("")}".length`);'}); |
| await Protocol.HeapProfiler.collectGarbage(); |
| const firstPhaseScripts = scriptIds.length; |
| |
| InspectorTest.log('Generate 15 more scripts 100KB each'); |
| await Protocol.Runtime.evaluate({ |
| expression: 'for (let i = 0; i < 15; ++i) eval(`"${new Array(5e4).fill("й").join("")}".length`);'}); |
| await Protocol.HeapProfiler.collectGarbage(); |
| |
| InspectorTest.log('Check that earlier scripts are gone'); |
| InspectorTest.logMessage(`Total scripts size < 1KB: ${await sizeOfScripts(scriptIds.slice(0, firstPhaseScripts)) < 1e3}`); |
| |
| InspectorTest.log('Check that some of the later scripts are still there'); |
| InspectorTest.logMessage(`Total scripts size > 850KB: ${await sizeOfScripts(scriptIds) > 850e3}`); |
| |
| InspectorTest.completeTest(); |
| |
| async function sizeOfScripts(scriptIds) { |
| let size = 0; |
| for (const scriptId of scriptIds) { |
| const result = await Protocol.Debugger.getScriptSource({scriptId}); |
| size += result.result ? result.result.scriptSource.length * 2 : 0; |
| } |
| return size; |
| } |
| })(); |