Title: [94789] trunk
Revision
94789
Author
wjmacl...@chromium.org
Date
2011-09-08 13:31:02 -0700 (Thu, 08 Sep 2011)

Log Message

[chromium] Add backend compositor support for rescaling (zooming) textures during zoom animation.
https://bugs.webkit.org/show_bug.cgi?id=66472

Source/WebCore:

This patch contains plumbing from Internals to WebViewImpl that can be removed
at a later time when the zoom animator code is complete.

Reviewed by James Robinson.

Test: platform/chromium/compositing/zoom-animator-scale-test.html

* page/Settings.cpp:
(WebCore::Settings::Settings):
* page/Settings.h:
(WebCore::Settings::setZoomAnimatorScale):
(WebCore::Settings::zoomAnimatorScale):
* platform/graphics/chromium/LayerRendererChromium.cpp:
(WebCore::LayerRendererChromium::LayerRendererChromium):
(WebCore::LayerRendererChromium::drawLayersInternal):
* platform/graphics/chromium/LayerRendererChromium.h:
(WebCore::LayerRendererChromium::setZoomAnimatorScale):
* platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
(WebCore::CCLayerTreeHost::CCLayerTreeHost):
(WebCore::CCLayerTreeHost::commitTo):
(WebCore::CCLayerTreeHost::setZoomAnimatorScale):
(WebCore::CCLayerTreeHost::updateLayers):
* platform/graphics/chromium/cc/CCLayerTreeHost.h:
* platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
(WebCore::CCLayerTreeHostImpl::setZoomAnimatorScale):
* platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
* testing/Internals.cpp:
(WebCore::Internals::setZoomAnimatorScale):
* testing/Internals.h:
* testing/Internals.idl:

Source/WebKit/chromium:

This patch contains plumbing from Internals to WebViewImpl that can be removed
at a later time when the zoom animator code is complete.

Reviewed by James Robinson.

* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::setZoomLevel):
(WebKit::WebViewImpl::setRootLayerNeedsDisplay):

LayoutTests:

Initial tests for zoomAnimatorChromium backend.

Reviewed by James Robinson.

* platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png: Added.
* platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.txt: Added.
* platform/chromium/compositing/zoom-animator-scale-test.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (94788 => 94789)


--- trunk/LayoutTests/ChangeLog	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/LayoutTests/ChangeLog	2011-09-08 20:31:02 UTC (rev 94789)
@@ -1,3 +1,16 @@
+2011-09-08  W. James MacLean  <wjmacl...@chromium.org>
+
+        [chromium] Add backend compositor support for rescaling (zooming) textures during zoom animation.
+        https://bugs.webkit.org/show_bug.cgi?id=66472
+
+        Initial tests for zoomAnimatorChromium backend.
+
+        Reviewed by James Robinson.
+
+        * platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png: Added.
+        * platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.txt: Added.
+        * platform/chromium/compositing/zoom-animator-scale-test.html: Added.
+
 2011-09-08  Csaba Osztrogonác  <o...@webkit.org>
 
         [Qt] Unreviewed gardening.

Added: trunk/LayoutTests/platform/chromium/compositing/zoom-animator-scale-test.html (0 => 94789)


--- trunk/LayoutTests/platform/chromium/compositing/zoom-animator-scale-test.html	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/zoom-animator-scale-test.html	2011-09-08 20:31:02 UTC (rev 94789)
@@ -0,0 +1,24 @@
+<html>
+  <head>
+    <script>
+        if (window.internals) {
+            window.internals.setForceCompositingMode(document, true);
+            window.internals.setZoomAnimatorScale(document, 1.25);
+        }
+        if (window.layoutTestController) {
+            window.layoutTestController.dumpAsText(true);
+        }
+
+        function doTest() {
+            document.getElementById("aBox").style.backgroundColor = "green";
+        }
+
+        window.addEventListener("load", doTest, false);
+    </script>
+  </head>
+<body>
+  <!--    If successful, the box should enlarge to be 125x125 at (125,125).
+    -->
+  <div id="aBox" style="width:100px; height:100px; position:absolute; left:100px; top:100px; background-color:#FF0000"></div>
+</body>
+</html>

Added: trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png (0 => 94789)


--- trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png	2011-09-08 20:31:02 UTC (rev 94789)
@@ -0,0 +1,7 @@
+\x89PNG
+
+
+IHDR X')tEXtchecksumff340bdf811048be7f4e8f8f83497749F\x80\xF7\xD3
+\xBFIDATx\x9C\xED\xD8\xD1	BAAO\xCC[\x8C|M\xA2a\xE1]U\xF3\xD9̙\x99\x9D\xF7\xF6\x80\xA7X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X1\x81X\xB1\xCF\xF6\x80K\x9D\xDFٞp\xA3\xF9\xCE\xF6\xAE\xE0\xC1\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80ؙ\x99\xED
+\x8F\xE2\xC1\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88\xFD\x88\xC4
+\xAB"\xA1\xC4IEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.txt (0 => 94789)


--- trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.txt	2011-09-08 20:31:02 UTC (rev 94789)
@@ -0,0 +1 @@
+

Modified: trunk/Source/WebCore/ChangeLog (94788 => 94789)


--- trunk/Source/WebCore/ChangeLog	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/ChangeLog	2011-09-08 20:31:02 UTC (rev 94789)
@@ -1,3 +1,39 @@
+2011-09-08  W. James MacLean  <wjmacl...@chromium.org>
+
+        [chromium] Add backend compositor support for rescaling (zooming) textures during zoom animation.
+        https://bugs.webkit.org/show_bug.cgi?id=66472
+
+        This patch contains plumbing from Internals to WebViewImpl that can be removed
+        at a later time when the zoom animator code is complete.
+
+        Reviewed by James Robinson.
+
+        Test: platform/chromium/compositing/zoom-animator-scale-test.html
+
+        * page/Settings.cpp:
+        (WebCore::Settings::Settings):
+        * page/Settings.h:
+        (WebCore::Settings::setZoomAnimatorScale):
+        (WebCore::Settings::zoomAnimatorScale):
+        * platform/graphics/chromium/LayerRendererChromium.cpp:
+        (WebCore::LayerRendererChromium::LayerRendererChromium):
+        (WebCore::LayerRendererChromium::drawLayersInternal):
+        * platform/graphics/chromium/LayerRendererChromium.h:
+        (WebCore::LayerRendererChromium::setZoomAnimatorScale):
+        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
+        (WebCore::CCLayerTreeHost::commitTo):
+        (WebCore::CCLayerTreeHost::setZoomAnimatorScale):
+        (WebCore::CCLayerTreeHost::updateLayers):
+        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
+        (WebCore::CCLayerTreeHostImpl::setZoomAnimatorScale):
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::setZoomAnimatorScale):
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
 2011-09-08  Eric Carlson  <eric.carl...@apple.com>
 
         HTMLMediaElement is missing initialTime attribute

Modified: trunk/Source/WebCore/page/Settings.cpp (94788 => 94789)


--- trunk/Source/WebCore/page/Settings.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/page/Settings.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -216,6 +216,7 @@
     , m_mediaPlaybackAllowsInline(true)
     , m_passwordEchoEnabled(false)
     , m_loadsImagesAutomaticallyTimer(this, &Settings::loadsImagesAutomaticallyTimerFired)
+    , m_zoomAnimatorScale(1)
 {
     // A Frame may not have been created yet, so we initialize the AtomicString 
     // hash before trying to use it.

Modified: trunk/Source/WebCore/page/Settings.h (94788 => 94789)


--- trunk/Source/WebCore/page/Settings.h	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/page/Settings.h	2011-09-08 20:31:02 UTC (rev 94789)
@@ -437,7 +437,10 @@
 
         void setForceCompositingMode(bool flag) { m_forceCompositingMode = flag; }
         bool forceCompositingMode() { return m_forceCompositingMode; }
-        
+
+        void setZoomAnimatorScale(double scale) { m_zoomAnimatorScale = scale; }
+        double zoomAnimatorScale() { return m_zoomAnimatorScale; }
+
         void setShouldInjectUserScriptsInInitialEmptyDocument(bool flag) { m_shouldInjectUserScriptsInInitialEmptyDocument = flag; }
         bool shouldInjectUserScriptsInInitialEmptyDocument() { return m_shouldInjectUserScriptsInInitialEmptyDocument; }
 
@@ -596,6 +599,8 @@
         static bool gAVFoundationEnabled;
 #endif
 
+        double m_zoomAnimatorScale;
+
 #if USE(SAFARI_THEME)
         static bool gShouldPaintNativeControls;
 #endif

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -163,6 +163,7 @@
     , m_ownerImpl(ownerImpl)
     , m_currentRenderSurface(0)
     , m_offscreenFramebufferId(0)
+    , m_zoomAnimatorScale(1)
     , m_context(context)
     , m_defaultRenderSurface(0)
     , m_sharedGeometryQuad(FloatRect(-0.5f, -0.5f, 1.0f, 1.0f))
@@ -294,13 +295,14 @@
     CCLayerList renderSurfaceLayerList;
     renderSurfaceLayerList.append(rootDrawLayer);
 
-    TransformationMatrix identityMatrix;
+    TransformationMatrix zoomMatrix;
+    zoomMatrix.scale3d(m_zoomAnimatorScale, m_zoomAnimatorScale, 1);
     m_defaultRenderSurface = rootDrawLayer->renderSurface();
     m_defaultRenderSurface->clearLayerList();
 
     {
         TRACE_EVENT("LayerRendererChromium::drawLayersInternal::calcDrawEtc", this, 0);
-        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, identityMatrix, identityMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);
+        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, zoomMatrix, zoomMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);
     }
 
     // The GL viewport covers the entire visible area, including the scrollbars.

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2011-09-08 20:31:02 UTC (rev 94789)
@@ -110,6 +110,8 @@
     // puts backbuffer onscreen
     void present();
 
+    void setZoomAnimatorScale(double factor) { m_zoomAnimatorScale = factor; }
+
     unsigned createLayerTexture();
     void deleteLayerTexture(unsigned);
 
@@ -196,6 +198,7 @@
 
     CCRenderSurface* m_currentRenderSurface;
     unsigned m_offscreenFramebufferId;
+    double m_zoomAnimatorScale;
 
     // Store values that are shared between instances of each layer type
     // associated with this instance of the compositor. Since there can be

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -54,6 +54,7 @@
     , m_frameNumber(0)
     , m_nonCompositedContentHost(NonCompositedContentHost::create(m_client->createRootLayerPainter()))
     , m_settings(settings)
+    , m_zoomAnimatorScale(1)
     , m_visible(true)
 {
 }
@@ -115,6 +116,7 @@
     m_updateList.clear();
 
     hostImpl->setVisible(m_visible);
+    hostImpl->setZoomAnimatorScale(m_zoomAnimatorScale);
     hostImpl->setViewport(viewportSize());
 
     // Synchronize trees, if one exists at all...
@@ -182,6 +184,16 @@
     return m_proxy->layerRendererCapabilities();
 }
 
+void CCLayerTreeHost::setZoomAnimatorScale(double zoom)
+{
+    bool zoomChanged = m_zoomAnimatorScale != zoom;
+
+    m_zoomAnimatorScale = zoom;
+
+    if (zoomChanged)
+        setNeedsCommitAndRedraw();
+}
+
 void CCLayerTreeHost::setNeedsCommitAndRedraw()
 {
 #if USE(THREADED_COMPOSITING)
@@ -278,11 +290,11 @@
     RenderSurfaceChromium* rootRenderSurface = rootLayer->renderSurface();
     rootRenderSurface->clearLayerList();
 
-    TransformationMatrix identityMatrix;
-
+    TransformationMatrix zoomMatrix;
+    zoomMatrix.scale3d(m_zoomAnimatorScale, m_zoomAnimatorScale, 1);
     {
         TRACE_EVENT("CCLayerTreeHost::updateLayers::calcDrawEtc", this, 0);
-        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, identityMatrix, identityMatrix, m_updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize);
+        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, zoomMatrix, zoomMatrix, m_updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize);
     }
 
     paintLayerContents(m_updateList);

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-09-08 20:31:02 UTC (rev 94789)
@@ -130,6 +130,7 @@
     int frameNumber() const { return m_frameNumber; }
 
     void invalidateRootLayerRect(const IntRect& dirtyRect);
+    void setZoomAnimatorScale(double);
 
     const LayerRendererCapabilities& layerRendererCapabilities() const;
 
@@ -187,6 +188,7 @@
     CCSettings m_settings;
 
     IntSize m_viewportSize;
+    double m_zoomAnimatorScale;
     bool m_visible;
 };
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -155,4 +155,9 @@
         m_layerRenderer->viewportChanged();
 }
 
+void CCLayerTreeHostImpl::setZoomAnimatorScale(double zoom)
+{
+    m_layerRenderer->setZoomAnimatorScale(zoom);
 }
+
+}

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h (94788 => 94789)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h	2011-09-08 20:31:02 UTC (rev 94789)
@@ -75,6 +75,7 @@
 
     void setViewport(const IntSize& viewportSize);
     const IntSize& viewportSize() const { return m_viewportSize; }
+    void setZoomAnimatorScale(double);
 
 protected:
     explicit CCLayerTreeHostImpl(const CCSettings&);

Modified: trunk/Source/WebCore/testing/Internals.cpp (94788 => 94789)


--- trunk/Source/WebCore/testing/Internals.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/testing/Internals.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -243,6 +243,16 @@
     document->settings()->setForceCompositingMode(enabled);
 }
 
+void Internals::setZoomAnimatorScale(Document *document, double scale, ExceptionCode& ec)
+{
+    if (!document || !document->settings()) {
+        ec = INVALID_ACCESS_ERR;
+        return;
+    }
+
+    document->settings()->setZoomAnimatorScale(scale);
+}
+
 void Internals::setPasswordEchoEnabled(Document* document, bool enabled, ExceptionCode& ec)
 {
     if (!document || !document->settings()) {

Modified: trunk/Source/WebCore/testing/Internals.h (94788 => 94789)


--- trunk/Source/WebCore/testing/Internals.h	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/testing/Internals.h	2011-09-08 20:31:02 UTC (rev 94789)
@@ -77,6 +77,7 @@
     PassRefPtr<Range> markerRangeForNode(Node*, unsigned, ExceptionCode&);
 
     void setForceCompositingMode(Document*, bool enabled, ExceptionCode&);
+    void setZoomAnimatorScale(Document*, double scale, ExceptionCode&);
 
     void setPasswordEchoEnabled(Document*, bool enabled, ExceptionCode&);
     void setPasswordEchoDurationInSeconds(Document*, double durationInSeconds, ExceptionCode&);

Modified: trunk/Source/WebCore/testing/Internals.idl (94788 => 94789)


--- trunk/Source/WebCore/testing/Internals.idl	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebCore/testing/Internals.idl	2011-09-08 20:31:02 UTC (rev 94789)
@@ -51,6 +51,7 @@
         Range markerRangeForNode(in Node node, in unsigned long index) raises(DOMException);
 
         void setForceCompositingMode(in Document document, in boolean enabled) raises(DOMException);
+        void setZoomAnimatorScale(in Document document, in double scale) raises(DOMException);
 
         void setPasswordEchoEnabled(in Document document, in boolean enabled) raises(DOMException);
         void setPasswordEchoDurationInSeconds(in Document document, in double durationInSeconds) raises(DOMException);

Modified: trunk/Source/WebKit/chromium/ChangeLog (94788 => 94789)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-09-08 20:31:02 UTC (rev 94789)
@@ -1,3 +1,17 @@
+2011-09-08  W. James MacLean  <wjmacl...@chromium.org>
+
+        [chromium] Add backend compositor support for rescaling (zooming) textures during zoom animation.
+        https://bugs.webkit.org/show_bug.cgi?id=66472
+
+        This patch contains plumbing from Internals to WebViewImpl that can be removed
+        at a later time when the zoom animator code is complete.
+
+        Reviewed by James Robinson.
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::setZoomLevel):
+        (WebKit::WebViewImpl::setRootLayerNeedsDisplay):
+
 2011-09-08  Scott Byer  <scottb...@chromium.org>
 
         Compile in ScrollAnimator for Chromium on all platforms by default.

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (94788 => 94789)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-09-08 20:23:53 UTC (rev 94788)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-09-08 20:31:02 UTC (rev 94789)
@@ -1823,6 +1823,9 @@
 
 double WebViewImpl::setZoomLevel(bool textOnly, double zoomLevel)
 {
+    if (m_layerTreeHost)
+        m_layerTreeHost->setZoomAnimatorScale(1);
+
     if (zoomLevel < m_minimumZoomLevel)
         m_zoomLevel = m_minimumZoomLevel;
     else if (zoomLevel > m_maximumZoomLevel)
@@ -2563,6 +2566,8 @@
 
 void WebViewImpl::setRootLayerNeedsDisplay()
 {
+    if (m_layerTreeHost)
+        m_layerTreeHost->setZoomAnimatorScale(m_page->settings()->zoomAnimatorScale());
 #if USE(THREADED_COMPOSITING)
     if (m_layerTreeHost)
         m_layerTreeHost->setNeedsCommitAndRedraw();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to