tor-browser

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

bug-1531626.js (1785B)


      1 // Test that setting the nursery size works as expected.
      2 //
      3 // It's an error to set the minimum size greater than the maximum
      4 // size. Parameter values are rounded to the nearest legal nursery
      5 // size.
      6 
      7 load(libdir + "asserts.js");
      8 
      9 const chunkSizeKB = gcparam('chunkBytes') / 1024;
     10 const pageSizeKB = gcparam('systemPageSizeKB');
     11 
     12 const testSizesKB = [128, 129, 255, 256, 516, 1023, 1024, 3*1024, 4*1024+1, 16*1024];
     13 
     14 // Valid maximum sizes must be >= 1MB.
     15 const testMaxSizesKB = testSizesKB.filter(x => x >= 1024);
     16 
     17 for (let max of testMaxSizesKB) {
     18  // Don't test minimums greater than the maximum.
     19  for (let min of testSizesKB.filter(x => x <= max)) {
     20    setMinMax(min, max);
     21  }
     22 }
     23 
     24 // The above loops raised the nursery size.  Now reduce it to ensure that
     25 // forcibly-reducing it works correctly.
     26 setMinMax(256, 1024);
     27 
     28 // Try invalid configurations.
     29 const badSizesKB = [ 0, 1, 129 * 1024];
     30 function assertParamOutOfRange(f) {
     31  assertErrorMessage(f, Object, "Parameter value out of range");
     32 }
     33 for (let size of badSizesKB) {
     34  assertParamOutOfRange(() => gcparam('minNurseryBytes', size * 1024));
     35  assertParamOutOfRange(() => gcparam('maxNurseryBytes', size * 1024));
     36 }
     37 
     38 function setMinMax(min, max) {
     39  gcparam('minNurseryBytes', min * 1024);
     40  gcparam('maxNurseryBytes', max * 1024);
     41  assertEq(gcparam('minNurseryBytes'), nearestLegalSize(min) * 1024);
     42  assertEq(gcparam('maxNurseryBytes'), nearestLegalSize(max) * 1024);
     43  allocateSomeThings();
     44  gc();
     45 }
     46 
     47 function allocateSomeThings() {
     48  for (let i = 0; i < 1000; i++) {
     49    let obj = { an: 'object', with: 'fields' };
     50  }
     51 }
     52 
     53 function nearestLegalSize(sizeKB) {
     54  let step = sizeKB >= chunkSizeKB ? chunkSizeKB : pageSizeKB;
     55  return round(sizeKB, step);
     56 }
     57 
     58 function round(x, y) {
     59  x += y / 2;
     60  return x - (x % y);
     61 }