blob: dd4b2196c93d22c016ca151b29209101af084a46 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests general layer tree model functionality`);
await TestRunner.loadModule('layers_test_runner');
await TestRunner.loadHTML(`
<style>
.layer {
transform: translateZ(10px);
opacity: 0.8;
background: blue;
}
#frame {
width: 200px;
height: 200px;
}
</style>
<div id="a" style="width: 200px; height: 200px" class="layer">
<div class="layer" id="b1" style="width: 150px; height: 100px"></div>
<div id="b2" class="layer" style="width: 140px; height: 110px">
<div id="c" class="layer" style="width: 100px; height: 90px"></div>
</div>
<div id="b3" class="layer" style="width: 140px; height: 110px"></div>
</div>
`);
await TestRunner.addIframe('resources/composited-iframe.html', {id: 'frame'});
await TestRunner.evaluateInPagePromise(`
function updateTree()
{
document.getElementById("c").appendChild(document.getElementById("b1"));
var b3 = document.getElementById("b3");
b3.parentElement.removeChild(b3);
var b4 = document.createElement("div");
b4.id = "b4";
b4.className = "layer";
b4.style.width = "77px";
b4.style.height = "88px";
document.getElementById("a").appendChild(b4);
}
function updateGeometry()
{
document.getElementById("c").style.width = "80px";
// Simply changing the transform or transform-origin may not cause a
// full layer update due to optimizations. Changing backface
// visibility is a heavier hammer to force a full update.
document.getElementById("c").style.backfaceVisibility = "hidden";
}
`);
await LayersTestRunner.requestLayers();
// Assure layer objects are not re-created during updates.
LayersTestRunner.layerTreeModel().layerTree().forEachLayer(layer => {
layer.__extraData = layer.parent() ? layer.parent().__extraData + 1 : 0;
});
TestRunner.addResult('Initial layer tree');
LayersTestRunner.dumpLayerTree();
await LayersTestRunner.evaluateAndWaitForTreeChange('requestAnimationFrame(updateTree)');
TestRunner.addResult('Updated layer tree');
LayersTestRunner.dumpLayerTree();
await LayersTestRunner.evaluateAndWaitForTreeChange('requestAnimationFrame(updateGeometry)');
TestRunner.addResult('Updated layer geometry');
LayersTestRunner.dumpLayerTree();
TestRunner.completeTest();
})();