Turn on IOSurface support in the iOS Simulator
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Nov 2019 00:08:25 +0000 (00:08 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Nov 2019 00:08:25 +0000 (00:08 +0000)
https://bugs.webkit.org/show_bug.cgi?id=203026
<rdar://problem/56320993>

Reviewed by Simon Fraser.

Source/WebCore:

* Configurations/WebCore.xcconfig:
Always link IOSurface now that we always have it. We continue to only link
IOSurfaceAccelerator on iOS hardware, since it's only available there.

* platform/graphics/cocoa/IOSurface.h:
Turn off RGB10 in the Simulator.

* rendering/RenderThemeIOS.mm:
(WebCore::RenderThemeIOS::paintSystemPreviewBadge):
Disable CoreImage rendering via IOSurface for the system preview badge,
since it does not seem to work in the simulator.

Source/WebKit:

* Configurations/WebKit.xcconfig:
Always link IOSurface now that we always have it.

* Shared/WebPreferences.yaml:
* Shared/WebPreferencesDefaultValues.h:
Turn on Accelerated Drawing and Accelerated Drawing for Canvas by default.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _takeViewSnapshot]):
Don't use RGB10 if we don't have it.

(-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
Don't use render server snapshotting in hidden windows, because it
(correctly, but unhelpfully) cannot capture contents in that case.

Source/WTF:

* wtf/Platform.h:
Turn on HAVE(IOSURFACE) and USE(IOSURFACE_CANVAS_BACKING_STORE) in the simulator.
Add HAVE(IOSURFACE_COREIMAGE_SUPPORT).

Tools:

* DumpRenderTree/ios/PixelDumpSupportIOS.mm:
(createBitmapContextFromWebView):
Don't use RGB10 if we don't have it.

* TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
(TEST):
Don't allocate many megabytes on the stack.
This isn't currently a problem, but if you accidentally run the tests on
a 3x simulator it starts crashing.

LayoutTests:

* compositing/canvas/accelerated-canvas-compositing-size-limit-expected.txt:
* platform/ios-device/TestExpectations:
* platform/ios/TestExpectations:
* platform/ios/compositing/canvas/accelerated-canvas-compositing-expected.txt: Added.
* platform/ios/compositing/canvas/accelerated-canvas-compositing-size-limit-expected.txt: Removed.
* platform/ios/fast/canvas/canvas-render-layer-expected.txt: Added.
* platform/ios/fast/canvas/canvas-scale-shadowBlur-expected.txt: Added.
* platform/ios/fast/canvas/canvas-scale-strokePath-shadow-expected.txt: Added.
* platform/ios/imported/w3c/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image-expected.txt: Removed.
Move and expand the scope of some TestExpectations for canvas tests
that fail due to noise introduced in the hardware accelerated drawing path.
We will separately investigate how to mitigate this, but it already affects
iOS on-device testing (as well as macOS in most cases). The tiny reduction
in coverage here is well worth the massive improvement in coverage of
accelerated drawing code paths.

* fast/images/exif-orientation-canvas-expected.html:
Due to rdar://problem/56755864, <canvas> and <img> render slightly differently.
Use <canvas> for the reference as well, but use transforms to translate it
instead of depending on EXIF orientation support, to continue testing
the intended behavior.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251896 268f45cc-cd09-0410-ab3c-d52691b4dbfc

24 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/images/exif-orientation-canvas-expected.html
LayoutTests/platform/ios-device/TestExpectations
LayoutTests/platform/ios/TestExpectations
LayoutTests/platform/ios/compositing/canvas/accelerated-canvas-compositing-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios/compositing/canvas/accelerated-canvas-compositing-size-limit-expected.txt
LayoutTests/platform/ios/fast/canvas/canvas-render-layer-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios/fast/canvas/canvas-scale-shadowBlur-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios/fast/canvas/canvas-scale-strokePath-shadow-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios/imported/w3c/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image-expected.txt [deleted file]
Source/WTF/ChangeLog
Source/WTF/wtf/Platform.h
Source/WebCore/ChangeLog
Source/WebCore/Configurations/WebCore.xcconfig
Source/WebCore/platform/graphics/cocoa/IOSurface.h
Source/WebCore/rendering/RenderThemeIOS.mm
Source/WebKit/ChangeLog
Source/WebKit/Configurations/WebKit.xcconfig
Source/WebKit/Shared/WebPreferences.yaml
Source/WebKit/Shared/WebPreferencesDefaultValues.h
Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
Tools/ChangeLog
Tools/DumpRenderTree/ios/PixelDumpSupportIOS.mm
Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm

index 0b74042..1c4f5d6 100644 (file)
@@ -1,3 +1,33 @@
+2019-10-31  Tim Horton  <timothy_horton@apple.com>
+
+        Turn on IOSurface support in the iOS Simulator
+        https://bugs.webkit.org/show_bug.cgi?id=203026
+        <rdar://problem/56320993>
+
+        Reviewed by Simon Fraser.
+
+        * compositing/canvas/accelerated-canvas-compositing-size-limit-expected.txt:
+        * platform/ios-device/TestExpectations:
+        * platform/ios/TestExpectations:
+        * platform/ios/compositing/canvas/accelerated-canvas-compositing-expected.txt: Added.
+        * platform/ios/compositing/canvas/accelerated-canvas-compositing-size-limit-expected.txt: Removed.
+        * platform/ios/fast/canvas/canvas-render-layer-expected.txt: Added.
+        * platform/ios/fast/canvas/canvas-scale-shadowBlur-expected.txt: Added.
+        * platform/ios/fast/canvas/canvas-scale-strokePath-shadow-expected.txt: Added.
+        * platform/ios/imported/w3c/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image-expected.txt: Removed.
+        Move and expand the scope of some TestExpectations for canvas tests
+        that fail due to noise introduced in the hardware accelerated drawing path.
+        We will separately investigate how to mitigate this, but it already affects
+        iOS on-device testing (as well as macOS in most cases). The tiny reduction
+        in coverage here is well worth the massive improvement in coverage of
+        accelerated drawing code paths.
+
+        * fast/images/exif-orientation-canvas-expected.html:
+        Due to rdar://problem/56755864, <canvas> and <img> render slightly differently.
+        Use <canvas> for the reference as well, but use transforms to translate it
+        instead of depending on EXIF orientation support, to continue testing
+        the intended behavior.
+
 2019-10-31  Jer Noble  <jer.noble@apple.com>
 
         [EME] Batch multiple key requests into one request and response
index fdcbc37..88de59e 100644 (file)
@@ -15,7 +15,7 @@
         width: 52px;
         height: 102px;
     }
-    img {
+    canvas {
         border: 1px solid black;
     }
 </style>
     <br>
     <div class="container">
         <div class="horizontal">
-            <img src="resources/exif-orientation-1-ul.jpg">
+            <canvas class="horizontal" id="canvas1" ></canvas>
         </div>
         <br>Normal
     </div>
     <div class="container">
         <div class="horizontal">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: scaleX(-1);">
+            <canvas class="horizontal" id="canvas2" style="transform: scaleX(-1);"></canvas>
         </div>
         <br>Flipped horizontally
     </div>
     <div class="container">
         <div class="horizontal">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: rotate(180deg);">
+            <canvas class="horizontal" id="canvas3" style="transform: rotate(180deg);"></canvas>
         </div>
         <br>Rotated 180&deg;
     </div>
     <div class="container">
         <div class="horizontal">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: scaleX(-1) rotate(180deg);">
+            <canvas class="horizontal" id="canvas4" style="transform: scaleX(-1) rotate(180deg);"></canvas>
         </div>
         <br>Flipped vertically
     </div>
     <br>
     <div class="container">
         <div class="vertical">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: translate(-25px, 25px) rotate(90deg) scaleY(-1);">
+            <canvas class="vertical" id="canvas5" style="transform: translate(-25px, 25px) rotate(90deg) scaleY(-1);"></canvas>
         </div>
         <br>Rotated 90&deg; CCW and flipped vertically
     </div>
     <div class="container">
         <div class="vertical">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: translate(-25px, 25px) rotate(90deg);">
+            <canvas class="vertical" id="canvas6" style="transform: translate(-25px, 25px) rotate(90deg);"></canvas>
         </div>
         <br>Rotated 90&deg; CCW
     </div>
     <div class="container">
         <div class="vertical">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: translate(-25px, 25px) rotate(270deg) scaleY(-1);">
+            <canvas class="vertical" id="canvas7" style="transform: translate(-25px, 25px) rotate(270deg) scaleY(-1);"></canvas>
         </div>
         <br>Rotated 90&deg; CW and flipped vertically
     </div>
     <div class="container">
         <div class="vertical">
-            <img src="resources/exif-orientation-1-ul.jpg" style="transform: translate(-25px, 25px) rotate(270deg);">
+            <canvas class="vertical" id="canvas8" style="transform: translate(-25px, 25px) rotate(270deg);"></canvas>
         </div>
         <br>Rotated 90&deg; CW
     </div>
     <br>
     <div class="container">
         <div class="horizontal">
-            <img src="resources/exif-orientation-1-ul.jpg">
+            <canvas class="horizontal" id="canvas9"></canvas>
         </div>
         <br>Undefined (invalid value)
     </div>
+    <script>
+        if (window.testRunner)
+            window.testRunner.waitUntilDone();
+
+        window.onload = function() {
+            var image = new Image;
+            image.src = "resources/exif-orientation-1-ul.jpg";
+            image.decode().then(() => {
+                document.querySelectorAll("canvas").forEach(canvas => {
+                    canvas.width = image.width;
+                    canvas.height = image.height;
+                    canvas.getContext("2d").drawImage(image, 0, 0, canvas.width, canvas.height);
+                });
+
+                if (window.testRunner)
+                    window.testRunner.notifyDone();
+            });
+        }
+    </script>
 </body>
index a9d8e21..aafb04e 100644 (file)
@@ -138,8 +138,6 @@ webgl/webgl-box-shadow.html
 webgl/webgl-border.html
 
 # https://bugs.webkit.org/show_bug.cgi?id=175736
-canvas/philip/tests/2d.path.stroke.scale2.html [ Failure ]
-fast/canvas/canvas-currentColor.html [ Failure ]
 fast/canvas/webgl/gl-teximage.html [ Failure ]
 fast/canvas/webgl/match-page-color-space.html [ ImageOnlyFailure ]
 fast/canvas/webgl/premultiplyalpha-test.html [ Failure ]
index 263e0db..f2ebac2 100644 (file)
@@ -3373,6 +3373,30 @@ imported/w3c/web-platform-tests/2dcontext/drawing-paths-to-the-canvas/drawFocusI
 imported/w3c/web-platform-tests/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html [ Skip ]
 imported/w3c/web-platform-tests/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html [ Skip ]
 
+# https://bugs.webkit.org/show_bug.cgi?id=175736
+canvas/philip/tests/2d.path.stroke.scale2.html [ Failure ]
+fast/canvas/canvas-currentColor.html [ Failure ]
+fast/canvas/canvas-radial-gradient-spreadMethod.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.cone.bottom.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.cone.cylinder.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.cone.front.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.cone.shape1.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.cone.top.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.inside1.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.inside2.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.inside3.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.outside1.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.outside2.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.outside3.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.touch1.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.touch2.html [ Failure ]
+imported/w3c/canvas/2d.gradient.radial.touch3.html [ Failure ]
+imported/w3c/canvas/2d.path.stroke.scale2.html [ Failure ]
+
+webkit.org/b/202460 imported/w3c/web-platform-tests/2dcontext/image-smoothing/imagesmoothing.html [ Failure ]
+
+webkit.org/b/202523 imported/w3c/web-platform-tests/2dcontext/path-objects/2d.path.stroke.scale2.html [ Failure ]
+
 # canvas tests that fail with small antialiasing diffs
 imported/w3c/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm [ ImageOnlyFailure ]
 imported/w3c/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm [ ImageOnlyFailure ]
diff --git a/LayoutTests/platform/ios/compositing/canvas/accelerated-canvas-compositing-expected.txt b/LayoutTests/platform/ios/compositing/canvas/accelerated-canvas-compositing-expected.txt
new file mode 100644 (file)
index 0000000..90c22c4
--- /dev/null
@@ -0,0 +1,20 @@
+Tests whether an accelerated canvas creates a compositing layer.
+
+ (GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 52.00)
+          (bounds 174.00 131.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
index 1235e09..4c9e8dc 100644 (file)
@@ -13,12 +13,14 @@ Verifies that 2D canvases with higher than 5120x2880 resolution don't create acc
           (position 8.00 52.00)
           (bounds 512.00 288.00)
           (drawsContent 1)
+          (acceleratesDrawing 1)
         )
         (GraphicsLayer
           (position 8.00 345.00)
           (bounds 5120.00 2880.00)
           (usingTiledLayer 1)
           (drawsContent 1)
+          (acceleratesDrawing 1)
         )
         (GraphicsLayer
           (position 8.00 3230.00)
diff --git a/LayoutTests/platform/ios/fast/canvas/canvas-render-layer-expected.txt b/LayoutTests/platform/ios/fast/canvas/canvas-render-layer-expected.txt
new file mode 100644 (file)
index 0000000..02f00d5
--- /dev/null
@@ -0,0 +1,14 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x116
+  RenderBlock {HTML} at (0,0) size 800x116
+    RenderBody {BODY} at (8,8) size 784x100
+      RenderHTMLCanvas {CANVAS} at (0,0) size 100x100
+      RenderText {#text} at (0,0) size 0x0
+      RenderText {#text} at (0,0) size 0x0
+layer at (108,8) size 100x100
+  RenderHTMLCanvas {CANVAS} at (100,0) size 100x100
+layer at (208,8) size 100x100
+  RenderHTMLCanvas {CANVAS} at (200,0) size 100x100
+layer at (308,8) size 100x100
+  RenderHTMLCanvas {CANVAS} at (300,0) size 100x100
diff --git a/LayoutTests/platform/ios/fast/canvas/canvas-scale-shadowBlur-expected.txt b/LayoutTests/platform/ios/fast/canvas/canvas-scale-shadowBlur-expected.txt
new file mode 100644 (file)
index 0000000..87de7a3
--- /dev/null
@@ -0,0 +1,93 @@
+Ensure that canvas shadowBlur is not affected by transformations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 255
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 126
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 3.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 2.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 3.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 2.
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 255
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 255
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 5.
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 126
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 3.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 2.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 3.
+FAIL d[0] should be 0. Was 255.
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] should be 0. Was 2.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/ios/fast/canvas/canvas-scale-strokePath-shadow-expected.txt b/LayoutTests/platform/ios/fast/canvas/canvas-scale-strokePath-shadow-expected.txt
new file mode 100644 (file)
index 0000000..bd29ada
--- /dev/null
@@ -0,0 +1,57 @@
+Ensure correct behavior of canvas with path stroke + shadow after scaling. A blue and red checkered pattern should be displayed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is 255
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is 255
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is 255
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 76
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 76
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 76
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] is not around 200 (actual: 173)
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 49
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+FAIL d[3] is not around 199 (actual: 170)
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 70
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 70
+PASS d[0] is 255
+PASS d[1] is 0
+PASS d[2] is 0
+PASS d[3] is around 69
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image-expected.txt
deleted file mode 100644 (file)
index 330cacc..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-
-PASS Draw 100x100 image to 100x100 canvas at 0,0. 
-PASS Test scenario 1: dx = 0, dy = 0 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 1: dx = 0, dy = 0 --- Pixel 0,99 should be light purple. 
-PASS Test scenario 1: dx = 0, dy = 0 --- Pixel 99,0 should be light purple. 
-PASS Test scenario 1: dx = 0, dy = 0 --- Pixel 99,99 should be light purple. 
-PASS Test scenario 1: dx = 0, dy = 0 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 25,25 should be light purple. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 25,99 should be light purple. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 99,25 should be light purple. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 99,99 should be light purple. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 0,0 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 24,24 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 0,25 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 25,0 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 0,99 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel 99,0 should be red. 
-PASS Test scenario 2: dx = 25, dy = 25 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 50,50 should be light purple. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 99,99 should be light purple. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 50,99 should be gray. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 99,50 should be gray. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 0,0 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 49,49 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 0,50 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 50,0 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 0,99 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel 99,0 should be red. 
-PASS Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 50,50 should be light purple. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 65,65 should be light purple. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 50,65 should be gray. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 65,50 should be gray. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 0,0 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 49,49 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 49,66 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 66,49 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 66,66 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel 99,99 should be red. 
-PASS Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 50,50 should be light purple. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 99,81 should be light purple. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 50,81 should be gray. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 99,50 should be gray. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 0,0 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 49,49 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 49,82 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 99,49 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 99,82 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel 99,99 should be red. 
-PASS Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,31 should be light purple. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 31,0 should be light purple. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 31,31 should be light purple. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,32 should be red. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 32,0 should be red. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 32,32 should be red. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 99,99 should be red. 
-PASS Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 32,32 should be light purple. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 32,63 should be light purple. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 63,32 should be light purple. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 63,63 should be light purple. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 0,0 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 31,31 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 31,64 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 64,31 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 64,64 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel 99,99 should be red. 
-PASS Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,31 should be light purple. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 31,0 should be light purple. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 31,31 should be light purple. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 0,32 should be red. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 32,0 should be red. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 32,32 should be red. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel 99,99 should be red. 
-PASS Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 0,31 should be light purple. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 31,0 should be light purple. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 31,31 should be light purple. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 0,32 should be red. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 32,0 should be red. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 32,32 should be red. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel 99,99 should be red. 
-PASS Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- Pixel 0,99 should be light purple. 
-PASS Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- Pixel 99,0 should be light purple. 
-PASS Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- Pixel 99,99 should be light purple. 
-PASS Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- Pixel 0,99 should be light purple. 
-PASS Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- Pixel 99,0 should be light purple. 
-PASS Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- Pixel 99,99 should be light purple. 
-PASS Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 70,70 should be light purple. 
-FAIL Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 70,99 should be light purple. assert_array_equals: property 0, expected 253 but got 255
-FAIL Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 99,70 should be light purple. assert_array_equals: property 0, expected 253 but got 255
-FAIL Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 99,99 should be light purple. assert_array_equals: property 0, expected 253 but got 255
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 0,0 should be red. 
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 0,99 should be red. 
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 99,0 should be red. 
-FAIL Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 69,69 should be red. assert_array_equals: property 0, expected 255 but got 253
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 69,99 should be red. 
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel 99,69 should be red. 
-PASS Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- Pixel outside canvas should be transparent black.
-PASS Test scenario 13: draw an image element that does not have a source --- Pixel 0,0 should be red. 
-PASS Test scenario 13: draw an image element that does not have a source --- Pixel 0,99 should be red. 
-PASS Test scenario 13: draw an image element that does not have a source --- Pixel 99,0 should be red. 
-PASS Test scenario 13: draw an image element that does not have a source --- Pixel 99,69 should be red. 
-PASS Test scenario 13: draw an image element that does not have a source --- Pixel outside canvas should be transparent black.
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 0,0 should be light purple. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 15,31 should be light purple. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 17,33 should be light purple. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 31,63 should be light purple. 
-FAIL Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 16,0 should be gray. assert_array_equals: property 0, expected 41 but got 253
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 31,31 should be gray. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 0,33 should be gray. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 15,63 should be gray. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 0,64 should be red. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 32,0 should be red. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 32,64 should be red. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel 99,99 should be red. 
-PASS Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- Pixel outside canvas should be transparent black.
-
index 27a46ea..d4113fc 100644 (file)
@@ -1,3 +1,15 @@
+2019-10-31  Tim Horton  <timothy_horton@apple.com>
+
+        Turn on IOSurface support in the iOS Simulator
+        https://bugs.webkit.org/show_bug.cgi?id=203026
+        <rdar://problem/56320993>
+
+        Reviewed by Simon Fraser.
+
+        * wtf/Platform.h:
+        Turn on HAVE(IOSURFACE) and USE(IOSURFACE_CANVAS_BACKING_STORE) in the simulator.
+        Add HAVE(IOSURFACE_COREIMAGE_SUPPORT).
+
 2019-10-31  Jer Noble  <jer.noble@apple.com>
 
         [EME] Batch multiple key requests into one request and response
index 8d56e7c..215806d 100644 (file)
 #define USE_AUDIO_SESSION 1
 #endif
 
-#if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY_SIMULATOR)
+#if PLATFORM(COCOA)
 #define HAVE_IOSURFACE 1
 #endif
 
+#if PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR)
+#define HAVE_IOSURFACE_COREIMAGE_SUPPORT 1
+#endif
+
 #if PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR) && !PLATFORM(MACCATALYST)
 #define HAVE_IOSURFACE_ACCELERATOR 1
 #endif
 #define HAVE_SEC_KEY_PROXY 1
 #endif
 
-#if PLATFORM(COCOA) && USE(CA) && !PLATFORM(IOS_FAMILY_SIMULATOR)
+#if PLATFORM(COCOA) && USE(CA)
 #define USE_IOSURFACE_CANVAS_BACKING_STORE 1
 #endif
 
index e804a7e..a5f5aa0 100644 (file)
@@ -1,3 +1,23 @@
+2019-10-31  Tim Horton  <timothy_horton@apple.com>
+
+        Turn on IOSurface support in the iOS Simulator
+        https://bugs.webkit.org/show_bug.cgi?id=203026
+        <rdar://problem/56320993>
+
+        Reviewed by Simon Fraser.
+
+        * Configurations/WebCore.xcconfig:
+        Always link IOSurface now that we always have it. We continue to only link
+        IOSurfaceAccelerator on iOS hardware, since it's only available there.
+
+        * platform/graphics/cocoa/IOSurface.h:
+        Turn off RGB10 in the Simulator.
+
+        * rendering/RenderThemeIOS.mm:
+        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
+        Disable CoreImage rendering via IOSurface for the system preview badge,
+        since it does not seem to work in the simulator.
+
 2019-10-31  Jer Noble  <jer.noble@apple.com>
 
         [EME] Batch multiple key requests into one request and response
index d1f81f4..8ce6b76 100644 (file)
@@ -88,12 +88,8 @@ WK_DATA_DETECTORS_CORE_LDFLAGS_macosx = -framework DataDetectorsCore;
 WK_GRAPHICS_SERVICES_LDFLAGS = $(WK_GRAPHICS_SERVICES_LDFLAGS_$(WK_COCOA_TOUCH));
 WK_GRAPHICS_SERVICES_LDFLAGS_cocoatouch = -framework GraphicsServices;
 
-WK_IOSURFACE_LDFLAGS = $(WK_IOSURFACE_LDFLAGS_$(WK_PLATFORM_NAME));
-WK_IOSURFACE_LDFLAGS_iphoneos = -framework IOSurface -framework IOSurfaceAccelerator;
-WK_IOSURFACE_LDFLAGS_watchos = $(WK_IOSURFACE_LDFLAGS_iphoneos);
-WK_IOSURFACE_LDFLAGS_appletvos = $(WK_IOSURFACE_LDFLAGS_iphoneos);
-WK_IOSURFACE_LDFLAGS_maccatalyst = -framework IOSurface;
-WK_IOSURFACE_LDFLAGS_macosx = -framework IOSurface;
+WK_IOSURFACE_ACCELERATOR_LDFLAGS = $(WK_IOSURFACE_ACCELERATOR_LDFLAGS_$(WK_PLATFORM_NAME));
+WK_IOSURFACE_ACCELERATOR_LDFLAGS_iphoneos = -framework IOSurfaceAccelerator;
 
 WK_LIBWEBRTC_LDFLAGS = $(WK_LIBWEBRTC_LDFLAGS_$(ENABLE_WEB_RTC));
 WK_LIBWEBRTC_LDFLAGS_ENABLE_WEB_RTC = -framework VideoToolbox -framework CoreMedia -weak-lwebrtc;
@@ -125,7 +121,7 @@ WK_URL_FORMATTING_LDFLAGS = $(WK_URL_FORMATTING_LDFLAGS_$(WK_HAVE_URL_FORMATTING
 WK_URL_FORMATTING_LDFLAGS_YES = -framework URLFormatting;
 
 // FIXME: Reduce the number of allowable_clients <rdar://problem/31823969>
-OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) $(WK_UNDEFINED_SYMBOLS_LDFLAGS) -lsqlite3 -lobjc -lANGLE -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_OPENGL_LDFLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_SYSTEM_PREVIEW_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS);
+OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) $(WK_UNDEFINED_SYMBOLS_LDFLAGS) -lsqlite3 -lobjc -lANGLE -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework IOSurface -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_ACCELERATOR_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_OPENGL_LDFLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_SYSTEM_PREVIEW_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS);
 
 OTHER_LDFLAGS_PLATFORM_cocoatouch = -allowable_client WebKit -allowable_client iTunesU -allowable_client Casablanca -allowable_client Remote -allowable_client TVBooks -allowable_client DumpRenderTree -allowable_client WebKitTestRunner -allowable_client TestWebKitAPI;
 OTHER_LDFLAGS_PLATFORM_macosx = -sub_library libobjc -umbrella WebKit;
index 38f8aa2..243c48b 100644 (file)
@@ -31,7 +31,7 @@
 #include <pal/spi/cocoa/IOSurfaceSPI.h>
 #include "IntSize.h"
 
-#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
+#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) && !PLATFORM(IOS_FAMILY_SIMULATOR)
 #define HAVE_IOSURFACE_RGB10 1
 #endif
 
index a9c8508..e31a837 100644 (file)
@@ -2037,7 +2037,7 @@ void RenderThemeIOS::paintSystemPreviewBadge(Image& image, const PaintInfo& pain
         m_ciContext = [CIContext context];
 
     RetainPtr<CGImageRef> cgImage;
-#if HAVE(IOSURFACE)
+#if HAVE(IOSURFACE_COREIMAGE_SUPPORT)
     // Crop the result to the badge location.
     CIImage *croppedImage = [sourceOverFilter.outputImage imageByCroppingToRect:flippedInsetBadgeRect];
     CIImage *translatedImage = [croppedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(-flippedInsetBadgeRect.origin.x, -flippedInsetBadgeRect.origin.y)];
index a801a54..f0e689e 100644 (file)
@@ -1,3 +1,26 @@
+2019-10-31  Tim Horton  <timothy_horton@apple.com>
+
+        Turn on IOSurface support in the iOS Simulator
+        https://bugs.webkit.org/show_bug.cgi?id=203026
+        <rdar://problem/56320993>
+
+        Reviewed by Simon Fraser.
+
+        * Configurations/WebKit.xcconfig:
+        Always link IOSurface now that we always have it.
+
+        * Shared/WebPreferences.yaml:
+        * Shared/WebPreferencesDefaultValues.h:
+        Turn on Accelerated Drawing and Accelerated Drawing for Canvas by default.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _takeViewSnapshot]):
+        Don't use RGB10 if we don't have it.
+
+        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
+        Don't use render server snapshotting in hidden windows, because it
+        (correctly, but unhelpfully) cannot capture contents in that case.
+
 2019-10-31  Dean Jackson  <dino@apple.com>
 
         REGRESSION (r251215): Mail failed to build
index fea25ee..31b263f 100644 (file)
@@ -69,13 +69,6 @@ WK_DEVICE_IDENTITY_LDFLAGS_YES = -framework DeviceIdentity;
 WK_GRAPHICS_SERVICES_LDFLAGS = $(WK_GRAPHICS_SERVICES_LDFLAGS_$(WK_COCOA_TOUCH));
 WK_GRAPHICS_SERVICES_LDFLAGS_cocoatouch = -framework GraphicsServices;
 
-WK_IOSURFACE_LDFLAGS = $(WK_IOSURFACE_LDFLAGS_$(WK_PLATFORM_NAME));
-WK_IOSURFACE_LDFLAGS_iphoneos = -framework IOSurface;
-WK_IOSURFACE_LDFLAGS_maccatalyst = $(WK_IOSURFACE_LDFLAGS_iphoneos);
-WK_IOSURFACE_LDFLAGS_watchos = $(WK_IOSURFACE_LDFLAGS_iphoneos);
-WK_IOSURFACE_LDFLAGS_appletvos = $(WK_IOSURFACE_LDFLAGS_iphoneos);
-WK_IOSURFACE_LDFLAGS_macosx = -framework IOSurface;
-
 WK_LIBWEBRTC_LDFLAGS = $(WK_LIBWEBRTC_LDFLAGS_$(ENABLE_WEB_RTC));
 WK_LIBWEBRTC_LDFLAGS_ = ;
 WK_LIBWEBRTC_LDFLAGS_ENABLE_WEB_RTC = -weak-lwebrtc;
@@ -133,7 +126,7 @@ WK_AUTHKIT_LDFLAGS_IOS_SINCE_13 = -framework AuthKit;
 WK_AUTHKIT_LDFLAGS_macosx = $(WK_AUTHKIT_LDFLAGS$(WK_MACOS_1015));
 WK_AUTHKIT_LDFLAGS_MACOS_SINCE_1015 = -framework AuthKit;
 
-FRAMEWORK_AND_LIBRARY_LDFLAGS = -lobjc -framework CFNetwork -framework CoreAudio -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework IOKit -framework WebKitLegacy -lnetwork $(WK_ACCESSIBILITY_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_ASSERTION_SERVICES_LDFLAGS) $(WK_AUTHKIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_PDF_LDFLAGS) $(WK_CORE_PREDICTION_LDFLAGS) $(WK_CORE_SERVICES_LDFLAGS) $(WK_DEVICE_IDENTITY_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_LDFLAGS) $(WK_LIBSANDBOX_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_OPENGL_LDFLAGS) $(WK_PDFKIT_LDFLAGS) $(WK_SAFE_BROWSING_LDFLAGS) $(WK_SECURITY_INTERFACE_LDFLAGS) $(WK_UIKIT_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_WEBINSPECTORUI_LDFLAGS);
+FRAMEWORK_AND_LIBRARY_LDFLAGS = -lobjc -framework CFNetwork -framework CoreAudio -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework IOKit -framework IOSurface -framework WebKitLegacy -lnetwork $(WK_ACCESSIBILITY_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_ASSERTION_SERVICES_LDFLAGS) $(WK_AUTHKIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_PDF_LDFLAGS) $(WK_CORE_PREDICTION_LDFLAGS) $(WK_CORE_SERVICES_LDFLAGS) $(WK_DEVICE_IDENTITY_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_LIBSANDBOX_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_OPENGL_LDFLAGS) $(WK_PDFKIT_LDFLAGS) $(WK_SAFE_BROWSING_LDFLAGS) $(WK_SECURITY_INTERFACE_LDFLAGS) $(WK_UIKIT_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_WEBINSPECTORUI_LDFLAGS);
 
 // Prevent C++ standard library basic_stringstream, operator new, delete and their related exception types from being exported as weak symbols.
 UNEXPORTED_SYMBOL_LDFLAGS = -Wl,-unexported_symbol -Wl,__ZTISt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTISt9exception -Wl,-unexported_symbol -Wl,__ZTSSt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTSSt9exception -Wl,-unexported_symbol -Wl,__ZdlPvS_ -Wl,-unexported_symbol -Wl,__ZnwmPv -Wl,-unexported_symbol -Wl,__Znwm -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC2EOS4_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC1EOS4_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEaSEDn -Wl,-unexported_symbol -Wl,__ZNKSt3__18functionIFvN7WebCore12PolicyActionEEEclES2_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEE4swapERS4_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC1ERKS4_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC2ERKS4_ -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEED1Ev -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEED2Ev -Wl,-unexported_symbol -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEaSERKS4_ -Wl,-unexported_symbol -Wl,__ZTVNSt3__117bad_function_callE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexported_symbol -Wl,__ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexported_symbol -Wl,__ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE8_NS_13basic_ostreamIcS2_EE;
index 22909d3..a5c70bf 100644 (file)
@@ -119,7 +119,7 @@ ForceCompositingMode:
 
 CanvasUsesAcceleratedDrawing:
   type: bool
-  defaultValue: DEFAULT_CANVAS_USES_ACCELERATED_DRAWING
+  defaultValue: true
 
 WebGLEnabled:
   type: bool
@@ -1045,7 +1045,7 @@ ShouldIgnoreMetaViewport:
 
 AcceleratedDrawingEnabled:
   type: bool
-  defaultValue: DEFAULT_ACCELERATED_DRAWING_ENABLED
+  defaultValue: true
   category: debug
 
 SubpixelAntialiasedLayerTextEnabled:
index 93cbb4f..f47e202 100644 (file)
 #endif
 
 #if PLATFORM(IOS_FAMILY_SIMULATOR)
-#define DEFAULT_ACCELERATED_DRAWING_ENABLED false
-#define DEFAULT_CANVAS_USES_ACCELERATED_DRAWING false
 #define DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED true
 #else
-#define DEFAULT_ACCELERATED_DRAWING_ENABLED true
-#define DEFAULT_CANVAS_USES_ACCELERATED_DRAWING true
 #define DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED false
 #endif
 
index cc6ba14..db5b936 100644 (file)
@@ -2229,7 +2229,11 @@ static inline bool areEssentiallyEqualAsFloat(float a, float b)
     CATransform3D transform = CATransform3DMakeScale(deviceScale, deviceScale, 1);
 
 #if HAVE(IOSURFACE)
+#if HAVE(IOSURFACE_RGB10)
     WebCore::IOSurface::Format snapshotFormat = WebCore::screenSupportsExtendedColor() ? WebCore::IOSurface::Format::RGB10 : WebCore::IOSurface::Format::RGBA;
+#else
+    WebCore::IOSurface::Format snapshotFormat = WebCore::IOSurface::Format::RGBA;
+#endif
     auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::sRGBColorSpaceRef(), snapshotFormat);
     if (!surface)
         return nullptr;
@@ -6422,8 +6426,9 @@ static inline WebKit::FindOptions toFindOptions(_WKFindOptions wkFindOptions)
     }
 
 #if HAVE(CORE_ANIMATION_RENDER_SERVER) && HAVE(IOSURFACE)
-    // If we are parented and thus won't incur a significant penalty from paging in tiles, snapshot the view hierarchy directly.
-    if (NSString *displayName = self.window.screen.displayConfiguration.name) {
+    // If we are parented and not hidden, and thus won't incur a significant penalty from paging in tiles, snapshot the view hierarchy directly.
+    NSString *displayName = self.window.screen.displayConfiguration.name;
+    if (displayName && !self.window.hidden) {
         auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(WebCore::FloatSize(imageSize)), WebCore::sRGBColorSpaceRef());
         if (!surface) {
             completionHandler(nullptr);
index 4bd3014..ace6820 100644 (file)
@@ -1,3 +1,21 @@
+2019-10-31  Tim Horton  <timothy_horton@apple.com>
+
+        Turn on IOSurface support in the iOS Simulator
+        https://bugs.webkit.org/show_bug.cgi?id=203026
+        <rdar://problem/56320993>
+
+        Reviewed by Simon Fraser.
+
+        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+        (createBitmapContextFromWebView):
+        Don't use RGB10 if we don't have it.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
+        (TEST):
+        Don't allocate many megabytes on the stack.
+        This isn't currently a problem, but if you accidentally run the tests on
+        a 3x simulator it starts crashing.
+
 2019-10-31  Tadeu Zagallo  <tzagallo@apple.com>
 
         [WebAssembly] Create a Wasm interpreter
index 5e1a243..143de71 100644 (file)
@@ -70,7 +70,11 @@ RefPtr<BitmapContext> createBitmapContextFromWebView(bool onscreen, bool increme
     WebCore::FloatSize snapshotSize(viewSize);
     snapshotSize.scale(deviceScaleFactor);
 
+#if HAVE(IOSURFACE_RGB10)
     WebCore::IOSurface::Format snapshotFormat = WebCore::screenSupportsExtendedColor() ? WebCore::IOSurface::Format::RGB10 : WebCore::IOSurface::Format::RGBA;
+#else
+    WebCore::IOSurface::Format snapshotFormat = WebCore::IOSurface::Format::RGBA;
+#endif
     auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::sRGBColorSpaceRef(), snapshotFormat);
     RetainPtr<CGImageRef> cgImage = surface->createImage();
 
index 3a2a58d..64790d1 100644 (file)
@@ -120,7 +120,7 @@ TEST(WKWebView, SnapshotImageBaseCase)
         NSInteger viewWidthInPixels = viewWidth * backingScaleFactor;
         NSInteger viewHeightInPixels = viewHeight * backingScaleFactor;
 
-        unsigned char rgba[viewWidthInPixels * viewHeightInPixels * 4];
+        uint8_t *rgba = (unsigned char *)calloc(viewWidthInPixels * viewHeightInPixels * 4, sizeof(unsigned char));
         RetainPtr<CGContextRef> context = CGBitmapContextCreate(rgba, viewWidthInPixels, viewHeightInPixels, 8, 4 * viewWidthInPixels, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
         CGContextDrawImage(context.get(), CGRectMake(0, 0, viewWidthInPixels, viewHeightInPixels), cgImage.get());
 
@@ -140,6 +140,8 @@ TEST(WKWebView, SnapshotImageBaseCase)
         EXPECT_EQ(0, rgba[pixelIndex + 1]);
         EXPECT_EQ(0, rgba[pixelIndex + 2]);
 
+        free(rgba);
+
         isDone = true;
     }];
 
@@ -264,7 +266,7 @@ TEST(WKWebView, SnapshotImageLargeAsyncDecoding)
         RetainPtr<CGImageRef> cgImage = convertToCGImage(snapshotImage);
         RetainPtr<CGColorSpaceRef> colorSpace = adoptCF(CGColorSpaceCreateDeviceRGB());
 
-        unsigned char rgba[viewWidth * viewHeight * 4];
+        uint8_t *rgba = (unsigned char *)calloc(viewWidth * viewHeight * 4, sizeof(unsigned char));
         RetainPtr<CGContextRef> context = CGBitmapContextCreate(rgba, viewWidth, viewHeight, 8, 4 * viewWidth, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
         CGContextDrawImage(context.get(), CGRectMake(0, 0, viewWidth, viewHeight), cgImage.get());
 
@@ -286,6 +288,8 @@ TEST(WKWebView, SnapshotImageLargeAsyncDecoding)
         EXPECT_EQ(255, rgba[pixelIndex + 1]);
         EXPECT_EQ(255, rgba[pixelIndex + 2]);
 
+        free(rgba);
+
         isDone = true;
     }];
 
@@ -337,7 +341,7 @@ TEST(WKWebView, SnapshotAfterScreenUpdates)
         NSInteger viewWidthInPixels = viewWidth * backingScaleFactor;
         NSInteger viewHeightInPixels = viewHeight * backingScaleFactor;
         
-        unsigned char rgba[viewWidthInPixels * viewHeightInPixels * 4];
+        uint8_t *rgba = (unsigned char *)calloc(viewWidthInPixels * viewHeightInPixels * 4, sizeof(unsigned char));
         RetainPtr<CGContextRef> context = CGBitmapContextCreate(rgba, viewWidthInPixels, viewHeightInPixels, 8, 4 * viewWidthInPixels, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
         CGContextDrawImage(context.get(), CGRectMake(0, 0, viewWidthInPixels, viewHeightInPixels), cgImage.get());
         
@@ -345,6 +349,8 @@ TEST(WKWebView, SnapshotAfterScreenUpdates)
         EXPECT_EQ(0, rgba[pixelIndex]);
         EXPECT_EQ(0, rgba[pixelIndex + 1]);
         EXPECT_EQ(255, rgba[pixelIndex + 2]);
+
+        free(rgba);
         
         isDone = true;
     }];
@@ -398,14 +404,16 @@ TEST(WKWebView, SnapshotWithoutAfterScreenUpdates)
         NSInteger viewWidthInPixels = viewWidth * backingScaleFactor;
         NSInteger viewHeightInPixels = viewHeight * backingScaleFactor;
         
-        unsigned char rgba[viewWidthInPixels * viewHeightInPixels * 4];
+        uint8_t *rgba = (unsigned char *)calloc(viewWidthInPixels * viewHeightInPixels * 4, sizeof(unsigned char));
         RetainPtr<CGContextRef> context = CGBitmapContextCreate(rgba, viewWidthInPixels, viewHeightInPixels, 8, 4 * viewWidthInPixels, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
         CGContextDrawImage(context.get(), CGRectMake(0, 0, viewWidthInPixels, viewHeightInPixels), cgImage.get());
-        
+
         NSInteger pixelIndex = getPixelIndex(0, 0, viewWidthInPixels);
         EXPECT_EQ(0, rgba[pixelIndex]);
         EXPECT_EQ(0, rgba[pixelIndex + 1]);
         EXPECT_EQ(255, rgba[pixelIndex + 2]);
+
+        free(rgba);
         
         isDone = true;
     }];