<!DOCTYPE html>
<html>
<head>
    <style>
        .wrapper {
            position: relative;
            margin-top: 50px;
            margin-left: -50px;
            width: 952px;
            height: 82px;
            border: 1px solid black;
            perspective: 2000px;
        }
        
        .middle {
            position: absolute;
            top: 15px;
            left: 544px;
            padding: 10px;
            animation-fill-mode: forwards;
            animation-duration: 3s;
            animation-name: bounce;
        }
        
        .letter {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 9px;
            height: 31px;
            position: absolute;
            background-color: silver;
            transform: translateZ(0);
        }

        @keyframes bounce {
            0% { transform: matrix3d(1.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, -565.25, 7.75, 0, 1); }
            19% { transform: matrix3d(1.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, -565.25, 7.75, 0, 1); }
            25% { transform: matrix3d(1.1558, 0, 0, 0, -0.00666, 0.7771, 0, 0, 0, 0, 1, 0, -504.006, -41.6730, 0, 1); }
            47% { transform: matrix3d(1.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, -283.75, 7.75, 0, 1); }
            60% { transform: matrix3d(1.3906, 0, 0, 0, 0.073394, 0.6825, 0, 0, 0, 0, 1, 0, -143.645, 4.920146, 0, 1); }
            89% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); }
            100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); }
        }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function dumpLayers()
        {
            var layersResult = document.getElementById('layers');
            if (window.testRunner)
                layersResult.innerText = window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_BACKING_STORE_ATTACHED);
        }
    </script>
</head>
<body>

<div class="wrapper">
    <div id="target" class="middle">
        <div class="letter">T</div>
    </div>
</div>

<pre id="layers">Layer tree goes here in DRT</pre>

<script>
    let animator = document.getElementById('target');
    animator.addEventListener('animationstart', () => {
        requestAnimationFrame(() => {
            dumpLayers();
            if (window.testRunner)
                testRunner.notifyDone();
        });
    });
</script>
</body>
</html>
