tor-browser

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

apply-optimization.js (1114B)


      1 function make(k) {
      2    var a = new Array(k);
      3    for ( let i=0 ; i < k ; i++ )
      4 a[i] = {}
      5    return a;
      6 }
      7 
      8 function g() {
      9    return arguments.length;
     10 }
     11 
     12 function f(a) {
     13    var sum = 0;
     14    for ( let i=0 ; i < 1000 ; i++ )
     15 sum += g.apply(null, a);
     16    return sum;
     17 }
     18 
     19 function F2() {
     20    var sum = 0;
     21    for ( let i=0 ; i < 1000 ; i++ )
     22 sum += g.apply(null, arguments);
     23    return sum;
     24 }
     25 
     26 function F(a) {
     27    return F2.apply(null, a);
     28 }
     29 
     30 function time(k, t) {
     31    var then = Date.now();
     32    assertEq(t(), 1000*k);
     33    var now = Date.now();
     34    return now - then;
     35 }
     36 
     37 function p(v) {
     38    // Uncomment to see timings
     39    // print(v);
     40 }
     41 
     42 f(make(200));
     43 
     44 // There is currently a cutoff after 375 where we bailout in order to avoid
     45 // handling very large stack frames.  This slows the operation down by a factor
     46 // of 100 or so.
     47 
     48 p(time(374, () => f(make(374))));
     49 p(time(375, () => f(make(375))));
     50 p(time(376, () => f(make(376))));
     51 p(time(377, () => f(make(377))));
     52 
     53 F(make(200));
     54 
     55 p(time(374, () => F(make(374))));
     56 p(time(375, () => F(make(375))));
     57 p(time(376, () => F(make(376))));
     58 p(time(377, () => F(make(377))));