tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

wasm-gc-limits-gen.js (2280B)


      1 // Generates large .wasm files for use in ../limits.js.
      2 // Make sure you are running this script from a release build or you will be sad.
      3 
      4 loadRelativeToScript("../wasm-binary.js");
      5 
      6 function moduleNRecGroupNTypes(numRecs, numTypes) {
      7  let types = [];
      8  for (let i = 0; i < numTypes; i++) {
      9    types.push({ kind: FuncCode, args: [], ret: [] });
     10  }
     11  let recs = [];
     12  for (let i = 0; i < numRecs; i++) {
     13    recs.push(recGroup(types));
     14  }
     15  return new Uint8Array(compressLZ4(new Uint8Array(moduleWithSections([typeSection(recs)])).buffer));
     16 }
     17 
     18 os.file.writeTypedArrayToFile("wasm-gc-limits-r1M-t1.wasm", moduleNRecGroupNTypes(1_000_000, 1));
     19 os.file.writeTypedArrayToFile("wasm-gc-limits-r1M1-t1.wasm", moduleNRecGroupNTypes(1_000_001, 1));
     20 os.file.writeTypedArrayToFile("wasm-gc-limits-r1-t1M.wasm", moduleNRecGroupNTypes(1, 1_000_000));
     21 os.file.writeTypedArrayToFile("wasm-gc-limits-r1-t1M1.wasm", moduleNRecGroupNTypes(1, 1_000_001));
     22 os.file.writeTypedArrayToFile("wasm-gc-limits-r2-t500K.wasm", moduleNRecGroupNTypes(2, 500_000));
     23 os.file.writeTypedArrayToFile("wasm-gc-limits-r2-t500K1.wasm", moduleNRecGroupNTypes(2, 500_001));
     24 
     25 function moduleLargeStruct(size) {
     26  let structInitializer = [];
     27  for (let i = 0; i < size; i++) {
     28    structInitializer.push(I64ConstCode);
     29    structInitializer.push(...varU32(0));
     30  }
     31  return new Uint8Array(compressLZ4(new Uint8Array(moduleWithSections([
     32    typeSection([
     33      {
     34        kind: StructCode,
     35        fields: Array(size).fill(I64Code)
     36      },
     37      {
     38        kind: FuncCode,
     39        args: [],
     40        ret: [AnyRefCode]
     41      }
     42    ]),
     43    declSection([1, 1]),
     44    exportSection([
     45      {name: "makeLargeStructDefault", funcIndex: 0},
     46      {name: "makeLargeStruct", funcIndex: 1}
     47    ]),
     48    bodySection([
     49      funcBody({
     50        locals: [],
     51        body: [
     52          GcPrefix,
     53          StructNewDefault,
     54          ...varU32(0)
     55        ],
     56      }),
     57      funcBody({
     58        locals: [],
     59        body: [
     60          ...structInitializer,
     61          GcPrefix,
     62          StructNew,
     63          ...varU32(0)
     64        ],
     65      }),
     66    ]),
     67  ])).buffer));
     68 }
     69 
     70 os.file.writeTypedArrayToFile("wasm-gc-limits-s10K.wasm", moduleLargeStruct(10_000));
     71 os.file.writeTypedArrayToFile("wasm-gc-limits-s10K1.wasm", moduleLargeStruct(10_001));