⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 110635 in webkit


Ignore:
Timestamp:
Mar 13, 2012, 4:28:38 PM (15 years ago)
Author:
shawnsingh@chromium.org
Message:

[chromium] wrong transform causing incorrect culling
​https://bugs.webkit.org/show_bug.cgi?id=80471

Reviewed by James Robinson.

Source/WebCore:

Unit test added to CCRenderSurfaceTest.cpp

In addition to using originTransform() instead of drawTransform(),
this patch shuffles a bit of code so that a unit test can be
easily added.

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

(WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):

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

(WebCore::CCRenderSurface::createSharedQuadState):
(WebCore):

  • platform/graphics/chromium/cc/CCRenderSurface.h:

(CCRenderSurface):

Source/WebKit/chromium:

  • tests/CCRenderSurfaceTest.cpp:

(WebCore::TEST):
(WebCore):

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r110632 r110635  
     12012-03-13  Shawn Singh  <shawnsingh@chromium.org>
     2
     3        [chromium] wrong transform causing incorrect culling
     4        https://bugs.webkit.org/show_bug.cgi?id=80471
     5
     6        Reviewed by James Robinson.
     7
     8        Unit test added to CCRenderSurfaceTest.cpp
     9
     10        In addition to using originTransform() instead of drawTransform(),
     11        this patch shuffles a bit of code so that a unit test can be
     12        easily added.
     13
     14        * platform/graphics/chromium/cc/CCRenderPass.cpp:
     15        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
     16        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
     17        (WebCore::CCRenderSurface::createSharedQuadState):
     18        (WebCore):
     19        * platform/graphics/chromium/cc/CCRenderSurface.h:
     20        (CCRenderSurface):
     21
    1222012-03-13  Dave Tharp  <dtharp@codeaurora.org>
    223
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp

    r110596 r110635  
    6262    // not be handled specially here.
    6363    CCRenderSurface* surface = layer->renderSurface();
    64     bool isOpaque = false;
    65     OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(surface->drawTransform(), surface->drawTransform(), surface->contentRect(), surface->clipRect(), surface->drawOpacity(), isOpaque);
     64    OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState();
    6665    m_quadList.append(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface->contentRect(), layer, surfaceDamageRect()));
    6766    m_sharedQuadStateList.append(sharedQuadState.release());
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp

    r110483 r110635  
    4242#include "cc/CCProxy.h"
    4343#include "cc/CCRenderSurfaceFilters.h"
     44#include "cc/CCSharedQuadState.h"
    4445#include <wtf/text/CString.h>
    4546
    … …  
    302303}
    303304
     305PassOwnPtr<CCSharedQuadState> CCRenderSurface::createSharedQuadState() const
     306{
     307    bool isOpaque = false;
     308    return CCSharedQuadState::create(originTransform(), drawTransform(), contentRect(), clipRect(), drawOpacity(), isOpaque);
     309}
     310
    304311}
    305312#endif // USE(ACCELERATED_COMPOSITING)
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h

    r109781 r110635  
    4444
    4545class CCDamageTracker;
     46class CCSharedQuadState;
    4647class CCLayerImpl;
    4748class LayerRendererChromium;
    … …  
    115116    CCDamageTracker* damageTracker() const { return m_damageTracker.get(); }
    116117
     118    PassOwnPtr<CCSharedQuadState> createSharedQuadState() const;
     119
    117120private:
    118121    void drawLayer(LayerRendererChromium*, CCLayerImpl*, const TransformationMatrix&, const SkBitmap& filterBitmap);
  • trunk/Source/WebKit/chromium/ChangeLog

    r110627 r110635  
     12012-03-13  Shawn Singh  <shawnsingh@chromium.org>
     2
     3        [chromium] wrong transform causing incorrect culling
     4        https://bugs.webkit.org/show_bug.cgi?id=80471
     5
     6        Reviewed by James Robinson.
     7
     8        * tests/CCRenderSurfaceTest.cpp:
     9        (WebCore::TEST):
     10        (WebCore):
     11
    1122012-03-13  Nat Duca  <nduca@chromium.org>
    213
  • trunk/Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp

    r108886 r110635  
    2727#include "cc/CCRenderSurface.h"
    2828
     29#include "TransformationMatrix.h"
    2930#include "cc/CCLayerImpl.h"
     31#include "cc/CCSharedQuadState.h"
    3032#include "cc/CCSingleThreadProxy.h"
    3133#include <gmock/gmock.h>
    … …  
    9092}
    9193
     94TEST(CCRenderSurfaceTest, sanityCheckSurfaceCreatesCorrectSharedQuadState)
     95{
     96    // This will fake that we are on the correct thread for testing purposes.
     97    DebugScopedSetImplThread setImplThread;
     98
     99    OwnPtr<CCLayerImpl> owningLayer = CCLayerImpl::create(0);
     100    owningLayer->createRenderSurface();
     101    ASSERT_TRUE(owningLayer->renderSurface());
     102    CCRenderSurface* renderSurface = owningLayer->renderSurface();
     103
     104    IntRect contentRect = IntRect(IntPoint::zero(), IntSize(50, 50));
     105    IntRect clipRect = IntRect(IntPoint(5, 5), IntSize(40, 40));
     106    TransformationMatrix draw;
     107    TransformationMatrix origin;
     108
     109    draw.translate(30, 40);
     110
     111    renderSurface->setDrawTransform(draw);
     112    renderSurface->setOriginTransform(origin);
     113    renderSurface->setContentRect(contentRect);
     114    renderSurface->setClipRect(clipRect);
     115    renderSurface->setDrawOpacity(1);
     116
     117    OwnPtr<CCSharedQuadState> sharedQuadState = renderSurface->createSharedQuadState();
     118
     119    EXPECT_TRUE(sharedQuadState->quadTransform().isIdentity());
     120    EXPECT_EQ(30, sharedQuadState->layerTransform().m41());
     121    EXPECT_EQ(40, sharedQuadState->layerTransform().m42());
     122    EXPECT_EQ(contentRect, sharedQuadState->layerRect());
     123    EXPECT_EQ(clipRect, sharedQuadState->clipRect());
     124    EXPECT_EQ(1, sharedQuadState->opacity());
     125    EXPECT_FALSE(sharedQuadState->isOpaque());
     126}
     127
    92128} // namespace
Note: See TracChangeset for help on using the changeset viewer.