| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| let targetBytes; |
| let closeWorker; |
| let garbageBytes = 0; |
| let garbage = []; |
| let timerId = null; |
| |
| function generateGarbage() { |
| if (timerId) { |
| clearTimeout(timerId); |
| } |
| const chunkBytes = 5 * 1024 * 1024; |
| const arrayLength = 10000; |
| const bytesPerElement = 8; |
| const bytesPerArray = arrayLength * bytesPerElement; |
| let generated = 0; |
| while (generated < chunkBytes) { |
| let array = new Array(arrayLength); |
| for (let j = 0; j < array.length; j++) { |
| array[j] = 1.0 / (garbageBytes + j + 1); |
| } |
| garbage.push(array); |
| generated += bytesPerArray; |
| } |
| |
| garbageBytes += generated; |
| if (garbageBytes < targetBytes) { |
| timerId = setTimeout(generateGarbage, 1); |
| } else { |
| postMessage("done"); |
| if (closeWorker) { |
| close(); |
| } |
| } |
| } |
| |
| onmessage = function(args) { |
| targetBytes = args.data.allocationsPerWorker; |
| closeWorker = args.data.closeWorker; |
| setTimeout(generateGarbage, 1); |
| } |