<!DOCTYPE html>

<html>
<head>
    <style>
        .box {
            width: 120px;
            height: 100px;
            background-color: blue;
            margin: 100px 100px;
            position: relative;
            box-shadow: 0 0 10px black;
            transition: transform 5s;
            transform: translateX(-400px);
        }

        .sublayer {
            width: 20px;
            height: 20px;
            background-color: green;
            position: relative;
            box-shadow: 0 0 10px black;
            will-change: transform;
        }
        
        body.changed .box {
            transform: translateX(0px);
        }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function filterString(inputString, skippedLinesRegexp)
        {
            var lines = inputString.split("\n");
            var filtered = lines.filter(function (str) { return !skippedLinesRegexp.test(str); });
            return filtered.join("\n");
        }

        function dumpLayers()
        {
            if (window.testRunner) {
                output.innerText = filterString(window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_BACKING_STORE_ATTACHED), /transform/);
                testRunner.notifyDone();
            }
        }

        window.addEventListener("load", function() {
            document.body.classList.add('changed');
            requestAnimationFrame(dumpLayers);
        });
    </script>
</head>
<body>

    <div class="box">
        <div class="sublayer"></div>
    </div>
<pre id="output"></pre>
</body>
</html>
