<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/run-after-layout-and-paint.js"></script>
<style>
.fixed {
position: fixed;
width: 50px;
height: 50px;
background-color: silver;
}
.positionedAndTransformed {
left: 20px;
top: -80px;
transform: translateY(100px);
}
</style>
<script type="text/javascript">
window.jsTestIsAsync = true;
function doTest() {
if (!window.internals)
return;
document.getElementById("layertree1").innerText = internals.layerTreeAsText(document);
window.scrollTo(0, 10);
runAfterLayoutAndPaint(function() {
layerTree = internals.layerTreeAsText(document);
// Make sure the layer tree dump is stable.
shouldBe('layerTree', 'internals.layerTreeAsText(document)');
document.getElementById("layertree2").innerText = layerTree;
finishJSTest();
});
}
if (window.internals)
internals.settings.setPreferCompositingToLCDTextEnabled(true);
window.onload = doTest;
</script>
</head>
<body>
<!--
https://code.google.com/p/chromium/issues/detail?id=293926
This test reproduces a bug where fixed-position layers flickered. Fixed
position elements opt-out of compositing when they are out of view.
However, the position of the layer was being computed differently when
the layer was composited versus not composited. In this scenario, the
difference in positioning made the layer seem out-of-view when
composited, and in-view when not composited. Thus, every compositing
update, the layer would flip its compositing state. The flickering
occurred because of a shortcut that avoids painting because it thought
the layer is offscreen.
-->
<div style="width: 2000px; height: 2000px">
The layer trees before and after should be the same, except for the position of the 50x50 sized composited fixed position layer.<br>
BEFORE:
<pre id="layertree1"></pre>
AFTER:
<pre id="layertree2"></pre>
</div>
<div class="positionedAndTransformed fixed"></div>
</body>
</html>