<!DOCTYPE html>

<html>
<head>
    <style>
        .mover {
            height: 100px;
            width: 3000px;
            background-color: gray;
            border: 1px solid black;
        }
        
        .mover.animating {
            animation: move 0.25s forwards linear;
        }
        
        @keyframes move {
            from { transform: translateX(1000px); }
            to { transform: translateX(-2000px); }
        }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }
        function doTest()
        {
            window.setTimeout(function() {
                var mover = document.getElementById('mover');
                mover.addEventListener('animationstart', function() {
                    if (window.internals)
                        internals.startTrackingLayerFlushes();
                });

                mover.addEventListener('animationend', function() {
                    if (window.internals) {
                        var flushCount = internals.layerFlushCount();
                        document.getElementById('result').textContent = flushCount ? "Saw layer flushes during animation: PASS" : "No layer flushes during animation: FAIL";
                    }
                    if (window.testRunner)
                        testRunner.notifyDone();
                });
                mover.classList.add('animating');
            }, 0);
        }
        window.addEventListener('load', doTest, false);
    </script>
</head>
<body>
<div id="mover" class="mover"></div>
<div id="result">This test must be run in the test harness.</div>
</body>
</html>
