<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<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>
