<!DOCTYPE html>

<html>
<head>
    <style>
        .container {
            height: 150px;
            width: 150px;
            float: left;
            position: relative;
            border: 1px solid black;
            padding: 20px;
            margin: 10px;
            box-sizing: border-box;
            box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
        }
        
        .box {
            position: relative;
            height: 40px;
            width: 100px;
            background-color: rgba(0, 0, 128, 0.5);
        }

        p {
            line-height: 20px;
        }

        .composited {
            will-change: transform;
        }
    </style>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        if (window.internals) {
            internals.setFontSmoothingEnabled(true);
            internals.settings.setSubpixelAntialiasedLayerTextEnabled(true)
        }

        function doTest()
        {
            if (window.internals)
                document.getElementById('layers').innerText = internals.layerTreeAsText(document);
        }

        window.addEventListener('load', doTest, false);
    </script>
</head>
<body>

<div class="composited container">
</div>

<div class="composited container">
    <span> </span> <p> </p>
</div>

<div class="composited container">
    &nbsp; &nbsp; &nbsp;
</div>

<div class="composited container" style="background-color: silver;">
    Solid background
</div>

<div class="composited container">
    <p>Text here</p>
</div>

<div class="composited container">
    <p>Text here</p>
    <div class="composited box">
        Negative z-index child
    </div>
    And more content
</div>

<div class="composited container">
    <div style="position: relative;">
        <p>Child layer</p>
    </div>
</div>

<div class="composited container">
    <div class="composited">
        <p>Child composited layer</p>
    </div>
</div>

<div class="composited container">
    <div class="composited">
        <p>Child composited layer</p>
    </div>
    Text here.
</div>

<div class="composited container">
    <input type="text" style="width: 90%" value="input">
</div>

<div class="composited container">
    <select style="width: 90%">
        <option>First option</option>
        <option>Second option</option>
    </select>
</div>

<pre id="layers"></pre>

</body>
</html>
