Home | History | Annotate | Download | only in perf
      1 const REPORT_URL = 'http://localhost:8081/report_perf_data'
      2 // Set this to enforce that the perf server must be up.
      3 // Typically used for debugging.
      4 const fail_on_no_perf = false;
      5 
      6 
      7 function benchmarkAndReport(benchName, setupFn, testFn, teardownFn) {
      8     let ctx = {};
      9     // warmup 3 times (arbitrary choice)
     10     setupFn(ctx);
     11     testFn(ctx);
     12     testFn(ctx);
     13     testFn(ctx);
     14     teardownFn(ctx);
     15 
     16     ctx = {};
     17     setupFn(ctx);
     18     let start = Date.now();
     19     let now = start;
     20     times = 0;
     21     // See how many times we can do it in 100ms (arbitrary choice)
     22     while (now - start < 100) {
     23         testFn(ctx);
     24         now = Date.now();
     25         times++;
     26     }
     27 
     28     teardownFn(ctx);
     29 
     30     // Try to make it go for 2 seconds (arbitrarily chosen)
     31     // Since the pre-try took 100ms, multiply by 20 to get
     32     // approximate tries in 2s
     33     let goalTimes = times * 20;
     34     setupFn(ctx);
     35     start = Date.now();
     36     times = 0;
     37     while (times < goalTimes) {
     38         testFn(ctx);
     39         times++;
     40     }
     41     let end = Date.now();
     42     teardownFn(ctx);
     43 
     44     let us = (end - start) * 1000 / times;
     45     console.log(benchName, `${us} microseconds`)
     46     return _report(us, benchName);
     47 }
     48 
     49 
     50 function _report(microseconds, benchName) {
     51     return fetch(REPORT_URL, {
     52         method: 'POST',
     53         mode: 'no-cors',
     54         headers: {
     55             'Content-Type': 'application/json',
     56         },
     57         body: JSON.stringify({
     58             'bench_name': benchName,
     59             'time_us': microseconds,
     60         })
     61     }).then(() => console.log(`Successfully reported ${benchName} to perf aggregator`));
     62 }
     63 
     64 function reportError(done) {
     65     return (e) => {
     66         console.log("Error with fetching. Likely could not connect to aggegator server", e.message);
     67         if (fail_on_no_perf) {
     68             expect(e).toBeUndefined();
     69         }
     70         done();
     71     };
     72 }