<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/timeline-test.js"></script>
<script>

function display()
{
    if (window.testRunner)
        testRunner.display();
}

function updateSubframeAndDisplay()
{
    frames[0].document.body.children[0].style.backgroundColor = "green";
    if (window.testRunner)
        testRunner.displayInvalidatedRegion();
}

function test()
{
    step1();

    function step1()
    {
        InspectorTest.evaluateWithTimeline("display()", step2);
    }

    function step2(records)
    {
        for (var i = 0; i < records.length; ++i) {
            var record = records[i];
            if (record.type === WebInspector.TimelineModel.RecordType.Paint) {
                InspectorTest.printTimelineRecordProperties(record);
                break;
            }
        }
        InspectorTest.evaluateWithTimeline("updateSubframeAndDisplay()", step3);
    }

    function step3(records)
    {
        var paintRecord;
        for (var i = 0; i < records.length; ++i) {
            var record = records[i];
            if (record.type === WebInspector.TimelineModel.RecordType.Paint && record.children && record.children.length) {
                paintRecord = record;
                break;
            }
        }
        InspectorTest.assertTrue(paintRecord, "Paint record with subframe paint not found");
        var topQuad = paintRecord.data.clip;
        var subframePaint = paintRecord.children[0];
        var subframeQuad = subframePaint.data.clip;
        InspectorTest.assertEquals(8, topQuad.length);
        InspectorTest.assertEquals(8, subframeQuad.length);
        InspectorTest.assertGreaterOrEqual(subframeQuad[0], topQuad[0]);
        InspectorTest.assertGreaterOrEqual(subframeQuad[1], topQuad[1]);
        InspectorTest.assertGreaterOrEqual(topQuad[2], subframeQuad[2]);
        InspectorTest.assertGreaterOrEqual(subframeQuad[3], topQuad[3]);
        InspectorTest.assertGreaterOrEqual(topQuad[4], subframeQuad[4]);
        InspectorTest.assertGreaterOrEqual(topQuad[5], subframeQuad[5]);
        InspectorTest.assertGreaterOrEqual(subframeQuad[6], topQuad[6]);
        InspectorTest.assertGreaterOrEqual(topQuad[7], subframeQuad[7]);

        InspectorTest.completeTest();
    }
}

</script>
</head>

<body onload="runTest()">
<p>
Tests the Timeline API instrumentation of a paint event
</p>
<iframe src="resources/timeline-iframe-paint.html" style="position: absolute; left: 40px; top: 40px; width: 100px; height: 100px; border: none"></iframe>
</body>
</html>
