var abort = $vm.abort;

if (platformSupportsSamplingProfiler()) {
    load("./sampling-profiler/samplingProfiler.js");

    let tree = null;
    function testResults() {
        if (!tree)
            tree = makeTree();
        else
            updateCallingContextTree(tree);

        let result = doesTreeHaveStackTrace(tree, ["jar", "hello", "promiseReactionJob"], false);
        return result;
    }

    let o1 = {};
    let o2 = {};
    function jar(x) {
        for (let i = 0; i < 1000; i++) {
            o1[i] = i;
            o2[i] = i + o1[i];
            i++;
            i--;
        }
        return x;
    }
    noInline(jar)

    let numLoops = 0;
    function loop() {
        let counter = 0;
        const numPromises = 100;
        function jaz() {
            Promise.resolve(42).then(function hello(v1) {
                for (let i = 0; i < 100; i++)
                    jar();
                counter++;
                if (counter >= numPromises) {
                    numLoops++;
                    if (!testResults()) {
                        if (numLoops > 5)
                            abort();
                        else
                            loop();
                    }
                }
            });
        }

        for (let i = 0; i < numPromises; i++)
            jaz();
    }

    loop();
}
