Title: [219916] branches/safari-604-branch
Revision
219916
Author
[email protected]
Date
2017-07-26 02:51:28 -0700 (Wed, 26 Jul 2017)

Log Message

Cherry-pick r219610. rdar://problem/33523847

Modified Paths

Added Paths

Diff

Modified: branches/safari-604-branch/LayoutTests/ChangeLog (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/ChangeLog	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/ChangeLog	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1,5 +1,52 @@
 2017-07-26  Jason Marcell  <[email protected]>
 
+        Cherry-pick r219610. rdar://problem/33523847
+
+    2017-07-18  Said Abou-Hallawa  <[email protected]>
+
+            Async image decoding for large images should be disabled after the first time a tile is painted
+            https://bugs.webkit.org/show_bug.cgi?id=174451
+
+            Reviewed by Simon Fraser.
+
+            To test async image decoding for large images, we have to create the <img>
+            element dynamically so we can listen to the load and webkitImageFrameReady
+            events and know reliably when to end the test. But with this patch the async
+            image decoding for large images will be disabled after the first paint.
+            That means async image decoding for large images will be disabled always
+            unless we force the async image decoding till the image is painted for the
+            first time. We use Internals::setLargeImageAsyncDecodingEnabledForTesting()
+            to force the async image decoding. So painting an image in this case will
+            require multiple paints; in all of them the async image decoding will be
+            enabled. But this is okay because it resembles the case where the <img> is
+            created from a static <img> tag in the HTML file.
+
+            For new tests, where we want to make sure that mutating the DOM will not
+            cause a flash, async image decoding will be forced till the image is drawn
+            for the first time. After that the async image decoding is enabled but not
+            forced.
+
+            Disable new tests for WK1 because the async image decoding is always enabled
+            because tiling does not necessarily exist in WK1 . But eventually the async
+            image decoding for large images will be always disabled for WK1.
+
+            * fast/images/async-image-background-change-expected.html: Added.
+            * fast/images/async-image-background-change.html: Added.
+            * fast/images/async-image-background-image-repeated.html:
+            * fast/images/async-image-background-image.html:
+            * fast/images/async-image-multiple-clients-repaint.html:
+            * fast/images/async-image-src-change-expected.html: Added.
+            * fast/images/async-image-src-change.html: Added.
+            * fast/images/resources/green-400x400.png: Added.
+            * fast/images/resources/red-100x100.png: Added.
+            * fast/images/resources/red-400x400.png: Added.
+            * http/tests/multipart/multipart-async-image-expected.txt: Added.
+            * http/tests/multipart/multipart-async-image.html: Added.
+            * platform/ios-wk1/TestExpectations:
+            * platform/mac-wk1/TestExpectations:
+
+2017-07-26  Jason Marcell  <[email protected]>
+
         Revert r219342. rdar://problem/33523803
 
 2017-07-24  Jason Marcell  <[email protected]>

Added: branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change-expected.html (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change-expected.html	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change-expected.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,10 @@
+<style>
+    div {
+        width: 400px;
+        height: 400px;
+        background-color: green;
+    }
+</style>
+<body>
+    <div></div>
+</body>

Added: branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change.html (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change.html	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-background-change.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+<style>
+    div {
+        width: 400px;
+        height: 400px;
+    }
+ </style>
+ <body>
+    <div></div>
+    <script>
+        function loadImageAndSetBackground(element, image, src, forceAsyncImageDrawing) {
+            return new Promise((resolve) => {
+                image._onload_ = (() => {
+                    if (window.internals && window.testRunner && forceAsyncImageDrawing) {
+                        // Force async image decoding for this image.
+                        internals.setLargeImageAsyncDecodingEnabledForTesting(image, true);
+
+                        // Change the background of the element.
+                        element.style.backgroundImage = 'url(' + image.src + ')';
+
+                        // Force layout and display so the image gets drawn.
+                        document.body.offsetHeight;
+                        if (window.testRunner)
+                            testRunner.display();
+
+                        image.addEventListener("webkitImageFrameReady", function() {
+                            internals.setLargeImageAsyncDecodingEnabledForTesting(image, false);
+                            setTimeout(function() {
+                                // Force redraw to get the red image drawn.
+                                testRunner.display();
+                                resolve();
+                            }, 0);
+                        }, false);
+                    } else {
+                        // Change the background of the element.
+                        element.style.backgroundImage = 'url(' + image.src + ')';
+                        resolve();
+                    }
+                });
+                image.src = ""
+            });
+        }
+ 
+        (function() {
+            if (window.internals && window.testRunner) {
+                internals.clearMemoryCache();
+                internals.settings.setWebkitImageReadyEventEnabled(true);
+                internals.settings.setLargeImageAsyncDecodingEnabled(true);
+                testRunner.waitUntilDone();
+            }
+ 
+            var image = new Image;
+            document.body.appendChild(image);
+            var element = document.querySelector("div");
+
+            // Load a large (400x400) red image to force sync image decoding and drawing.
+            loadImageAndSetBackground(element, image, "resources/red-400x400.png", true).then(() => {
+                // Replace the large red image with a large (400x400) green image.
+                // Sync image decoding and drawing have to be forced in this case.
+                return loadImageAndSetBackground(element, image, "resources/green-400x400.png", false);
+            }).then(() => {
+                image.remove();
+                // A single paint is needed to draw the large (400x400) green image.
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        })();
+    </script>
+ </body>
+ </html>
\ No newline at end of file

Modified: branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image-repeated.html (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image-repeated.html	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image-repeated.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -50,6 +50,10 @@
             image._onload_ = function() {
                 var elements = document.getElementsByClassName("image-background");
  
+                 // Force async image decoding for this image.
+                if (window.internals)
+                    internals.setLargeImageAsyncDecodingEnabledForTesting(image, true);
+
                 // Change the background of the elements.
                 if (window.internals && window.testRunner) {
                     var promises = [];

Modified: branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image.html (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image.html	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-background-image.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -33,6 +33,10 @@
             var image = new Image();
             image._onload_ = function() {
                 var element = document.getElementsByClassName("image-background")[0];
+
+                // Force async image decoding for this image.
+                if (window.internals)
+                    internals.setLargeImageAsyncDecodingEnabledForTesting(image, true);
  
                 // Change the background of the element.
                 element.style.backgroundImage = 'url(' + image.src + ')';

Modified: branches/safari-604-branch/LayoutTests/fast/images/async-image-multiple-clients-repaint.html (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-multiple-clients-repaint.html	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-multiple-clients-repaint.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -65,6 +65,10 @@
 
             var image = new Image();
             image._onload_ = function() {
+                // Force async image decoding for this image.
+                if (window.internals)
+                    internals.setLargeImageAsyncDecodingEnabledForTesting(image, true);
+
                 if (window.internals && window.testRunner) {
                     setElementImageBackground(document.querySelector(".small-box"), image).then(() => {
                         // Call the next setElementImageBackground() asynchronously, using setTimeout(, 0),

Added: branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change-expected.html (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change-expected.html	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change-expected.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,10 @@
+<style>
+    div {
+        width: 400px;
+        height: 400px;
+        background-color: green;
+    }
+</style>
+<body>
+    <div></div>
+</body>

Added: branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change.html (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change.html	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/async-image-src-change.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<body>
+    <script>
+        function loadImageAndDraw(image, src, forceAsyncImageDrawing) {
+            return new Promise((resolve) => {
+                image._onload_ = (() => {
+                    if (window.internals && window.testRunner && forceAsyncImageDrawing) {
+                        // Force async image decoding for this image.
+                        internals.setLargeImageAsyncDecodingEnabledForTesting(image, true);
+
+                        // Force layout and display so the image gets drawn.
+                        document.body.offsetHeight;
+                        if (window.testRunner)
+                            testRunner.display();
+
+                        image.addEventListener("webkitImageFrameReady", function() {
+                            internals.setLargeImageAsyncDecodingEnabledForTesting(image, false);
+                            setTimeout(function() {
+                                // Force redraw to get the red image drawn.
+                                testRunner.display();
+                                resolve();
+                            }, 0);
+                        }, false);
+                    } else {
+                        resolve();                        
+                    }
+                });
+                image.src = ""
+            });
+        }
+ 
+        (function() {
+            if (window.internals && window.testRunner) {
+                internals.clearMemoryCache();
+                internals.settings.setWebkitImageReadyEventEnabled(true);
+                internals.settings.setLargeImageAsyncDecodingEnabled(true);
+                testRunner.waitUntilDone();
+            }
+ 
+            var image = new Image;
+            document.body.appendChild(image);
+ 
+            // Load a large (400x400) red image to force sync image decoding and drawing.
+            loadImageAndDraw(image, "resources/red-400x400.png", true).then(() => {
+                // Replace the large red image with a large (400x400) green image.
+                // Sync image decoding and drawing have to be forced in this case.
+                return loadImageAndDraw(image, "resources/green-400x400.png", false);
+            }).then(() => {
+                // A single paint is needed to draw the large (400x400) green image.
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        })();
+    </script>
+ </body>
+ </html>

Added: branches/safari-604-branch/LayoutTests/fast/images/resources/green-400x400.png (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/resources/green-400x400.png	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/resources/green-400x400.png	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,5 @@
+\x89PNG
+
++IHDR\x90\x90ݡ\x9B	pHYs\x9A\x9CtIME\xE1$:j\xB7\xEC\x99iTXtCommentCreated with GIMPd.e\xE4IDATx\xDA\xED\xD41+\xB1\xE5HGI+ᆫL^h	\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC
 0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC3K\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC3\xC0\xB00,\xC30,\xC0\xB0\xC0\xB0\xC30,\xC3\xC0\xB00,\xC30,\xC0\xB0\
 xC0\xB0\xC30,\xC3\xE0\xD2\x9F\xCA\xA0\x9B\x9D\xF1IEND\xAEB`\x82
\ No newline at end of file

Added: branches/safari-604-branch/LayoutTests/fast/images/resources/red-100x100.png (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/resources/red-100x100.png	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/resources/red-100x100.png	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,6 @@
+\x89PNG
+
++IHDRdd\xFF\x80	pHYs\x9A\x9CtIME\xE1:9#r\xFENiTXtCommentCreated with GIMPd.e\x9EIDATx\xDA\xED\xD01 \xB5\xE7Y\xC1\xCF"\xD0)\xAEF\x81,Y\xB2dɒ\xA5@\x96,Y\xB2d\xC9R K\x96,Y\xB2d)\x90%K\x96,Y\xB2Ȓ%K\x96,Y
+dɒ%K\x96,\xB2dɒ%K\x96Y\xB2dɒ%K\x81,Y\xB2dɒ\xA5@\x96,Y\xB2d\xC9R K\x96,Y\xB2d)\x90%K\x96,Y\xB2Ȓ%K\x96,Y
+dɒ%K\x96,\xB2dɒ%K\x96Y\xB2dɒ%K\x81,Y\xDF\x8A^\xC7j\xFA\xB7\xB7IEND\xAEB`\x82
\ No newline at end of file

Added: branches/safari-604-branch/LayoutTests/fast/images/resources/red-400x400.png (0 => 219916)


--- branches/safari-604-branch/LayoutTests/fast/images/resources/red-400x400.png	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/fast/images/resources/red-400x400.png	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,5 @@
+\x89PNG
+
++IHDR\x90\x90ݡ\x9B	pHYs\x9A\x9CtIME\xE1#`)&+iTXtCommentCreated with GIMPd.e\xE3IDATx\xDA\xED\xD41+1\xC0\xBF\xE7GI+\xE1\x86\xEB\xC0#`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a
 \x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x80aI\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\x80a\x86`X\x86\x80a`X\x86`X\x80a\Z\xC9\xC8\x95\xE9\xF8IEND\xAEB`\x82
\ No newline at end of file

Added: branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image-expected.txt (0 => 219916)


--- branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image-expected.txt	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image-expected.txt	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,10 @@
+Make sure no async decoding is done for multipart images
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS The second frame of the multipart image was drawn without async image decoding.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image.html (0 => 219916)


--- branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image.html	                        (rev 0)
+++ branches/safari-604-branch/LayoutTests/http/tests/multipart/multipart-async-image.html	2017-07-26 09:51:28 UTC (rev 219916)
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src=""
+</head>
+<body>
+    <script>
+        function multipartUrl() {
+            var relativePath = "../../../../fast/images/resources/";
+ 
+            return "resources/multipart.php"
+                    + "?interval=0.1"
+                    + "&img1=" + relativePath + "red-100x100.png"
+                    + "&img2=" + relativePath + "green-400x400.png"
+                    + "&img3=" + relativePath + "green-400x400.png";
+        }
+
+        var intervalID = null;
+        function finishTest() {
+            if (intervalID !== null)
+                clearInterval(intervalID);
+            finishJSTest();
+        }
+
+        (function() {
+            description("Make sure no async decoding is done for multipart images");
+            jsTestIsAsync = true;
+ 
+            if (window.internals && window.testRunner) {
+                internals.clearMemoryCache();
+                internals.settings.setWebkitImageReadyEventEnabled(true);
+                internals.settings.setLargeImageAsyncDecodingEnabled(true);
+            }
+ 
+            var image = new Image;
+            document.body.appendChild(image);
+ 
+            image.addEventListener("webkitImageFrameReady", function() {
+                // The first image is small (100x100) red image which does not
+                // require async image decoding. But drawing it should prevent
+                // any subsequent async image decoding for large images.
+                testFailed("Async image decoding was mistakenly requested.");
+                finishTest();
+            }, false);
+ 
+            image._onload_ = function() {
+                var count = 0;
+                intervalID = setInterval(function() {
+                    // Force layout and display.
+                    document.body.offsetHeight;
+                    testRunner.display();
+                    ++count;
+
+                    if (image.offsetWidth == 400 && count == 100) {
+                        testPassed("The second frame of the multipart image was drawn without async image decoding.");
+                        finishTest();
+                    }
+
+                    if (count > 200) {
+                        testFailed("Timeout: the second frame of the multipart image was not loaded.");
+                        finishTest();
+                    }
+                }, 10);
+            }
+            image.src = "" 
+        })();
+    </script>
+    <script src=""
+</body>
+</html>

Modified: branches/safari-604-branch/LayoutTests/platform/ios-wk1/TestExpectations (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/platform/ios-wk1/TestExpectations	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/platform/ios-wk1/TestExpectations	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1107,6 +1107,11 @@
 # Disk cache is WK2 only
 http/tests/cache/disk-cache
 
+# Async image decoding is WK2 only
+fast/images/async-image-background-change.html
+fast/images/async-image-src-change.html
+http/tests/multipart/multipart-async-image.html
+
 # Flaky as of 06/08/2015
 animations/animation-direction-reverse-hardware-opacity.html [ Failure Pass ]
 animations/animation-direction-reverse-hardware.html [ Failure Pass ]

Modified: branches/safari-604-branch/LayoutTests/platform/mac-wk1/TestExpectations (219915 => 219916)


--- branches/safari-604-branch/LayoutTests/platform/mac-wk1/TestExpectations	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/LayoutTests/platform/mac-wk1/TestExpectations	2017-07-26 09:51:28 UTC (rev 219916)
@@ -156,6 +156,11 @@
 http/tests/inspector/network/resource-response-source-disk-cache.html
 http/tests/inspector/network/resource-sizes-disk-cache.html
 
+# Async image decoding is WK2 only
+fast/images/async-image-background-change.html
+fast/images/async-image-src-change.html
+http/tests/multipart/multipart-async-image.html
+
 [ Yosemite+ ] fast/ruby/ruby-expansion-cjk-2.html [ ImageOnlyFailure ]
 
 # ShouldOpenExternalURLs not yet supported in WK1

Modified: branches/safari-604-branch/Source/WebCore/ChangeLog (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/ChangeLog	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/ChangeLog	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1,5 +1,90 @@
 2017-07-26  Jason Marcell  <[email protected]>
 
+        Cherry-pick r219610. rdar://problem/33523847
+
+    2017-07-18  Said Abou-Hallawa  <[email protected]>
+
+            Async image decoding for large images should be disabled after the first time a tile is painted
+            https://bugs.webkit.org/show_bug.cgi?id=174451
+
+            Reviewed by Simon Fraser.
+
+            Flashing because of DOM mutation can be fixed by disabling the asynchronous
+            image decoding after the first time a tile was painted.
+
+            We can detect this by consulting the tile repaintCount. If it is zero, then
+            it is safe to use asynchronous image decoded. If the tile repaintCount is
+            greater than zero, we are not sure if the renderer rectangle has an image
+            drawn in it already or not. In this case we have to use the synchronous
+            image decoding to avoid causing a flash.
+
+            Tests: fast/images/async-image-background-change.html
+                   fast/images/async-image-src-change.html
+                   http/tests/multipart/multipart-async-image.html
+
+            * page/PageOverlayController.cpp:
+            (WebCore::PageOverlayController::paintContents):
+            * page/PageOverlayController.h:
+            * page/linux/ResourceUsageOverlayLinux.cpp:
+            * page/mac/ServicesOverlayController.h:
+            * page/mac/ServicesOverlayController.mm:
+            (WebCore::ServicesOverlayController::Highlight::paintContents):
+            * platform/graphics/BitmapImage.h:
+            * platform/graphics/GraphicsLayer.cpp:
+            (WebCore::GraphicsLayer::paintGraphicsLayerContents):
+            * platform/graphics/GraphicsLayer.h:
+            * platform/graphics/GraphicsLayerClient.h:
+            (WebCore::GraphicsLayerClient::paintContents):
+            * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
+            (WebCore::LayerClient::platformCALayerPaintContents):
+            * platform/graphics/ca/GraphicsLayerCA.cpp:
+            (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
+            * platform/graphics/ca/GraphicsLayerCA.h:
+            * platform/graphics/ca/PlatformCALayer.h:
+            * platform/graphics/ca/PlatformCALayerClient.h:
+            (WebCore::PlatformCALayerClient::platformCALayerRepaintCount):
+            * platform/graphics/ca/TileCoverageMap.cpp:
+            (WebCore::TileCoverageMap::platformCALayerPaintContents):
+            * platform/graphics/ca/TileCoverageMap.h:
+            * platform/graphics/ca/TileGrid.cpp:
+            (WebCore::TileGrid::platformCALayerPaintContents):
+            (WebCore::TileGrid::platformCALayerRepaintCount):
+            * platform/graphics/ca/TileGrid.h:
+            * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
+            (PlatformCALayer::drawLayerContents):
+            * platform/graphics/ca/win/PlatformCALayerWin.cpp:
+            (PlatformCALayer::drawLayerContents):
+            * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
+            (PlatformCALayerWinInternal::displayCallback):
+            * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
+            (WebTiledBackingLayerWin::displayCallback):
+            * platform/graphics/mac/WebLayer.mm:
+            (-[WebLayer drawInContext:]):
+            (-[WebSimpleLayer drawInContext:]):
+            * rendering/RenderBoxModelObject.cpp:
+            (WebCore::RenderBoxModelObject::decodingModeForImageDraw):
+            * rendering/RenderElement.h:
+            * rendering/RenderLayerBacking.cpp:
+            (WebCore::RenderLayerBacking::paintContents):
+            * rendering/RenderLayerBacking.h:
+            * rendering/RenderLayerCompositor.cpp:
+            (WebCore::RenderLayerCompositor::paintContents):
+            * rendering/RenderLayerCompositor.h:
+            * testing/Internals.cpp:
+            (WebCore::imageFromImageElement):
+            (WebCore::bitmapImageFromImageElement):
+            (WebCore::Internals::imageFrameIndex):
+            (WebCore::Internals::setImageFrameDecodingDuration):
+            (WebCore::Internals::resetImageAnimation):
+            (WebCore::Internals::isImageAnimating):
+            (WebCore::Internals::setClearDecoderAfterAsyncFrameRequestForTesting):
+            (WebCore::Internals::imageDecodeCount):
+            (WebCore::Internals::setLargeImageAsyncDecodingEnabledForTesting):
+            * testing/Internals.h:
+            * testing/Internals.idl:
+
+2017-07-26  Jason Marcell  <[email protected]>
+
         Revert r219342. rdar://problem/33523803
 
 2017-07-24  Jason Marcell  <[email protected]>

Modified: branches/safari-604-branch/Source/WebCore/page/PageOverlayController.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/page/PageOverlayController.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/page/PageOverlayController.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -360,7 +360,7 @@
     return { };
 }
 
-void PageOverlayController::paintContents(const WebCore::GraphicsLayer* graphicsLayer, WebCore::GraphicsContext& graphicsContext, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect, GraphicsLayerPaintFlags)
+void PageOverlayController::paintContents(const WebCore::GraphicsLayer* graphicsLayer, WebCore::GraphicsContext& graphicsContext, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect, GraphicsLayerPaintBehavior)
 {
     for (auto& overlayAndGraphicsLayer : m_overlayGraphicsLayers) {
         if (overlayAndGraphicsLayer.value.get() != graphicsLayer)

Modified: branches/safari-604-branch/Source/WebCore/page/PageOverlayController.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/page/PageOverlayController.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/page/PageOverlayController.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -88,7 +88,7 @@
 
     // GraphicsLayerClient
     void notifyFlushRequired(const GraphicsLayer*) override;
-    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& clipRect, GraphicsLayerPaintFlags) override;
+    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& clipRect, GraphicsLayerPaintBehavior) override;
     float deviceScaleFactor() const override;
     bool shouldSkipLayerInDump(const GraphicsLayer*, LayerTreeAsTextBehavior) const override;
     void tiledBackingUsageChanged(const GraphicsLayer*, bool) override;

Modified: branches/safari-604-branch/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -85,7 +85,7 @@
     }
 
 private:
-    void paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintFlags) override
+    void paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintBehavior) override
     {
         GraphicsContextStateSaver stateSaver(context);
         context.fillRect(clip, Color(0.0f, 0.0f, 0.0f, 0.8f));

Modified: branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -82,7 +82,7 @@
 
         // GraphicsLayerClient
         void notifyFlushRequired(const GraphicsLayer*) override;
-        void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& inClip, GraphicsLayerPaintFlags) override;
+        void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& inClip, GraphicsLayerPaintBehavior) override;
         float deviceScaleFactor() const override;
 
         void didFinishFadeOutAnimation();

Modified: branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.mm (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.mm	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/page/mac/ServicesOverlayController.mm	2017-07-26 09:51:28 UTC (rev 219916)
@@ -129,7 +129,7 @@
     page->chrome().client().scheduleCompositingLayerFlush();
 }
 
-void ServicesOverlayController::Highlight::paintContents(const GraphicsLayer*, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect&, GraphicsLayerPaintFlags)
+void ServicesOverlayController::Highlight::paintContents(const GraphicsLayer*, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect&, GraphicsLayerPaintBehavior)
 {
     if (!DataDetectorsLibrary())
         return;

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/BitmapImage.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/BitmapImage.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/BitmapImage.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -107,6 +107,8 @@
     bool canUseAsyncDecodingForLargeImages() const;
     bool shouldUseAsyncDecodingForAnimatedImages() const;
     void setClearDecoderAfterAsyncFrameRequestForTesting(bool value) { m_clearDecoderAfterAsyncFrameRequestForTesting = value; }
+    void setLargeImageAsyncDecodingEnabledForTesting(bool enabled) { m_largeImageAsyncDecodingEnabledForTesting = enabled; }
+    bool isLargeImageAsyncDecodingEnabledForTesting() const { return m_largeImageAsyncDecodingEnabledForTesting; }
 
     WEBCORE_EXPORT unsigned decodeCountForTesting() const;
 
@@ -223,6 +225,7 @@
     bool m_showDebugBackground { false };
 
     bool m_clearDecoderAfterAsyncFrameRequestForTesting { false };
+    bool m_largeImageAsyncDecodingEnabledForTesting { false };
 
 #if !LOG_DISABLED
     size_t m_lateFrameCount { 0 };

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -418,7 +418,7 @@
     m_backgroundColor = color;
 }
 
-void GraphicsLayer::paintGraphicsLayerContents(GraphicsContext& context, const FloatRect& clip, GraphicsLayerPaintFlags flags)
+void GraphicsLayer::paintGraphicsLayerContents(GraphicsContext& context, const FloatRect& clip, GraphicsLayerPaintBehavior layerPaintBehavior)
 {
     FloatSize offset = offsetFromRenderer();
     context.translate(-offset);
@@ -426,7 +426,7 @@
     FloatRect clipRect(clip);
     clipRect.move(offset);
 
-    m_client.paintContents(this, context, m_paintingPhase, clipRect, flags);
+    m_client.paintContents(this, context, m_paintingPhase, clipRect, layerPaintBehavior);
 }
 
 String GraphicsLayer::animationNameForTransition(AnimatedPropertyID property)

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayer.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -466,7 +466,7 @@
     virtual bool usesContentsLayer() const { return false; }
 
     // Callback from the underlying graphics system to draw layer contents.
-    void paintGraphicsLayerContents(GraphicsContext&, const FloatRect& clip, GraphicsLayerPaintFlags = GraphicsLayerPaintFlags::AllowAsyncImageDecoding);
+    void paintGraphicsLayerContents(GraphicsContext&, const FloatRect& clip, GraphicsLayerPaintBehavior = GraphicsLayerPaintAllowAsyncImageDecoding);
 
     // For hosting this GraphicsLayer in a native layer hierarchy.
     virtual PlatformLayer* platformLayer() const { return 0; }

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayerClient.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayerClient.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/GraphicsLayerClient.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -75,7 +75,11 @@
 };
 typedef unsigned LayerTreeAsTextBehavior;
 
-enum class GraphicsLayerPaintFlags { None, AllowAsyncImageDecoding };
+enum GraphicsLayerPaintFlags {
+    GraphicsLayerPaintNormal                    = 0,
+    GraphicsLayerPaintAllowAsyncImageDecoding   = 1 << 0,
+};
+typedef unsigned GraphicsLayerPaintBehavior;
     
 class GraphicsLayerClient {
 public:
@@ -94,7 +98,7 @@
     // Notification that this layer requires a flush before the next display refresh.
     virtual void notifyFlushBeforeDisplayRefresh(const GraphicsLayer*) { }
 
-    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& /* inClip */, GraphicsLayerPaintFlags) { }
+    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& /* inClip */, GraphicsLayerPaintBehavior) { }
     virtual void didCommitChangesForLayer(const GraphicsLayer*) const { }
 
     // Provides current transform (taking transform-origin and animations into account). Input matrix has been

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -220,7 +220,7 @@
 
     virtual void platformCALayerAnimationStarted(CFTimeInterval beginTime) { }
     virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return GraphicsLayer::CompositingCoordinatesBottomUp; }
-    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintFlags) { }
+    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintBehavior) { }
     virtual bool platformCALayerShowDebugBorders() const { return false; }
     virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const { return false; }
     virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) { return 0; }

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1579,7 +1579,7 @@
     return isShowingRepaintCounter();
 }
 
-void GraphicsLayerCA::platformCALayerPaintContents(PlatformCALayer*, GraphicsContext& context, const FloatRect& clip, GraphicsLayerPaintFlags flags)
+void GraphicsLayerCA::platformCALayerPaintContents(PlatformCALayer*, GraphicsContext& context, const FloatRect& clip, GraphicsLayerPaintBehavior layerPaintBehavior)
 {
     m_hasEverPainted = true;
     if (m_displayList) {
@@ -1595,7 +1595,7 @@
     }
 
     TraceScope tracingScope(PaintLayerStart, PaintLayerEnd);
-    paintGraphicsLayerContents(context, clip, flags);
+    paintGraphicsLayerContents(context, clip, layerPaintBehavior);
 }
 
 void GraphicsLayerCA::platformCALayerSetNeedsToRevalidateTiles()

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -188,9 +188,10 @@
     WEBCORE_EXPORT void platformCALayerAnimationStarted(const String& animationKey, CFTimeInterval beginTime) override;
     WEBCORE_EXPORT void platformCALayerAnimationEnded(const String& animationKey) override;
     CompositingCoordinatesOrientation platformCALayerContentsOrientation() const override { return contentsOrientation(); }
-    WEBCORE_EXPORT void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect& clip, GraphicsLayerPaintFlags) override;
+    WEBCORE_EXPORT void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect& clip, GraphicsLayerPaintBehavior) override;
     bool platformCALayerShowDebugBorders() const override { return isShowingDebugBorder(); }
     WEBCORE_EXPORT bool platformCALayerShowRepaintCounter(PlatformCALayer*) const override;
+    int platformCALayerRepaintCount(PlatformCALayer*) const override { return repaintCount(); }
     int platformCALayerIncrementRepaintCount(PlatformCALayer*) override { return incrementRepaintCount(); }
 
     bool platformCALayerContentsOpaque() const override { return contentsOpaque(); }

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayer.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayer.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayer.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -276,7 +276,7 @@
         
     // Functions allows us to share implementation across WebTiledLayer and WebLayer
     static RepaintRectList collectRectsToPaint(CGContextRef, PlatformCALayer*);
-    static void drawLayerContents(CGContextRef, PlatformCALayer*, RepaintRectList& dirtyRects, GraphicsLayerPaintFlags);
+    static void drawLayerContents(CGContextRef, PlatformCALayer*, RepaintRectList& dirtyRects, GraphicsLayerPaintBehavior);
     static void drawRepaintIndicator(CGContextRef, PlatformCALayer*, int repaintCount, CGColorRef customBackgroundColor);
     static CGRect frameForLayer(const PlatformLayer*);
 

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -43,9 +43,10 @@
     virtual void platformCALayerAnimationStarted(const String& /*animationKey*/, CFTimeInterval) { }
     virtual void platformCALayerAnimationEnded(const String& /*animationKey*/) { }
     virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return GraphicsLayer::CompositingCoordinatesTopDown; }
-    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect& inClip, GraphicsLayerPaintFlags) = 0;
+    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect& inClip, GraphicsLayerPaintBehavior) = 0;
     virtual bool platformCALayerShowDebugBorders() const { return false; }
     virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const { return false; }
+    virtual int platformCALayerRepaintCount(PlatformCALayer*) const { return 0; }
     virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) { return 0; }
     
     virtual bool platformCALayerContentsOpaque() const = 0;

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -152,7 +152,7 @@
     m_visibleViewportIndicatorLayer.get().setBorderColor(visibleRectIndicatorColor);
 }
 
-void TileCoverageMap::platformCALayerPaintContents(PlatformCALayer* platformCALayer, GraphicsContext& context, const FloatRect&, GraphicsLayerPaintFlags)
+void TileCoverageMap::platformCALayerPaintContents(PlatformCALayer* platformCALayer, GraphicsContext& context, const FloatRect&, GraphicsLayerPaintBehavior)
 {
     ASSERT_UNUSED(platformCALayer, platformCALayer == m_layer.ptr());
     m_controller.tileGrid().drawTileMapContents(context.platformContext(), m_layer.get().bounds());

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileCoverageMap.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -61,7 +61,7 @@
     GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const override { return GraphicsLayer::CompositingCoordinatesTopDown; }
     bool platformCALayerContentsOpaque() const override { return true; }
     bool platformCALayerDrawsContent() const override { return true; }
-    void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintFlags) override;
+    void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintBehavior) override;
     float platformCALayerDeviceScaleFactor() const override;
 
     void updateTimerFired();

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -712,7 +712,7 @@
     }
 }
 
-void TileGrid::platformCALayerPaintContents(PlatformCALayer* platformCALayer, GraphicsContext& context, const FloatRect&, GraphicsLayerPaintFlags flags)
+void TileGrid::platformCALayerPaintContents(PlatformCALayer* platformCALayer, GraphicsContext& context, const FloatRect&, GraphicsLayerPaintBehavior layerPaintBehavior)
 {
 #if PLATFORM(IOS)
     if (pthread_main_np())
@@ -719,6 +719,9 @@
         WebThreadLock();
 #endif
 
+    if (platformCALayerRepaintCount(platformCALayer))
+        layerPaintBehavior &= ~GraphicsLayerPaintAllowAsyncImageDecoding;
+
     {
         GraphicsContextStateSaver stateSaver(context);
 
@@ -727,7 +730,7 @@
         context.scale(m_scale);
 
         PlatformCALayer::RepaintRectList dirtyRects = PlatformCALayer::collectRectsToPaint(context.platformContext(), platformCALayer);
-        PlatformCALayer::drawLayerContents(context.platformContext(), &m_controller.rootLayer(), dirtyRects, flags);
+        PlatformCALayer::drawLayerContents(context.platformContext(), &m_controller.rootLayer(), dirtyRects, layerPaintBehavior);
     }
 
     int repaintCount = platformCALayerIncrementRepaintCount(platformCALayer);
@@ -768,6 +771,12 @@
     return m_controller.tilesAreOpaque();
 }
 
+int TileGrid::platformCALayerRepaintCount(PlatformCALayer* platformCALayer) const
+{
+    const auto it = m_tileRepaintCounts.find(platformCALayer);
+    return it != m_tileRepaintCounts.end() ? it->value : 0;
+}
+
 int TileGrid::platformCALayerIncrementRepaintCount(PlatformCALayer* platformCALayer)
 {
     int repaintCount = 0;

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/TileGrid.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -143,9 +143,10 @@
     void removeTiles(Vector<TileGrid::TileIndex>& toRemove);
 
     // PlatformCALayerClient
-    void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintFlags) override;
+    void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintBehavior) override;
     bool platformCALayerShowDebugBorders() const override;
     bool platformCALayerShowRepaintCounter(PlatformCALayer*) const override;
+    int platformCALayerRepaintCount(PlatformCALayer*) const override;
     int platformCALayerIncrementRepaintCount(PlatformCALayer*) override;
     bool platformCALayerContentsOpaque() const override;
     bool platformCALayerDrawsContent() const override { return true; }

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1119,12 +1119,15 @@
     return dirtyRects;
 }
 
-void PlatformCALayer::drawLayerContents(CGContextRef context, WebCore::PlatformCALayer* platformCALayer, RepaintRectList& dirtyRects, GraphicsLayerPaintFlags flags)
+void PlatformCALayer::drawLayerContents(CGContextRef context, WebCore::PlatformCALayer* platformCALayer, RepaintRectList& dirtyRects, GraphicsLayerPaintBehavior layerPaintBehavior)
 {
     WebCore::PlatformCALayerClient* layerContents = platformCALayer->owner();
     if (!layerContents)
         return;
-    
+
+    if (layerContents->platformCALayerRepaintCount(platformCALayer))
+        layerPaintBehavior &= ~GraphicsLayerPaintAllowAsyncImageDecoding;
+
 #if PLATFORM(IOS)
     WKSetCurrentGraphicsContext(context);
 #endif
@@ -1166,7 +1169,7 @@
             GraphicsContextStateSaver stateSaver(graphicsContext);
             graphicsContext.clip(rect);
             
-            layerContents->platformCALayerPaintContents(platformCALayer, graphicsContext, rect, flags);
+            layerContents->platformCALayerPaintContents(platformCALayer, graphicsContext, rect, layerPaintBehavior);
         }
         
 #if PLATFORM(IOS)

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -109,7 +109,7 @@
     return dirtyRects;
 }
 
-void PlatformCALayer::drawLayerContents(CGContextRef context, WebCore::PlatformCALayer* platformCALayer, RepaintRectList&, GraphicsLayerPaintFlags)
+void PlatformCALayer::drawLayerContents(CGContextRef context, WebCore::PlatformCALayer* platformCALayer, RepaintRectList&, GraphicsLayerPaintBehavior)
 {
     intern(platformCALayer)->displayCallback(platformCALayer->platformLayer(), context);
 }

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -104,7 +104,7 @@
     // smaller than the layer bounds (e.g. tiled layers)
     CGRect clipBounds = CGContextGetClipBoundingBox(context);
     IntRect clip(enclosingIntRect(clipBounds));
-    client->platformCALayerPaintContents(owner(), graphicsContext, clip, GraphicsLayerPaintFlags::None);
+    client->platformCALayerPaintContents(owner(), graphicsContext, clip, GraphicsLayerPaintNormal);
 
     if (client->platformCALayerShowRepaintCounter(owner())
         && !repaintCountersAreDrawnByGridController(layerType)) {

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/WebTiledBackingLayerWin.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/WebTiledBackingLayerWin.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/ca/win/WebTiledBackingLayerWin.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -95,7 +95,7 @@
     // smaller than the layer bounds (e.g. tiled layers)
     CGRect clipBounds = CGContextGetClipBoundingBox(context);
     IntRect clip(enclosingIntRect(clipBounds));
-    client->platformCALayerPaintContents(owner(), graphicsContext, clip, GraphicsLayerPaintFlags::None);
+    client->platformCALayerPaintContents(owner(), graphicsContext, clip, GraphicsLayerPaintNormal);
 
     if (client->platformCALayerShowRepaintCounter(owner())) {
         int drawCount = client->platformCALayerIncrementRepaintCount(owner());

Modified: branches/safari-604-branch/Source/WebCore/platform/graphics/mac/WebLayer.mm (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/platform/graphics/mac/WebLayer.mm	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/platform/graphics/mac/WebLayer.mm	2017-07-26 09:51:28 UTC (rev 219916)
@@ -57,7 +57,7 @@
     PlatformCALayer* layer = PlatformCALayer::platformCALayer(self);
     if (layer) {
         PlatformCALayer::RepaintRectList rectsToPaint = PlatformCALayer::collectRectsToPaint(context, layer);
-        PlatformCALayer::drawLayerContents(context, layer, rectsToPaint, self.isRenderingInContext ? GraphicsLayerPaintFlags::None : GraphicsLayerPaintFlags::AllowAsyncImageDecoding);
+        PlatformCALayer::drawLayerContents(context, layer, rectsToPaint, self.isRenderingInContext ? GraphicsLayerPaintNormal : GraphicsLayerPaintAllowAsyncImageDecoding);
     }
 }
 
@@ -137,7 +137,7 @@
         graphicsContext.setIsAcceleratedContext(layer->acceleratesDrawing());
 
         FloatRect clipBounds = CGContextGetClipBoundingBox(context);
-        layer->owner()->platformCALayerPaintContents(layer, graphicsContext, clipBounds, self.isRenderingInContext ? GraphicsLayerPaintFlags::None : GraphicsLayerPaintFlags::AllowAsyncImageDecoding);
+        layer->owner()->platformCALayerPaintContents(layer, graphicsContext, clipBounds, self.isRenderingInContext ? GraphicsLayerPaintNormal : GraphicsLayerPaintAllowAsyncImageDecoding);
     }
 }
 

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderBoxModelObject.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderBoxModelObject.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderBoxModelObject.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -324,6 +324,8 @@
     if (IOSApplication::isIBooksStorytime())
         return DecodingMode::Synchronous;
 #endif
+    if (bitmapImage.isLargeImageAsyncDecodingEnabledForTesting())
+        return DecodingMode::Asynchronous;
     if (document().isImageDocument())
         return DecodingMode::Synchronous;
     if (!settings().largeImageAsyncDecodingEnabled())
@@ -332,6 +334,9 @@
         return DecodingMode::Synchronous;
     if (paintInfo.paintBehavior & PaintBehaviorAllowAsyncImageDecoding)
         return DecodingMode::Asynchronous;
+    // FIXME: isVisibleInViewport() is not cheap. We need a way to make this condition faster.
+    if (!isVisibleInViewport())
+        return DecodingMode::Asynchronous;
     return DecodingMode::Synchronous;
 }
 

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderElement.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderElement.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderElement.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -287,6 +287,7 @@
     void adjustFlowThreadStateOnContainingBlockChangeIfNeeded();
     
     bool noLongerAffectsParentBlock() const { return s_noLongerAffectsParentBlock; }
+    bool isVisibleInViewport() const;
 
 private:
     RenderElement(ContainerNode&, RenderStyle&&, BaseTypeFlags);
@@ -316,7 +317,6 @@
     std::unique_ptr<RenderStyle> computeFirstLineStyle() const;
     void invalidateCachedFirstLineStyle();
 
-    bool isVisibleInViewport() const;
     bool canDestroyDecodedData() final { return !isVisibleInViewport(); }
     VisibleInViewportState imageFrameAvailable(CachedImage&, ImageAnimatingState, const IntRect* changeRect) final;
     void didRemoveCachedImageClient(CachedImage&) final;

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -2569,7 +2569,7 @@
 }
 
 // Up-call from compositing layer drawing callback.
-void RenderLayerBacking::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase paintingPhase, const FloatRect& clip, GraphicsLayerPaintFlags flags)
+void RenderLayerBacking::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase paintingPhase, const FloatRect& clip, GraphicsLayerPaintBehavior layerPaintBehavior)
 {
 #ifndef NDEBUG
     renderer().page().setIsPainting(true);
@@ -2580,6 +2580,9 @@
     adjustedClipRect.move(m_subpixelOffsetFromRenderer);
     IntRect dirtyRect = enclosingIntRect(adjustedClipRect);
 
+    if (graphicsLayer->repaintCount())
+        layerPaintBehavior &= ~GraphicsLayerPaintAllowAsyncImageDecoding;
+
     if (graphicsLayer == m_graphicsLayer.get()
         || graphicsLayer == m_foregroundLayer.get()
         || graphicsLayer == m_backgroundLayer.get()
@@ -2593,7 +2596,7 @@
 
         // We have to use the same root as for hit testing, because both methods can compute and cache clipRects.
         PaintBehavior behavior = PaintBehaviorNormal;
-        if (flags == GraphicsLayerPaintFlags::AllowAsyncImageDecoding)
+        if (layerPaintBehavior == GraphicsLayerPaintAllowAsyncImageDecoding)
             behavior |= PaintBehaviorAllowAsyncImageDecoding;
 
         paintIntoLayer(graphicsLayer, context, dirtyRect, behavior, paintingPhase);

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderLayerBacking.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -197,7 +197,7 @@
     void notifyFlushRequired(const GraphicsLayer*) override;
     void notifyFlushBeforeDisplayRefresh(const GraphicsLayer*) override;
 
-    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintFlags) override;
+    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintBehavior) override;
 
     float deviceScaleFactor() const override;
     float contentsScaleMultiplierForNewTiles(const GraphicsLayer*) const override;

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -2895,7 +2895,7 @@
     context.restore();
 }
 
-void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintFlags)
+void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintBehavior)
 {
     IntRect pixelSnappedRectForIntegralPositionedItems = snappedIntRect(LayoutRect(clip));
     if (graphicsLayer == layerForHorizontalScrollbar())

Modified: branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/rendering/RenderLayerCompositor.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -337,7 +337,7 @@
 
     // GraphicsLayerClient implementation
     void notifyFlushRequired(const GraphicsLayer*) override;
-    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect&, GraphicsLayerPaintFlags) override;
+    void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect&, GraphicsLayerPaintBehavior) override;
     void customPositionForVisibleRectComputation(const GraphicsLayer*, FloatPoint&) const override;
     bool isTrackingRepaints() const override;
     

Modified: branches/safari-604-branch/Source/WebCore/testing/Internals.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/testing/Internals.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/testing/Internals.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -738,79 +738,58 @@
     return MemoryCache::singleton().size();
 }
 
-unsigned Internals::imageFrameIndex(HTMLImageElement& element)
+static Image* imageFromImageElement(HTMLImageElement& element)
 {
     auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return 0;
+    return cachedImage ? cachedImage->image() : nullptr;
+}
 
-    auto* image = cachedImage->image();
-    return is<BitmapImage>(image) ? downcast<BitmapImage>(*image).currentFrame() : 0;
+static BitmapImage* bitmapImageFromImageElement(HTMLImageElement& element)
+{
+    auto* image = imageFromImageElement(element);
+    return image && is<BitmapImage>(image) ? &downcast<BitmapImage>(*image) : nullptr;
 }
 
+unsigned Internals::imageFrameIndex(HTMLImageElement& element)
+{
+    auto* bitmapImage = bitmapImageFromImageElement(element);
+    return bitmapImage ? bitmapImage->currentFrame() : 0;
+}
+
 void Internals::setImageFrameDecodingDuration(HTMLImageElement& element, float duration)
 {
-    auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return;
-
-    auto* image = cachedImage->image();
-    if (!is<BitmapImage>(image))
-        return;
-
-    downcast<BitmapImage>(*image).setFrameDecodingDurationForTesting(Seconds { duration });
+    if (auto* bitmapImage = bitmapImageFromImageElement(element))
+        bitmapImage->setFrameDecodingDurationForTesting(Seconds { duration });
 }
 
 void Internals::resetImageAnimation(HTMLImageElement& element)
 {
-    auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return;
-
-    auto* image = cachedImage->image();
-    if (!is<BitmapImage>(image))
-        return;
-
-    image->resetAnimation();
+    if (auto* image = imageFromImageElement(element))
+        image->resetAnimation();
 }
 
 bool Internals::isImageAnimating(HTMLImageElement& element)
 {
-    auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return false;
-
-    auto* image = cachedImage->image();
-    if (!image)
-        return false;
-
-    return image->isAnimating() || image->animationPending();
+    auto* image = imageFromImageElement(element);
+    return image && (image->isAnimating() || image->animationPending());
 }
 
-void Internals::setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement& element, bool value)
+void Internals::setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement& element, bool enabled)
 {
-    auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return;
-
-    auto* image = cachedImage->image();
-    if (!is<BitmapImage>(image))
-        return;
-
-    downcast<BitmapImage>(*image).setClearDecoderAfterAsyncFrameRequestForTesting(value);
+    if (auto* bitmapImage = bitmapImageFromImageElement(element))
+        bitmapImage->setClearDecoderAfterAsyncFrameRequestForTesting(enabled);
 }
 
 unsigned Internals::imageDecodeCount(HTMLImageElement& element)
 {
-    auto* cachedImage = element.cachedImage();
-    if (!cachedImage)
-        return 0;
+    auto* bitmapImage = bitmapImageFromImageElement(element);
+    return bitmapImage ? bitmapImage->decodeCountForTesting() : 0;
+}
 
-    auto* image = cachedImage->image();
-    if (!is<BitmapImage>(image))
-        return 0;
-
-    return downcast<BitmapImage>(*image).decodeCountForTesting();
+void Internals::setLargeImageAsyncDecodingEnabledForTesting(HTMLImageElement& element, bool enabled)
+{
+    if (auto* bitmapImage = bitmapImageFromImageElement(element))
+        bitmapImage->setLargeImageAsyncDecodingEnabledForTesting(enabled);
 }
 
 void Internals::setGridMaxTracksLimit(unsigned maxTrackLimit)

Modified: branches/safari-604-branch/Source/WebCore/testing/Internals.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/testing/Internals.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/testing/Internals.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -122,8 +122,9 @@
     void setImageFrameDecodingDuration(HTMLImageElement&, float duration);
     void resetImageAnimation(HTMLImageElement&);
     bool isImageAnimating(HTMLImageElement&);
-    void setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement&, bool);
+    void setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement&, bool enabled);
     unsigned imageDecodeCount(HTMLImageElement&);
+    void setLargeImageAsyncDecodingEnabledForTesting(HTMLImageElement&, bool enabled);
 
     void setGridMaxTracksLimit(unsigned);
 

Modified: branches/safari-604-branch/Source/WebCore/testing/Internals.idl (219915 => 219916)


--- branches/safari-604-branch/Source/WebCore/testing/Internals.idl	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebCore/testing/Internals.idl	2017-07-26 09:51:28 UTC (rev 219916)
@@ -249,8 +249,9 @@
     void setImageFrameDecodingDuration(HTMLImageElement element, unrestricted float duration);
     void resetImageAnimation(HTMLImageElement element);
     boolean isImageAnimating(HTMLImageElement element);
-    void setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement element, boolean value);
+    void setClearDecoderAfterAsyncFrameRequestForTesting(HTMLImageElement element, boolean enabled);
     unsigned long imageDecodeCount(HTMLImageElement element);
+    void setLargeImageAsyncDecodingEnabledForTesting(HTMLImageElement element, boolean enabled);
 
     void setGridMaxTracksLimit(unsigned long maxTracksLimit);
 

Modified: branches/safari-604-branch/Source/WebKit/ChangeLog (219915 => 219916)


--- branches/safari-604-branch/Source/WebKit/ChangeLog	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKit/ChangeLog	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1,3 +1,20 @@
+2017-07-26  Jason Marcell  <[email protected]>
+
+        Cherry-pick r219610. rdar://problem/33523847
+
+    2017-07-18  Said Abou-Hallawa  <[email protected]>
+
+            Async image decoding for large images should be disabled after the first time a tile is painted
+            https://bugs.webkit.org/show_bug.cgi?id=174451
+
+            Reviewed by Simon Fraser.
+
+            * Shared/mac/RemoteLayerBackingStore.mm:
+            (WebKit::RemoteLayerBackingStore::drawInContext):
+            * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
+            (WebKit::CompositingCoordinator::paintContents):
+            * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
+
 2017-07-24  Jason Marcell  <[email protected]>
 
         Cherry-pick r219852. rdar://problem/33503476

Modified: branches/safari-604-branch/Source/WebKit/Shared/mac/RemoteLayerBackingStore.mm (219915 => 219916)


--- branches/safari-604-branch/Source/WebKit/Shared/mac/RemoteLayerBackingStore.mm	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKit/Shared/mac/RemoteLayerBackingStore.mm	2017-07-26 09:51:28 UTC (rev 219916)
@@ -336,7 +336,7 @@
 
     context.scale(m_scale);
     
-    auto flags = m_layer->context() && m_layer->context()->nextFlushIsForImmediatePaint() ? WebCore::GraphicsLayerPaintFlags::None : WebCore::GraphicsLayerPaintFlags::AllowAsyncImageDecoding;
+    auto flags = m_layer->context() && m_layer->context()->nextFlushIsForImmediatePaint() ? WebCore::GraphicsLayerPaintNormal : WebCore::GraphicsLayerPaintAllowAsyncImageDecoding;
     
     // FIXME: This should be moved to PlatformCALayerRemote for better layering.
     switch (m_layer->layerType()) {

Modified: branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -266,7 +266,7 @@
         m_client.notifyFlushRequired();
 }
 
-void CompositingCoordinator::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect& clipRect, GraphicsLayerPaintFlags)
+void CompositingCoordinator::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect& clipRect, GraphicsLayerPaintBehavior)
 {
     m_client.paintLayerContents(graphicsLayer, graphicsContext, enclosingIntRect(clipRect));
 }

Modified: branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -101,7 +101,7 @@
     // GraphicsLayerClient
     void notifyAnimationStarted(const WebCore::GraphicsLayer*, const String&, double time) override;
     void notifyFlushRequired(const WebCore::GraphicsLayer*) override;
-    void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect, WebCore::GraphicsLayerPaintFlags) override;
+    void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect, WebCore::GraphicsLayerPaintBehavior) override;
     float deviceScaleFactor() const override;
     float pageScaleFactor() const override;
 

Modified: branches/safari-604-branch/Source/WebKitLegacy/win/ChangeLog (219915 => 219916)


--- branches/safari-604-branch/Source/WebKitLegacy/win/ChangeLog	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKitLegacy/win/ChangeLog	2017-07-26 09:51:28 UTC (rev 219916)
@@ -1,3 +1,20 @@
+2017-07-26  Jason Marcell  <[email protected]>
+
+        Cherry-pick r219610. rdar://problem/33523847
+
+    2017-07-18  Said Abou-Hallawa  <[email protected]>
+
+            Async image decoding for large images should be disabled after the first time a tile is painted
+            https://bugs.webkit.org/show_bug.cgi?id=174451
+
+            Reviewed by Simon Fraser.
+
+            * FullscreenVideoController.cpp:
+            (FullscreenVideoController::LayerClient::platformCALayerPaintContents):
+            * WebCoreSupport/AcceleratedCompositingContext.cpp:
+            (AcceleratedCompositingContext::paintContents):
+            * WebCoreSupport/AcceleratedCompositingContext.h:
+
 2017-07-14  Basuke Suzuki  <[email protected]>
 
         [Curl] Don't start downloading more than once for same request

Modified: branches/safari-604-branch/Source/WebKitLegacy/win/FullscreenVideoController.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebKitLegacy/win/FullscreenVideoController.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKitLegacy/win/FullscreenVideoController.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -187,7 +187,7 @@
 
     virtual void platformCALayerAnimationStarted(CFTimeInterval beginTime) { }
     virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return GraphicsLayer::CompositingCoordinatesBottomUp; }
-    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintFlags) { }
+    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&, const FloatRect&, GraphicsLayerPaintBehavior) { }
     virtual bool platformCALayerShowDebugBorders() const { return false; }
     virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const { return false; }
     virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) { return 0; }

Modified: branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.cpp (219915 => 219916)


--- branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.cpp	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.cpp	2017-07-26 09:51:28 UTC (rev 219916)
@@ -403,7 +403,7 @@
         scheduleLayerFlush();
 }
 
-void AcceleratedCompositingContext::paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& rectToPaint, GraphicsLayerPaintFlags)
+void AcceleratedCompositingContext::paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& rectToPaint, GraphicsLayerPaintBehavior)
 {
     context.save();
     context.clip(rectToPaint);

Modified: branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.h (219915 => 219916)


--- branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.h	2017-07-26 09:51:15 UTC (rev 219915)
+++ branches/safari-604-branch/Source/WebKitLegacy/win/WebCoreSupport/AcceleratedCompositingContext.h	2017-07-26 09:51:28 UTC (rev 219916)
@@ -52,7 +52,7 @@
     bool enabled();
 
     // GraphicsLayerClient
-    void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& rectToPaint, WebCore::GraphicsLayerPaintFlags) override;
+    void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& rectToPaint, WebCore::GraphicsLayerPaintBehavior) override;
     float deviceScaleFactor() const override;
 
     void initialize();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to