<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <style>
        body {
            overflow: hidden;
        }

        @keyframes rotate {
            0% {
                transform: rotate(90deg);
            }
            100% {
                transform: rotate(90.001deg);
            }
        }
        
        .box {
            position: absolute;
            right: -150px;
            width: 400px;
            height: 400px;
            animation: rotate 1000s linear infinite;
            will-change: transform;
            background-color: gray;
            font-size: 24pt;
            color: white;
            padding: 20px;
            box-sizing: border-box;
        }
    </style>
    <script src="../resources/compositing-test-utils.js"></script>
    <script>
        if (window.testRunner) {
            testRunner.waitUntilDone();
            testRunner.dumpAsText();
        }

        function dumpLayers()
        {
            var layersResult = document.getElementById('layers');
            if (window.testRunner)
                layersResult.innerText = layerTreeWithoutTransforms(internals.LAYER_TREE_INCLUDES_BACKING_STORE_ATTACHED);
        }

        window.addEventListener('load', () => {
            requestAnimationFrame(() => {
                requestAnimationFrame(() => {
                    dumpLayers();
                    if (window.testRunner)
                        testRunner.notifyDone();
                });
            });
        }, false);
    </script>
</head>
<body>
    <div class="box">
        top left
    </div>
<pre id="layers"></pre>
</body>
</html>
