[chromium] Push drawsContent and contentsVisible into accelerated compositor
https://bugs.webkit.org/show_bug.cgi?id=71209

Patch by Shawn Singh <shawnsingh@chromium.org> on 2012-01-03
Reviewed by James Robinson.

Source/WebCore:

Tests: compositing/visibility/visibility-simple-canvas2d-layer.html
       compositing/visibility/visibility-simple-video-layer.html
       compositing/visibility/visibility-simple-webgl-layer.html

Rebaselined compositing/visibility/visibility-image-layers.html

The CSS visibility property was not being properly obeyed by many
specialized layer types in the accelerated compositor. The root of
the problem was that drawsContent and contentsVisible flags were
not properly propagated into the compositor. This patch removes
the drawsContent() callback, and instead makes sure that
drawsContent and contentsVisible are "pushed" through the
accelerated compositor.

* platform/graphics/chromium/Canvas2DLayerChromium.cpp:
(WebCore::Canvas2DLayerChromium::drawsContent):
* platform/graphics/chromium/ContentLayerChromium.cpp:
* platform/graphics/chromium/ContentLayerChromium.h:
* platform/graphics/chromium/GraphicsLayerChromium.cpp:
(WebCore::GraphicsLayerChromium::setDrawsContent):
(WebCore::GraphicsLayerChromium::setContentsVisible):
(WebCore::GraphicsLayerChromium::setContentsToImage):
(WebCore::GraphicsLayerChromium::setContentsToCanvas):
(WebCore::GraphicsLayerChromium::setContentsToMedia):
(WebCore::GraphicsLayerChromium::updateLayerIsDrawable):
(WebCore::GraphicsLayerChromium::setupContentsLayer):
* platform/graphics/chromium/GraphicsLayerChromium.h:
* platform/graphics/chromium/LayerChromium.cpp:
(WebCore::LayerChromium::LayerChromium):
(WebCore::LayerChromium::setIsDrawable):
* platform/graphics/chromium/LayerChromium.h:
(WebCore::LayerChromium::drawsContent):
* platform/graphics/chromium/PluginLayerChromium.h:
* platform/graphics/chromium/TiledLayerChromium.cpp:
(WebCore::TiledLayerChromium::drawsContent):
* platform/graphics/chromium/VideoLayerChromium.h:
* platform/graphics/chromium/WebGLLayerChromium.cpp:
(WebCore::WebGLLayerChromium::drawsContent):
* platform/graphics/chromium/cc/CCLayerImpl.cpp:
(WebCore::CCLayerImpl::dumpLayerProperties):

Source/WebKit/chromium:

* src/WebContentLayerImpl.cpp:
(WebKit::WebContentLayerImpl::WebContentLayerImpl):
(WebKit::WebContentLayerImpl::setDrawsContent):
* src/WebContentLayerImpl.h:
* src/WebExternalTextureLayerImpl.cpp:
(WebKit::WebExternalTextureLayerImpl::drawsContent):
* src/WebLayerImpl.cpp:
(WebKit::WebLayerImpl::WebLayerImpl):
* src/WebLayerImpl.h:
* tests/CCLayerTreeHostTest.cpp:
(WTF::ContentLayerChromiumWithUpdateTracking::ContentLayerChromiumWithUpdateTracking):
* tests/Canvas2DLayerChromiumTest.cpp:
* tests/LayerChromiumTest.cpp:
* tests/TiledLayerChromiumTest.cpp:
(WTF::FakeTiledLayerChromium::FakeTiledLayerChromium):

LayoutTests:

* compositing/visibility/visibility-image-layers-expected.png:
* compositing/visibility/visibility-image-layers-expected.txt: Renamed from LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-expected.txt.
* compositing/visibility/visibility-simple-canvas2d-layer-expected.png: Added.
* compositing/visibility/visibility-simple-canvas2d-layer-expected.txt: Added.
* compositing/visibility/visibility-simple-canvas2d-layer.html: Added.
* compositing/visibility/visibility-simple-video-layer-expected.png: Added.
* compositing/visibility/visibility-simple-video-layer-expected.txt: Added.
* compositing/visibility/visibility-simple-video-layer.html: Added.
* compositing/visibility/visibility-simple-webgl-layer-expected.png: Added.
* compositing/visibility/visibility-simple-webgl-layer-expected.txt: Added.
* compositing/visibility/visibility-simple-webgl-layer.html: Added.
* platform/chromium-mac-snowleopard/compositing/visibility/visibility-image-layers-expected.png: Removed.
* platform/chromium-win/compositing/visibility/visibility-image-layers-expected.png: Removed.
* platform/chromium/test_expectations.txt:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@103990 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/compositing/visibility/visibility-simple-webgl-layer.html b/LayoutTests/compositing/visibility/visibility-simple-webgl-layer.html
new file mode 100644
index 0000000..33375be
--- /dev/null
+++ b/LayoutTests/compositing/visibility/visibility-simple-webgl-layer.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <style>
+      canvas {
+          background-color: rgba(0, 0, 0, 1);
+      }
+
+      .hidden {
+          visibility: hidden;
+      }
+
+      .visible {
+          visibility: visible;
+      }
+    </style>
+
+    <script>
+      if (window.layoutTestController) {
+          layoutTestController.dumpAsText(true);
+          layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
+      }
+
+      function drawCanvas(canvasID, clearColor)
+      {
+          var theCanvas = document.getElementById(canvasID);
+          var glContext = theCanvas.getContext("experimental-webgl");
+          glContext.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
+          glContext.clear(glContext.COLOR_BUFFER_BIT);
+      }
+
+      function init()
+      {
+          drawCanvas("topGL", [0, 0.5, 0, 1]);
+          drawCanvas("bottomGL", [1, 0, 0, 1]);
+      }
+    </script>
+  </head>
+
+  <body onload="init()">
+    <!-- Tests CSS visibility flag for WebGL layers. -->
+    <!-- Pixel test only. Only the green webGL canvas should be visible. The red one should be hidden. -->
+    <div><canvas id="topGL" class="visible" width="150" height="150"></canvas></div>
+    <div><canvas id="bottomGL" class="hidden" width="150" height="150"></canvas></div>
+  </body>
+</html>