Changeset 95988 in webkit


Ignore:
Timestamp:
Sep 26, 2011 1:31:12 PM (13 years ago)
Author:
wjmaclean@chromium.org
Message:

[chromium] Revise zoom animator backend to use full transform instead of just scale.
https://bugs.webkit.org/show_bug.cgi?id=68535

Reviewed by Kenneth Russell.

Source/WebCore:

  • page/Settings.cpp:

(WebCore::Settings::Settings):

  • page/Settings.h:

(WebCore::Settings::setZoomAnimatorScale):
(WebCore::Settings::zoomAnimatorScale):
(WebCore::Settings::setZoomAnimatorPosition):
(WebCore::Settings::zoomAnimatorPosX):
(WebCore::Settings::zoomAnimatorPosY):

  • platform/graphics/chromium/LayerRendererChromium.cpp:

(WebCore::LayerRendererChromium::LayerRendererChromium):
(WebCore::LayerRendererChromium::drawLayersInternal):

  • platform/graphics/chromium/LayerRendererChromium.h:

(WebCore::LayerRendererChromium::setZoomAnimatorTransform):

  • platform/graphics/chromium/cc/CCLayerTreeHost.cpp:

(WebCore::CCLayerTreeHost::CCLayerTreeHost):
(WebCore::CCLayerTreeHost::commitTo):
(WebCore::CCLayerTreeHost::setZoomAnimatorTransform):
(WebCore::CCLayerTreeHost::updateLayers):

  • platform/graphics/chromium/cc/CCLayerTreeHost.h:
  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:

(WebCore::CCLayerTreeHostImpl::setZoomAnimatorTransform):

  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
  • testing/Internals.cpp:

(WebCore::Internals::setZoomAnimatorTransform):

  • testing/Internals.h:
  • testing/Internals.idl:

Source/WebKit/chromium:

  • src/WebViewImpl.cpp:

(WebKit::WebViewImpl::setZoomLevel):
(WebKit::WebViewImpl::setRootLayerNeedsDisplay):

LayoutTests:

  • platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png: Added.
  • platform/chromium/compositing/zoom-animator-scale-test.html:
Location:
trunk
Files:
1 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r95987 r95988  
     12011-09-26  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Revise zoom animator backend to use full transform instead of just scale.
     4        https://bugs.webkit.org/show_bug.cgi?id=68535
     5
     6        Reviewed by Kenneth Russell.
     7
     8        * platform/chromium-gpu-linux/platform/chromium/compositing/zoom-animator-scale-test-expected.png: Added.
     9        * platform/chromium/compositing/zoom-animator-scale-test.html:
     10
    1112011-09-26  Mihai Parparita  <mihaip@chromium.org>
    212
  • trunk/LayoutTests/platform/chromium/compositing/zoom-animator-scale-test.html

    r94789 r95988  
    44        if (window.internals) {
    55            window.internals.setForceCompositingMode(document, true);
    6             window.internals.setZoomAnimatorScale(document, 1.25);
     6            window.internals.setZoomAnimatorTransform(document, 1.25, -25.0, -25.0);
    77        }
    88        if (window.layoutTestController) {
  • trunk/Source/WebCore/ChangeLog

    r95985 r95988  
     12011-09-26  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Revise zoom animator backend to use full transform instead of just scale.
     4        https://bugs.webkit.org/show_bug.cgi?id=68535
     5
     6        Reviewed by Kenneth Russell.
     7
     8        * page/Settings.cpp:
     9        (WebCore::Settings::Settings):
     10        * page/Settings.h:
     11        (WebCore::Settings::setZoomAnimatorScale):
     12        (WebCore::Settings::zoomAnimatorScale):
     13        (WebCore::Settings::setZoomAnimatorPosition):
     14        (WebCore::Settings::zoomAnimatorPosX):
     15        (WebCore::Settings::zoomAnimatorPosY):
     16        * platform/graphics/chromium/LayerRendererChromium.cpp:
     17        (WebCore::LayerRendererChromium::LayerRendererChromium):
     18        (WebCore::LayerRendererChromium::drawLayersInternal):
     19        * platform/graphics/chromium/LayerRendererChromium.h:
     20        (WebCore::LayerRendererChromium::setZoomAnimatorTransform):
     21        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
     22        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
     23        (WebCore::CCLayerTreeHost::commitTo):
     24        (WebCore::CCLayerTreeHost::setZoomAnimatorTransform):
     25        (WebCore::CCLayerTreeHost::updateLayers):
     26        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
     27        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
     28        (WebCore::CCLayerTreeHostImpl::setZoomAnimatorTransform):
     29        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
     30        * testing/Internals.cpp:
     31        (WebCore::Internals::setZoomAnimatorTransform):
     32        * testing/Internals.h:
     33        * testing/Internals.idl:
     34
    1352011-09-26  Dan Bernstein  <mitz@apple.com>
    236
  • trunk/Source/WebCore/page/Settings.cpp

    r95347 r95988  
    220220    , m_loadsImagesAutomaticallyTimer(this, &Settings::loadsImagesAutomaticallyTimerFired)
    221221    , m_zoomAnimatorScale(1)
     222    , m_zoomAnimatorPosX(0)
     223    , m_zoomAnimatorPosY(0)
    222224{
    223225    // A Frame may not have been created yet, so we initialize the AtomicString
  • trunk/Source/WebCore/page/Settings.h

    r95347 r95988  
    433433        bool forceCompositingMode() { return m_forceCompositingMode; }
    434434
    435         void setZoomAnimatorScale(double scale) { m_zoomAnimatorScale = scale; }
    436         double zoomAnimatorScale() { return m_zoomAnimatorScale; }
     435        void setZoomAnimatorScale(float scale) { m_zoomAnimatorScale = scale; }
     436        float zoomAnimatorScale() { return m_zoomAnimatorScale; }
     437
     438        void setZoomAnimatorPosition(float x, float y) { m_zoomAnimatorPosX = x; m_zoomAnimatorPosY = y; }
     439        float zoomAnimatorPosX() { return m_zoomAnimatorPosX; }
     440        float zoomAnimatorPosY() { return m_zoomAnimatorPosY; }
    437441
    438442        void setShouldInjectUserScriptsInInitialEmptyDocument(bool flag) { m_shouldInjectUserScriptsInInitialEmptyDocument = flag; }
     
    604608        static bool gMockScrollbarsEnabled;
    605609
    606         double m_zoomAnimatorScale;
     610        float m_zoomAnimatorScale;
     611        float m_zoomAnimatorPosX;
     612        float m_zoomAnimatorPosY;
    607613
    608614#if USE(SAFARI_THEME)
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r95901 r95988  
    148148    , m_currentRenderSurface(0)
    149149    , m_offscreenFramebufferId(0)
    150     , m_zoomAnimatorScale(1)
    151150    , m_contentsTextureMemoryUseBytes(0)
    152151    , m_context(context)
     
    268267    renderSurfaceLayerList.append(rootDrawLayer);
    269268
    270     TransformationMatrix zoomMatrix;
    271     zoomMatrix.scale3d(m_zoomAnimatorScale, m_zoomAnimatorScale, 1);
    272269    m_defaultRenderSurface = rootDrawLayer->renderSurface();
    273270    m_defaultRenderSurface->clearLayerList();
     
    275272    {
    276273        TRACE_EVENT("LayerRendererChromium::drawLayersInternal::calcDrawEtc", this, 0);
    277         CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, zoomMatrix, zoomMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);
     274        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, m_zoomAnimatorTransform, m_zoomAnimatorTransform, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);
    278275    }
    279276
     
    291288    useRenderSurface(m_defaultRenderSurface);
    292289
    293     // Clear to blue to make it easier to spot unrendered regions.
    294     m_context->clearColor(0, 0, 1, 1);
     290    if (m_zoomAnimatorTransform.isIdentity())
     291        // Clear to blue to make it easier to spot unrendered regions.
     292        m_context->clearColor(0, 0, 1, 1);
     293    else
     294        // Clear to grey, as zoom animation may leave unrendered regions.
     295        // FIXME(wjmaclean): Render some interesting texture in unrendered regions.
     296        m_context->clearColor(0.25, 0.25, 0.25, 1);
    295297    m_context->colorMask(true, true, true, true);
    296298    m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT);
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r95901 r95988  
    104104    void present();
    105105
    106     void setZoomAnimatorScale(double factor) { m_zoomAnimatorScale = factor; }
     106    void setZoomAnimatorTransform(const TransformationMatrix& t) { m_zoomAnimatorTransform = t; }
    107107
    108108    unsigned createLayerTexture();
     
    192192    CCRenderSurface* m_currentRenderSurface;
    193193    unsigned m_offscreenFramebufferId;
    194     double m_zoomAnimatorScale;
     194    TransformationMatrix m_zoomAnimatorTransform;
    195195
    196196    // Store values that are shared between instances of each layer type
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp

    r95962 r95988  
    5454    , m_rootLayer(rootLayer)
    5555    , m_settings(settings)
    56     , m_zoomAnimatorScale(1)
    5756    , m_visible(true)
    5857{
     
    120119
    121120    hostImpl->setVisible(m_visible);
    122     hostImpl->setZoomAnimatorScale(m_zoomAnimatorScale);
     121    hostImpl->setZoomAnimatorTransform(m_zoomAnimatorTransform);
    123122    hostImpl->setViewport(viewportSize());
    124123
     
    188187}
    189188
    190 void CCLayerTreeHost::setZoomAnimatorScale(double zoom)
    191 {
    192     bool zoomChanged = m_zoomAnimatorScale != zoom;
    193 
    194     m_zoomAnimatorScale = zoom;
     189void CCLayerTreeHost::setZoomAnimatorTransform(const TransformationMatrix& zoom)
     190{
     191    bool zoomChanged = m_zoomAnimatorTransform != zoom;
     192
     193    m_zoomAnimatorTransform = zoom;
    195194
    196195    if (zoomChanged)
     
    284283    rootRenderSurface->clearLayerList();
    285284
    286     TransformationMatrix zoomMatrix;
    287     zoomMatrix.scale3d(m_zoomAnimatorScale, m_zoomAnimatorScale, 1);
    288285    {
    289286        TRACE_EVENT("CCLayerTreeHost::updateLayers::calcDrawEtc", this, 0);
    290         CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, zoomMatrix, zoomMatrix, m_updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize);
     287        CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, m_zoomAnimatorTransform, m_zoomAnimatorTransform, m_updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize);
    291288    }
    292289
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h

    r95901 r95988  
    2828#include "GraphicsTypes3D.h"
    2929#include "IntRect.h"
     30#include "TransformationMatrix.h"
    3031#include "cc/CCProxy.h"
    3132
     
    127128    int frameNumber() const { return m_frameNumber; }
    128129
    129     void setZoomAnimatorScale(double);
     130    void setZoomAnimatorTransform(const TransformationMatrix&);
    130131
    131132    const LayerRendererCapabilities& layerRendererCapabilities() const;
     
    182183
    183184    IntSize m_viewportSize;
    184     double m_zoomAnimatorScale;
     185    TransformationMatrix m_zoomAnimatorTransform;
    185186    bool m_visible;
    186187};
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp

    r95901 r95988  
    152152}
    153153
    154 void CCLayerTreeHostImpl::setZoomAnimatorScale(double zoom)
     154void CCLayerTreeHostImpl::setZoomAnimatorTransform(const TransformationMatrix& zoom)
    155155{
    156     m_layerRenderer->setZoomAnimatorScale(zoom);
     156    m_layerRenderer->setZoomAnimatorTransform(zoom);
    157157}
    158158
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h

    r95901 r95988  
    3939class LayerRendererChromium;
    4040struct LayerRendererCapabilities;
     41class TransformationMatrix;
    4142
    4243// CCLayerTreeHostImpl owns the CCLayerImpl tree as well as associated rendering state
     
    7677    void setViewport(const IntSize& viewportSize);
    7778    const IntSize& viewportSize() const { return m_viewportSize; }
    78     void setZoomAnimatorScale(double);
     79    void setZoomAnimatorTransform(const TransformationMatrix&);
    7980
    8081    const CCSettings& settings() const { return m_settings; }
  • trunk/Source/WebCore/testing/Internals.cpp

    r95901 r95988  
    245245}
    246246
    247 void Internals::setZoomAnimatorScale(Document *document, double scale, ExceptionCode& ec)
     247void Internals::setZoomAnimatorTransform(Document *document, double scale, double tx, double ty, ExceptionCode& ec)
    248248{
    249249    if (!document || !document->settings()) {
     
    253253
    254254    document->settings()->setZoomAnimatorScale(scale);
     255    document->settings()->setZoomAnimatorPosition(tx, ty);
    255256}
    256257
  • trunk/Source/WebCore/testing/Internals.h

    r95901 r95988  
    7878
    7979    void setForceCompositingMode(Document*, bool enabled, ExceptionCode&);
    80     void setZoomAnimatorScale(Document*, double scale, ExceptionCode&);
     80    void setZoomAnimatorTransform(Document*, double scale, double tx, double ty, ExceptionCode&);
    8181
    8282    void setPasswordEchoEnabled(Document*, bool enabled, ExceptionCode&);
  • trunk/Source/WebCore/testing/Internals.idl

    r95890 r95988  
    5252
    5353        void setForceCompositingMode(in Document document, in boolean enabled) raises(DOMException);
    54         void setZoomAnimatorScale(in Document document, in double scale) raises(DOMException);
     54        void setZoomAnimatorTransform(in Document document, in double scale, in double tx, in double ty) raises(DOMException);
    5555
    5656        void setPasswordEchoEnabled(in Document document, in boolean enabled) raises(DOMException);
  • trunk/Source/WebKit/chromium/ChangeLog

    r95962 r95988  
     12011-09-26  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Revise zoom animator backend to use full transform instead of just scale.
     4        https://bugs.webkit.org/show_bug.cgi?id=68535
     5
     6        Reviewed by Kenneth Russell.
     7
     8        * src/WebViewImpl.cpp:
     9        (WebKit::WebViewImpl::setZoomLevel):
     10        (WebKit::WebViewImpl::setRootLayerNeedsDisplay):
     11
    1122011-09-26  Sheriff Bot  <webkit.review.bot@gmail.com>
    213
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r95962 r95988  
    18331833{
    18341834    if (m_layerTreeHost)
    1835         m_layerTreeHost->setZoomAnimatorScale(1);
     1835        m_layerTreeHost->setZoomAnimatorTransform(TransformationMatrix());
    18361836
    18371837    if (zoomLevel < m_minimumZoomLevel)
     
    25672567void WebViewImpl::setRootLayerNeedsDisplay()
    25682568{
    2569     if (m_layerTreeHost)
    2570         m_layerTreeHost->setZoomAnimatorScale(m_page->settings()->zoomAnimatorScale());
     2569    if (m_layerTreeHost) {
     2570        TransformationMatrix zoomMatrix;
     2571        zoomMatrix.translate(m_page->settings()->zoomAnimatorPosX(), m_page->settings()->zoomAnimatorPosY());
     2572        zoomMatrix.scale(m_page->settings()->zoomAnimatorScale());
     2573        m_layerTreeHost->setZoomAnimatorTransform(zoomMatrix);
     2574    }
    25712575#if USE(THREADED_COMPOSITING)
    25722576    if (m_layerTreeHost)
Note: See TracChangeset for help on using the changeset viewer.