tor-browser

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

basic-profiler-2.js (2016B)


      1 // |jit-test| skip-if: !WasmHelpers.isSingleStepProfilingEnabled
      2 
      3 // Test profiling of JS PI non-suspending import call.
      4 
      5 const {
      6  assertEqImpreciseStacks,
      7 } = WasmHelpers;
      8 
      9 var compute_delta = (i) => i / 100;
     10 
     11 var ins = wasmEvalText(`(module
     12  (import "js" "compute_delta"
     13    (func $compute_delta (param i32) (result f64)))
     14 
     15  (global $state (mut f64) (f64.const 0))
     16 
     17  (func (export "update_state_export") (param i32) (result f64)
     18    (global.set $state (f64.add
     19      (global.get $state) (call $compute_delta (local.get 0))))
     20    (global.get $state)
     21  )
     22 )`, {
     23    js: {
     24      compute_delta,
     25    },
     26 });
     27 
     28 var update_state = WebAssembly.promising(
     29    ins.exports.update_state_export
     30 );
     31 
     32 enableGeckoProfiling();
     33 
     34 enableSingleStepProfiling();
     35 
     36 function wb(s) {
     37  var p = s.split(",");
     38  p[0] = "<";
     39  var t = p.join(",");
     40  return [t, s, t];
     41 }
     42 
     43 var res = update_state(4);
     44 var tasks = res.then((r) => {
     45  assertEq(r, .04);
     46  const stacks = disableSingleStepProfiling();
     47  assertEqImpreciseStacks(stacks,
     48    [
     49      "",
     50      ">",
     51      "1,>",                                   // enter $promising.exported
     52      ...wb("CreateSuspender,1,>"),
     53      "1,>",
     54      ...wb("CreatePromisingPromise,1,>"),
     55      "1,>",
     56      ...wb("#ref.func function,1,>"),         // ref to $promising.trampoline
     57      "1,>",
     58      ...wb("#update suspender state util,1,>"),
     59      "1,>",
     60      "2,1,>",                                 // enter $promising.trampoline
     61      "1,2,1,>",                               // enter "update_state_export"
     62      "<,1,2,1,>",                             // JS compute_delta
     63      "1,2,1,>",                               // exiting from "update_state_export"
     64      "2,1,>",                                 // at $promising.trampoline
     65      ...wb("SetPromisingPromiseResults,2,1,>"),
     66      "2,1,>",
     67      "1,>",
     68      ...wb("#update suspender state util,1,>"),
     69      "1,>",                                   // exiting $promising.exported
     70      ">",
     71      ""
     72    ]
     73  );
     74 
     75  disableGeckoProfiling();
     76 });