| Index: third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint.html b/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint.html
|
| index c3157a55f2c8d1fd016db8c00019bbc171110295..d3728103ff1fcabf5e1d74f14f883cdd7d05b0c2 100644
|
| --- a/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint.html
|
| +++ b/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint.html
|
| @@ -1,7 +1,6 @@
|
| <html>
|
| <head>
|
| <script src="../../resources/run-after-layout-and-paint.js"></script>
|
| -<script src="resources/text-based-repaint.js"></script>
|
| <style type="text/css">
|
| #test1 div {
|
| height: 100px;
|
| @@ -46,42 +45,75 @@
|
| </style>
|
| <script>
|
| // Test that obscured animated gif does not trigger repaints.
|
| - if (window.testRunner)
|
| + if (window.testRunner) {
|
| testRunner.waitUntilDone();
|
| - window.testIsAsync = true;
|
| - function repaintTest()
|
| - {
|
| - runAfterLayoutAndPaint(finishRepaintTest);
|
| + testRunner.dumpAsText();
|
| + }
|
| +
|
| + if (window.internals) {
|
| + internals.settings.setUseDefaultImageInterpolationQuality(true);
|
| + internals.runtimeFlags.slimmingPaintUnderInvalidationCheckingEnabled = true;
|
| + }
|
| +
|
| + function finish() {
|
| + var layerTree = window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS);
|
| + var invalidations = JSON.parse(layerTree).objectPaintInvalidations;
|
| + // Passes if there is no invalidations,
|
| + // or only invalidations because of background obscuration change.
|
| + // This is because before the delayed image decoder finishes decoding the image,
|
| + // we first assume the image is not opaque. If the image is found actually opaque
|
| + // after decoding, the background obscuration status of covered elements will
|
| + // change and cause paint invalidation.
|
| + var invalidatedObjects = {};
|
| + for (var i = 0; i < invalidations.length; ++i) {
|
| + var object = invalidations[i].object;
|
| + // Paint invalidation of target3 and target4 depends on opaqueness of the foreground image (apple.jpg).
|
| + // Because of delayed image decoding, we may get actual opaqueness of the image after the test is started.
|
| + // Omit paint invalidations so far if we see 'background obscuration change' for these targets.
|
| + if ((object.indexOf('target3') != -1 || object.indexOf('target4') != -1) && invalidations[i].reason == 'background obscuration change')
|
| + delete invalidatedObjects[object];
|
| + else
|
| + invalidatedObjects[object] = true;
|
| + }
|
| +
|
| + if (Object.keys(invalidatedObjects).length)
|
| + output.textContent = 'FAIL: Unexpected paint invalidations: ' + JSON.stringify(invalidatedObjects) + '\n' + layerTree;
|
| + else
|
| + output.textContent = 'PASS';
|
| + testRunner.notifyDone();
|
| }
|
|
|
| function start() {
|
| if (!window.testRunner || !window.internals)
|
| return;
|
|
|
| - var img = new Image();
|
| - img.onload = runRepaintTest;
|
| - img.src = "resources/animated.gif";
|
| + runAfterLayoutAndPaint(function() {
|
| + internals.startTrackingRepaints(document);
|
| + // Wait a while to let the animated gif advance frames.
|
| + setTimeout(finish, 300);
|
| + });
|
| }
|
| +
|
| </script>
|
| </head>
|
| <body onload="start()">
|
| <div id="test1">
|
| - <div class="parent">
|
| + <div id="target1" class="parent">
|
| <div class="child">
|
| </div>
|
| </div>
|
| </div>
|
| <div id="test2">
|
| - <div class="parent">
|
| + <div id="target2" class="parent">
|
| <div class="child">
|
| </div>
|
| </div>
|
| </div>
|
| <div id="test3">
|
| - <img src="resources/apple.jpg">
|
| + <img id="target3" src="resources/apple.jpg">
|
| </div>
|
| <div id="test4">
|
| - <div class="parent">
|
| + <div id="target4" class="parent">
|
| <a>
|
| <div></div>
|
| <div>
|
| @@ -90,5 +122,6 @@
|
| </a>
|
| </div>
|
| </div>
|
| +<pre id="output"></pre>
|
| </body>
|
| </html>
|
|
|