<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function triggerGCs()
{
    function allocateObjects() {
        var list = [];
        for (var i = 0; i < 100; ++i)
            list.push({x:i});
        return list;
    }

    function allocateLargeList() {
        var largeList = [];
        for (var i = 0; i < 100; ++i)
            largeList.push(allocateObjects());
        return largeList;
    }

    var partialList = [];
    for (var i = 0; i < 100; ++i)
        partialList.push(allocateLargeList());
}

function periodicallyTriggerGCs()
{
    setInterval(triggerGCs, 20);
}

function test()
{
    let suite = InspectorTest.createAsyncSuite("Heap.garbageCollected");

    suite.addTestCase({
        name: "TriggerGCs",
        description: "Evaluating allocation-heavy JavaScript should trigger Heap.garbageCollected events.",
        test(resolve, reject) {
            InspectorTest.evaluateInPage("periodicallyTriggerGCs()");

            let seenFull = false;
            let seenPartial = false;
            WI.heapManager.addEventListener(WI.HeapManager.Event.GarbageCollected, (event) => {
                if (seenFull && seenPartial)
                    return;

                if (event.data.collection.type === WI.GarbageCollection.Type.Full)
                    seenFull = true;
                else if (event.data.collection.type === WI.GarbageCollection.Type.Partial)
                    seenPartial = true;

                if (seenFull && seenPartial) {
                    InspectorTest.log("PASS: Should see both a Partial and Full Garbage Collection.");
                    resolve();
                }
            });
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test for the Heap.garbageCollected event.</p>
</body>
</html>
