Bug 1251075 - Add test that dynamic change of transform when will-change:transform is set doesn't reconstruct frames. r=bz

Without the patch (or, rather, with the new code in nsStyleContext::CalcStyleDifferenceInternal commented out), the second of the tests added fails:
TEST-UNEXPECTED-FAIL | layout/style/test/test_change_hint_optimizations.html | adding a transform style to an element with filter: blur(3px); should not cause frame reconstruction even when the element has absolutely positioned descendants - got 34, expected 28

The first of the new tests doesn't fail without the patch because
will-change:transform influences HasTransformStyle.  However, since that
case is probably the most important one, it still seems worth testing
explicitly.

With the patches, both tests pass.

MozReview-Commit-ID: 8n7QKGxd3j6
This commit is contained in:
L. David Baron 2016-08-29 11:43:30 -07:00
Родитель 611f172de6
Коммит dfe11b3205
2 изменённых файлов: 58 добавлений и 0 удалений

Просмотреть файл

@ -150,6 +150,7 @@ support-files = file_bug1089417_iframe.html
[test_bug1232829.html]
[test_cascade.html]
[test_ch_ex_no_infloops.html]
[test_change_hint_optimizations.html]
[test_clip-path_polygon.html]
[test_compute_data_with_start_struct.html]
skip-if = toolkit == 'android'

Просмотреть файл

@ -0,0 +1,57 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Test for style change hint optimizations</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript">
SimpleTest.waitForExplicitFinish();
function runTests() {
/** Test for Bug 1251075 **/
function test_bug1251075_div(id) {
var utils = SpecialPowers.DOMWindowUtils;
var div = document.getElementById(id);
div.style.display = "";
var description = div.style.cssText;
div.firstElementChild.offsetTop;
var constructedBefore = utils.framesConstructed;
div.style.transform = "translateX(10px)";
div.firstElementChild.offsetTop;
is(utils.framesConstructed, constructedBefore,
"adding a transform style to an element with " + description +
" should not cause frame reconstruction even when the element " +
"has absolutely positioned descendants");
div.style.display = "none";
}
test_bug1251075_div("bug1251075_a");
test_bug1251075_div("bug1251075_b");
SimpleTest.finish();
}
</script>
</head>
<body onload="runTests()">
<div id="bug1251075_a" style="will-change: transform; display:none">
<div style="position: absolute; top: 0; left: 0;"></div>
<div style="position: fixed; top: 0; left: 0;"></div>
</div>
<div id="bug1251075_b" style="filter: blur(3px); display:none">
<div style="position: absolute; top: 0; left: 0;"></div>
<div style="position: fixed; top: 0; left: 0;"></div>
</div>
<pre id="test">
</pre>
</body>
</html>