Bug 1251075 - Add test that dynamic change of transform when will-change:transform is set doesn't reconstruct frames. r?bz draft
authorL. David Baron <dbaron@dbaron.org>
Sat, 27 Aug 2016 13:22:54 -0700
changeset 406471 d3cc1a1a63f9b90add3d0c2ea1d54d95394df0fe
parent 406470 dfbec3a2b446e590cba17dbf863ed913fd4d6352
child 529664 e33a4b648b25b8e53c5db4afc2d1a5ae328e7961
push id27733
push userdbaron@mozilla.com
push dateSat, 27 Aug 2016 20:23:11 +0000
reviewersbz
bugs1251075
milestone51.0a1
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
layout/style/test/mochitest.ini
layout/style/test/test_change_hint_optimizations.html
--- a/layout/style/test/mochitest.ini
+++ b/layout/style/test/mochitest.ini
@@ -145,16 +145,17 @@ support-files = file_bug829816.css
 support-files = file_bug1055933_circle-xxl.png
 [test_bug1089417.html]
 support-files = file_bug1089417_iframe.html
 [test_bug1112014.html]
 [test_bug1203766.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'
 [test_computed_style.html]
 [test_computed_style_no_pseudo.html]
 [test_computed_style_prefs.html]
 [test_condition_text.html]
 [test_condition_text_assignment.html]
new file mode 100644
--- /dev/null
+++ b/layout/style/test/test_change_hint_optimizations.html
@@ -0,0 +1,59 @@
+<!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() {
+      var utils = SpecialPowers.DOMWindowUtils;
+
+      function test_div(id) {
+        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_div("bug1251075_a");
+      test_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>