tor-browser

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

gc-during-bailout.js (3652B)


      1 setJitCompilerOption("ion.warmup.trigger", 30);
      2 gcPreserveCode();
      3 var o = {};
      4 
      5 function f(i) {
      6    var obj_1 = { a: 0 };
      7    var obj_2 = { a: 0 };
      8    var obj_3 = { a: 0 };
      9    var obj_4 = { a: 0 };
     10    var obj_5 = { a: 0 };
     11    var obj_6 = { a: 0 };
     12    var obj_7 = { a: 0 };
     13    var obj_8 = { a: 0 };
     14    var obj_9 = { a: 0 };
     15    var obj_10 = { a: 0 };
     16    var obj_11 = { a: 0 };
     17    var obj_12 = { a: 0 };
     18    var obj_13 = { a: 0 };
     19    var obj_14 = { a: 0 };
     20    var obj_15 = { a: 0 };
     21    var obj_16 = { a: 0 };
     22    var obj_17 = { a: 0 };
     23    var obj_18 = { a: 0 };
     24    var obj_19 = { a: 0 };
     25    var obj_20 = { a: 0 };
     26    var obj_21 = { a: 0 };
     27    var obj_22 = { a: 0 };
     28    var obj_23 = { a: 0 };
     29    var obj_24 = { a: 0 };
     30    var obj_25 = { a: 0 };
     31    var obj_26 = { a: 0 };
     32    var obj_27 = { a: 0 };
     33    var obj_28 = { a: 0 };
     34    var obj_29 = { a: 0 };
     35    var obj_30 = { a: 0 };
     36 
     37    // Doing a bailout after the return of the function call implies that we
     38    // cannot resume before the function call.  Thus, we would have to recover
     39    // the 30 objects allocations during the bailout.
     40    schedulegc(i % 100);
     41    bailout();
     42 
     43    obj_1.a = 1;
     44    obj_2.a = 1;
     45    obj_3.a = 1;
     46    obj_4.a = 1;
     47    obj_5.a = 1;
     48    obj_6.a = 1;
     49    obj_7.a = 1;
     50    obj_8.a = 1;
     51    obj_9.a = 1;
     52    obj_10.a = 1;
     53    obj_11.a = 1;
     54    obj_12.a = 1;
     55    obj_13.a = 1;
     56    obj_14.a = 1;
     57    obj_15.a = 1;
     58    obj_16.a = 1;
     59    obj_17.a = 1;
     60    obj_18.a = 1;
     61    obj_19.a = 1;
     62    obj_20.a = 1;
     63    obj_21.a = 1;
     64    obj_22.a = 1;
     65    obj_23.a = 1;
     66    obj_24.a = 1;
     67    obj_25.a = 1;
     68    obj_26.a = 1;
     69    obj_27.a = 1;
     70    obj_28.a = 1;
     71    obj_29.a = 1;
     72    obj_30.a = 1;
     73 }
     74 
     75 for (var i = 0; i < 200; i++) {
     76    // Do not inline 'f', to keep re-entering 'f' at every loop iteration.
     77    with (o) { }
     78    f(i);
     79 }
     80 
     81 // This is the same test except that we do not preserve code under shrinking GC.
     82 gczeal(14);
     83 
     84 function g(i) {
     85    var obj_1 = { a: 0 };
     86    var obj_2 = { a: 0 };
     87    var obj_3 = { a: 0 };
     88    var obj_4 = { a: 0 };
     89    var obj_5 = { a: 0 };
     90    var obj_6 = { a: 0 };
     91    var obj_7 = { a: 0 };
     92    var obj_8 = { a: 0 };
     93    var obj_9 = { a: 0 };
     94    var obj_10 = { a: 0 };
     95    var obj_11 = { a: 0 };
     96    var obj_12 = { a: 0 };
     97    var obj_13 = { a: 0 };
     98    var obj_14 = { a: 0 };
     99    var obj_15 = { a: 0 };
    100    var obj_16 = { a: 0 };
    101    var obj_17 = { a: 0 };
    102    var obj_18 = { a: 0 };
    103    var obj_19 = { a: 0 };
    104    var obj_20 = { a: 0 };
    105    var obj_21 = { a: 0 };
    106    var obj_22 = { a: 0 };
    107    var obj_23 = { a: 0 };
    108    var obj_24 = { a: 0 };
    109    var obj_25 = { a: 0 };
    110    var obj_26 = { a: 0 };
    111    var obj_27 = { a: 0 };
    112    var obj_28 = { a: 0 };
    113    var obj_29 = { a: 0 };
    114    var obj_30 = { a: 0 };
    115 
    116    // Doing a bailout after the return of the function call implies that we
    117    // cannot resume before the function call.  Thus, we would have to recover
    118    // the 30 objects allocations during the bailout.
    119    schedulegc(i % 100);
    120    bailout();
    121 
    122    obj_1.a = 1;
    123    obj_2.a = 1;
    124    obj_3.a = 1;
    125    obj_4.a = 1;
    126    obj_5.a = 1;
    127    obj_6.a = 1;
    128    obj_7.a = 1;
    129    obj_8.a = 1;
    130    obj_9.a = 1;
    131    obj_10.a = 1;
    132    obj_11.a = 1;
    133    obj_12.a = 1;
    134    obj_13.a = 1;
    135    obj_14.a = 1;
    136    obj_15.a = 1;
    137    obj_16.a = 1;
    138    obj_17.a = 1;
    139    obj_18.a = 1;
    140    obj_19.a = 1;
    141    obj_20.a = 1;
    142    obj_21.a = 1;
    143    obj_22.a = 1;
    144    obj_23.a = 1;
    145    obj_24.a = 1;
    146    obj_25.a = 1;
    147    obj_26.a = 1;
    148    obj_27.a = 1;
    149    obj_28.a = 1;
    150    obj_29.a = 1;
    151    obj_30.a = 1;
    152 }
    153 
    154 for (var i = 0; i < 200; i++) {
    155    // Do not inline 'g', to keep re-entering 'g' at every loop iteration.
    156    with (o) { }
    157    g(i);
    158 }