117 lines
3.4 KiB
HTML
117 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<style>
|
|
.container {
|
|
width: 120px;
|
|
position: relative;
|
|
left: 50px;
|
|
z-index: 0; /* create stacking context */
|
|
border: 1px solid black;
|
|
background-color: white;
|
|
}
|
|
|
|
.box {
|
|
position: relative;
|
|
width: 100px;
|
|
height: 100px;
|
|
margin: 10px;
|
|
background-color: blue;
|
|
}
|
|
|
|
.force-layer {
|
|
-webkit-transform: translateZ(-1px);
|
|
}
|
|
|
|
.rotate-45deg {
|
|
-webkit-transform: rotate(45deg);
|
|
}
|
|
|
|
.yellow {
|
|
background-color: yellow;
|
|
}
|
|
|
|
.gray {
|
|
background-color: gray;
|
|
}
|
|
|
|
.green {
|
|
background-color: green;
|
|
outline: 1px solid black;
|
|
}
|
|
|
|
.animating1 {
|
|
-webkit-animation: translate1 2s linear infinite alternate;
|
|
}
|
|
|
|
@-webkit-keyframes translate1 {
|
|
from { -webkit-transform: translate(0px, -110px); }
|
|
to { -webkit-transform: translate(0px, 700px); }
|
|
}
|
|
</style>
|
|
<script>
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
function queueBoxForAnimation(elementId, animationClass, callback) {
|
|
var box = document.getElementById(elementId);
|
|
box.addEventListener('webkitAnimationStart', callback, false);
|
|
box.classList.add(animationClass);
|
|
}
|
|
|
|
function runTest()
|
|
{
|
|
queueBoxForAnimation("to-animate1", "animating1", animationStarted);
|
|
}
|
|
|
|
function animationStarted()
|
|
{
|
|
var layerTrees = "";
|
|
|
|
if (window.testRunner) {
|
|
var layersElement = document.getElementById('layers');
|
|
// Make sure we don't include the #layers element in the tree. The text size
|
|
// might differ between platforms.
|
|
layersElement.style.display = "none";
|
|
layerTrees = "Before:\n" + window.internals.layerTreeAsText(document);
|
|
}
|
|
|
|
// Rotate the first green box, so that it overlaps the first gray box in the container.
|
|
// That should force the creation of composited layers for all the other green boxes.
|
|
document.getElementById("first-green-box").classList.add("rotate-45deg");
|
|
|
|
if (window.testRunner) {
|
|
layerTrees += "\nAfter:\n" + window.internals.layerTreeAsText(document);
|
|
layersElement.style.display = "block";
|
|
layersElement.innerText = layerTrees;
|
|
testRunner.notifyDone();
|
|
}
|
|
}
|
|
window.addEventListener('load', runTest, false);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<!-- Testing that compositor doesn't create unnecessary composited layers when they could be drawn in parents backing texture.
|
|
The green boxes should not have composited layers.
|
|
-->
|
|
<!-- This div will not get a layer -->
|
|
<div class="box gray"></div>
|
|
<div id="to-animate1" class="box"></div>
|
|
<div class="container">
|
|
<!-- Force a composited box inside the container. The fact that there's an animation going behind the parent container,
|
|
should not force the remaining children of this element create their own composited layers. -->
|
|
<div class="box gray force-layer"></div>
|
|
<!-- This following have no reason to get a layer, as the parent will get one. -->
|
|
<div id="first-green-box" class="box green"></div>
|
|
<div class="box green rotate-45deg"></div>
|
|
<div class="box green"></div>
|
|
</div>
|
|
<!-- This div will also get a layer -->
|
|
<div class="box yellow"></div>
|
|
<pre id="layers">Layer tree goes here in DRT</pre>
|
|
</body>
|
|
</html>
|