<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[178868] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/178868">178868</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-21 15:42:14 -0800 (Wed, 21 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Many compositing tests fail in DumpRenderTree due to contentsOpaque difference
https://bugs.webkit.org/show_bug.cgi?id=140742

Reviewed by Simon Fraser.

Source/WebCore:

Make RenderLayerBacking::layerTreeAsText() (including internals.layerTreeAsText()) always
report that the main frame's RenderView layer is opaque when running iOS DumpRenderTree to
avoid test failures and the need to maintain for iOS WebKit1 an almost identical copy of the
platform-independent compositing test results.

The main frame's RenderView layer is always transparent in iOS WebKit1 since it does
not make use of a tiled cache layer and defers to UIKit to handle the final compositing
of the web view, including applying the page scale factor.

* platform/RuntimeApplicationChecksIOS.mm:
(WebCore::applicationIsDumpRenderTree): The app bundle identifier of DumpRenderTree has
the form org.webkit.DumpRenderTreeX where X is some non-negative integer.
* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::dumpProperties): Modified to report that a layer is opaque when
GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack() returns true.
* platform/graphics/GraphicsLayerClient.h:
(WebCore::GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added
default implementation (returns false).
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added;
returns true when running in DumpRenderTree and the passed GraphicsLayer corresponds to the main frame's
RenderView layer.
* rendering/RenderLayerBacking.h:

LayoutTests:

Update test expectations and remove an unnecessary test result.

* platform/ios-simulator/TestExpectations:
* platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt: Removed.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorTestExpectations">trunk/LayoutTests/platform/ios-simulator/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformRuntimeApplicationChecksIOSmm">trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayercpp">trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerClienth">trunk/Source/WebCore/platform/graphics/GraphicsLayerClient.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingh">trunk/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsplatformiossimulatorcompositingbackingbackfacevisibilityflipexpectedtxt">trunk/LayoutTests/platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/LayoutTests/ChangeLog        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -1,5 +1,17 @@
</span><span class="cx"> 2015-01-21  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [iOS] Many compositing tests fail in DumpRenderTree due to contentsOpaque difference
+        https://bugs.webkit.org/show_bug.cgi?id=140742
+
+        Reviewed by Simon Fraser.
+
+        Update test expectations and remove an unnecessary test result.
+
+        * platform/ios-simulator/TestExpectations:
+        * platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt: Removed.
+
+2015-01-21  Daniel Bates  &lt;dabates@apple.com&gt;
+
</ins><span class="cx">         Add iOS WebKit1 TestExpectation file
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=140739
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -350,10 +350,6 @@
</span><span class="cx"> compositing/video/video-reflection.html
</span><span class="cx"> compositing/visibility/visibility-simple-video-layer.html
</span><span class="cx"> 
</span><del>-# Compositing tests that fail due to contentsOpaque differences:
-compositing/backing/backface-visibility-flip.html [ Failure ]
-compositing/contents-scale/animating.html [ Failure ]
-
</del><span class="cx"> # Compositing tests that time out:
</span><span class="cx"> compositing/framesets/composited-frame-alignment.html
</span><span class="cx"> compositing/geometry/abs-position-inside-opacity.html
</span></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorcompositingbackingbackfacevisibilityflipexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/LayoutTests/platform/ios-simulator/compositing/backing/backface-visibility-flip-expected.txt        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -1,41 +0,0 @@
</span><del>-Front Back
-(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 8.00)
-          (bounds 320.00 320.00)
-          (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
-          (children 1
-            (GraphicsLayer
-              (position 10.00 10.00)
-              (bounds 300.00 300.00)
-              (preserves3D 1)
-              (children 2
-                (GraphicsLayer
-                  (bounds 300.00 300.00)
-                  (contentsOpaque 1)
-                  (drawsContent 1)
-                  (backfaceVisibility hidden)
-                )
-                (GraphicsLayer
-                  (bounds 300.00 300.00)
-                  (contentsOpaque 1)
-                  (drawsContent 1)
-                  (backfaceVisibility hidden)
-                  (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
-                )
-              )
-            )
-          )
-        )
-      )
-    )
-  )
-)
-
</del></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/ChangeLog        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2015-01-21  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        [iOS] Many compositing tests fail in DumpRenderTree due to contentsOpaque difference
+        https://bugs.webkit.org/show_bug.cgi?id=140742
+
+        Reviewed by Simon Fraser.
+
+        Make RenderLayerBacking::layerTreeAsText() (including internals.layerTreeAsText()) always
+        report that the main frame's RenderView layer is opaque when running iOS DumpRenderTree to
+        avoid test failures and the need to maintain for iOS WebKit1 an almost identical copy of the
+        platform-independent compositing test results.
+
+        The main frame's RenderView layer is always transparent in iOS WebKit1 since it does
+        not make use of a tiled cache layer and defers to UIKit to handle the final compositing
+        of the web view, including applying the page scale factor.
+
+        * platform/RuntimeApplicationChecksIOS.mm:
+        (WebCore::applicationIsDumpRenderTree): The app bundle identifier of DumpRenderTree has
+        the form org.webkit.DumpRenderTreeX where X is some non-negative integer.
+        * platform/graphics/GraphicsLayer.cpp:
+        (WebCore::GraphicsLayer::dumpProperties): Modified to report that a layer is opaque when
+        GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack() returns true.
+        * platform/graphics/GraphicsLayerClient.h:
+        (WebCore::GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added
+        default implementation (returns false).
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added;
+        returns true when running in DumpRenderTree and the passed GraphicsLayer corresponds to the main frame's
+        RenderView layer.
+        * rendering/RenderLayerBacking.h:
+
</ins><span class="cx"> 2015-01-21  Roger Fong  &lt;roger_fong@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebGL2 (spec section 3.1): Add new types to WebGL2 API.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformRuntimeApplicationChecksIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -51,7 +51,9 @@
</span><span class="cx"> 
</span><span class="cx"> bool applicationIsDumpRenderTree()
</span><span class="cx"> {
</span><del>-    static bool isDumpRenderTree = [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@&quot;com.apple.DumpRenderTree&quot;];
</del><ins>+    // We use a prefix match instead of strict equality since LayoutTestRelay may launch multiple instances of
+    // DumpRenderTree where the bundle identifier of each instance has a unique suffix.
+    static bool isDumpRenderTree = [[[NSBundle mainBundle] bundleIdentifier] hasPrefix:@&quot;org.webkit.DumpRenderTree&quot;]; // e.g. org.webkit.DumpRenderTree0
</ins><span class="cx">     return isDumpRenderTree;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -654,9 +654,10 @@
</span><span class="cx">         ts &lt;&lt; &quot;(usingTiledLayer &quot; &lt;&lt; m_usingTiledBacking &lt;&lt; &quot;)\n&quot;;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_contentsOpaque) {
</del><ins>+    bool needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack = m_client.needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(*this);
+    if (m_contentsOpaque || needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack) {
</ins><span class="cx">         writeIndent(ts, indent + 1);
</span><del>-        ts &lt;&lt; &quot;(contentsOpaque &quot; &lt;&lt; m_contentsOpaque &lt;&lt; &quot;)\n&quot;;
</del><ins>+        ts &lt;&lt; &quot;(contentsOpaque &quot; &lt;&lt; (m_contentsOpaque || needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack) &lt;&lt; &quot;)\n&quot;;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_preserves3D) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayerClient.h (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayerClient.h        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayerClient.h        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -117,6 +117,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool needsPixelAligment() const { return false; }
</span><span class="cx"> 
</span><ins>+    virtual bool needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(const GraphicsLayer&amp;) const { return false; }
+
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     // RenderLayerBacking overrides this to verify that it is not
</span><span class="cx">     // currently painting contents. An ASSERT fails, if it is.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -67,6 +67,10 @@
</span><span class="cx"> #include &quot;GraphicsContext3D.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if PLATFORM(IOS)
+#include &quot;RuntimeApplicationChecksIOS.h&quot;
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span><span class="lines">@@ -332,6 +336,17 @@
</span><span class="cx">             pluginViewBase-&gt;detachPluginLayer();
</span><span class="cx">     }
</span><span class="cx"> }
</span><ins>+
+bool RenderLayerBacking::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(const GraphicsLayer&amp; layer) const
+{
+    if (m_isMainFrameRenderViewLayer &amp;&amp; applicationIsDumpRenderTree()) {
+        // In iOS WebKit1 the main frame's RenderView layer is always transparent. We lie that it is opaque so that
+        // internals.layerTreeAsText() tests succeed.
+        ASSERT(!layer.contentsOpaque());
+        return true;
+    }
+    return false;
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> void RenderLayerBacking::destroyGraphicsLayers()
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.h (178867 => 178868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.h        2015-01-21 23:29:50 UTC (rev 178867)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.h        2015-01-21 23:42:14 UTC (rev 178868)
</span><span class="lines">@@ -219,6 +219,10 @@
</span><span class="cx">     virtual bool shouldTemporarilyRetainTileCohorts(const GraphicsLayer*) const override;
</span><span class="cx">     virtual bool needsPixelAligment() const override { return !m_isMainFrameRenderViewLayer; }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(IOS)
+    virtual bool needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(const GraphicsLayer&amp;) const override;
+#endif
+
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     virtual void verifyNotPainting() override;
</span><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>