Title: [122525] trunk/Source
Revision
122525
Author
dan...@chromium.org
Date
2012-07-12 16:26:01 -0700 (Thu, 12 Jul 2012)

Log Message

[chromium] Remove the RenderPass pointer from RenderPassDrawQuad
https://bugs.webkit.org/show_bug.cgi?id=91023

Reviewed by Adrienne Walker.

Source/WebCore:

Removes the RenderPass pointer and keeps only an integer id in the
quad to refer back to the RenderPass the quad reads from.

Covered by existing tests.

* platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
(WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
(WebCore::findRenderPassById):
(WebCore):
(WebCore::removeRenderPassesRecursive):
(WebCore::CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPass):
(WebCore::CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass):
(WebCore::CCLayerTreeHostImpl::removeRenderPasses):
(WebCore::CCLayerTreeHostImpl::prepareToDraw):
* platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
(FrameData):
(CullRenderPassesWithCachedTextures):
(CullRenderPassesWithNoQuads):
(CCLayerTreeHostImpl):
* platform/graphics/chromium/cc/CCRenderPass.cpp:
(WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
* platform/graphics/chromium/cc/CCRenderPass.h:
(WebCore):
* platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp:
(WebCore::CCRenderPassDrawQuad::create):
(WebCore::CCRenderPassDrawQuad::CCRenderPassDrawQuad):
* platform/graphics/chromium/cc/CCRenderPassDrawQuad.h:
(CCRenderPassDrawQuad):
* platform/graphics/chromium/cc/CCRenderSurface.cpp:
(WebCore::CCRenderSurface::appendQuads):
* platform/graphics/chromium/cc/CCRenderSurface.h:
(CCRenderSurface):

Source/WebKit/chromium:

* tests/CCLayerTreeHostImplTest.cpp:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (122524 => 122525)


--- trunk/Source/WebCore/ChangeLog	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/ChangeLog	2012-07-12 23:26:01 UTC (rev 122525)
@@ -1,3 +1,43 @@
+2012-07-12  Dana Jansens  <dan...@chromium.org>
+
+        [chromium] Remove the RenderPass pointer from RenderPassDrawQuad
+        https://bugs.webkit.org/show_bug.cgi?id=91023
+
+        Reviewed by Adrienne Walker.
+
+        Removes the RenderPass pointer and keeps only an integer id in the
+        quad to refer back to the RenderPass the quad reads from.
+
+        Covered by existing tests.
+
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
+        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
+        (WebCore::findRenderPassById):
+        (WebCore):
+        (WebCore::removeRenderPassesRecursive):
+        (WebCore::CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPass):
+        (WebCore::CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass):
+        (WebCore::CCLayerTreeHostImpl::removeRenderPasses):
+        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
+        (FrameData):
+        (CullRenderPassesWithCachedTextures):
+        (CullRenderPassesWithNoQuads):
+        (CCLayerTreeHostImpl):
+        * platform/graphics/chromium/cc/CCRenderPass.cpp:
+        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
+        * platform/graphics/chromium/cc/CCRenderPass.h:
+        (WebCore):
+        * platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp:
+        (WebCore::CCRenderPassDrawQuad::create):
+        (WebCore::CCRenderPassDrawQuad::CCRenderPassDrawQuad):
+        * platform/graphics/chromium/cc/CCRenderPassDrawQuad.h:
+        (CCRenderPassDrawQuad):
+        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
+        (WebCore::CCRenderSurface::appendQuads):
+        * platform/graphics/chromium/cc/CCRenderSurface.h:
+        (CCRenderSurface):
+
 2012-07-12  Elliott Sprehn  <espr...@gmail.com>
 
         Unneeded tree walking when adding or removing children due to RenderCounter / RenderQuote logic

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


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -315,7 +315,7 @@
 {
     HashMap<int, const CCRenderPass*> passesInFrame;
     for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i)
-        passesInFrame.set(renderPassesInDrawOrder[i]->id(), renderPassesInDrawOrder[i].get());
+        passesInFrame.set(renderPassesInDrawOrder[i]->id(), renderPassesInDrawOrder[i]);
 
     Vector<int> passesToDelete;
     HashMap<int, OwnPtr<CCScopedTexture> >::const_iterator passIterator;

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -296,12 +296,11 @@
         CCLayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceIndex];
         CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
 
-        // FIXME: Make this unique across all CCLayerTreeHostImpls.
-        int globalRenderPassId = renderSurfaceLayer->id();
-
-        OwnPtr<CCRenderPass> pass = CCRenderPass::create(renderSurface, globalRenderPassId);
+        int renderPassId = renderSurfaceLayer->id();
+        OwnPtr<CCRenderPass> pass = CCRenderPass::create(renderSurface, renderPassId);
         surfacePassMap.add(renderSurface, pass.get());
-        frame.renderPasses.append(pass.release());
+        frame.renderPasses.append(pass.get());
+        frame.renderPassesById.add(renderPassId, pass.release());
     }
 
     bool recordMetricsForFrame = true; // FIXME: In the future, disable this when about:tracing is off.
@@ -407,19 +406,26 @@
     return m_rootScrollLayerImpl->children()[0]->contentBounds();
 }
 
-// static
-void CCLayerTreeHostImpl::removeRenderPassesRecursive(CCRenderPassList& passes, size_t bottomPass, const CCRenderPass* firstToRemove, CCRenderPassList& skippedPasses)
+static inline CCRenderPass* findRenderPassById(int renderPassId, const CCLayerTreeHostImpl::FrameData& frame)
 {
-    size_t removeIndex = passes.find(firstToRemove);
+    CCRenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderPassId);
+    ASSERT(it != frame.renderPassesById.end());
+    return it->second.get();
+}
 
+static void removeRenderPassesRecursive(int removeRenderPassId, CCLayerTreeHostImpl::FrameData& frame)
+{
+    CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame);
+    size_t removeIndex = frame.renderPasses.find(removeRenderPass);
+
     // The pass was already removed by another quad - probably the original, and we are the replica.
     if (removeIndex == notFound)
         return;
 
-    OwnPtr<CCRenderPass> removedPass = passes[removeIndex].release();
-    passes.remove(removeIndex);
+    const CCRenderPass* removedPass = frame.renderPasses[removeIndex];
+    frame.renderPasses.remove(removeIndex);
 
-    // Now follow up for all RenderPass quads and remove their render passes recursively.
+    // Now follow up for all RenderPass quads and remove their RenderPasses recursively.
     const CCQuadList& quadList = removedPass->quadList();
     CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBegin();
     for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
@@ -427,36 +433,32 @@
         if (currentQuad->material() != CCDrawQuad::RenderPass)
             continue;
 
-        CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQuad*>(currentQuad);
-        const CCRenderPass* nextRenderPass = renderPassQuad->renderPass();
-
-        // Our search is now limited up to the pass that we just removed.
-        // Substitute removeIndex for bottomPass now.
-        removeRenderPassesRecursive(passes, removeIndex, nextRenderPass, skippedPasses);
+        int nextRemoveRenderPassId = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPassId();
+        removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
     }
-    skippedPasses.append(removedPass.release());
 }
 
-bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPass(const CCRenderPassList&, const CCRenderPassDrawQuad& quad) const
+bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPass(const CCRenderPassDrawQuad& quad, const FrameData&) const
 {
     return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCachedResourcesForRenderPassId(quad.renderPassId());
 }
 
-bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(const CCRenderPassList& passList, const CCRenderPassDrawQuad& quad) const
+bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(const CCRenderPassDrawQuad& quad, const FrameData& frame) const
 {
-    size_t passIndex = passList.find(quad.renderPass());
+    const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame);
+    size_t passIndex = frame.renderPasses.find(renderPass);
     ASSERT(passIndex != notFound);
 
     // If any quad or RenderPass draws into this RenderPass, then keep it.
-    const CCQuadList& quadList = passList[passIndex]->quadList();
+    const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList();
     for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
         CCDrawQuad* currentQuad = quadListIterator->get();
 
         if (currentQuad->material() != CCDrawQuad::RenderPass)
             return false;
 
-        const CCRenderPassDrawQuad* quadInPass = static_cast<CCRenderPassDrawQuad*>(currentQuad);
-        if (passList.contains(quadInPass->renderPass()))
+        const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDrawQuad::materialCast(currentQuad)->renderPassId(), frame);
+        if (frame.renderPasses.contains(contributingPass))
             return false;
     }
     return true;
@@ -471,7 +473,7 @@
 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& frame)
 {
     for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culler.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) {
-        CCRenderPass* currentPass = frame.renderPasses[it].get();
+        const CCRenderPass* currentPass = frame.renderPasses[it];
         const CCQuadList& quadList = currentPass->quadList();
         CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBegin();
 
@@ -482,7 +484,7 @@
                 continue;
 
             CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQuad*>(currentQuad);
-            if (!culler.shouldRemoveRenderPass(frame.renderPasses, *renderPassQuad))
+            if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame))
                 continue;
 
             // We are changing the vector in the middle of iteration. Because we
@@ -491,7 +493,7 @@
             // change. So, capture the iterator position from the end of the
             // list, and restore it after the change.
             int positionFromEnd = frame.renderPasses.size() - it;
-            removeRenderPassesRecursive(frame.renderPasses, it, renderPassQuad->renderPass(), frame.skippedPasses);
+            removeRenderPassesRecursive(renderPassQuad->renderPassId(), frame);
             it = frame.renderPasses.size() - positionFromEnd;
             ASSERT(it >= 0);
         }
@@ -505,6 +507,7 @@
 
     frame.renderSurfaceLayerList = &m_renderSurfaceLayerList;
     frame.renderPasses.clear();
+    frame.renderPassesById.clear();
     frame.renderSurfaceLayerList->clear();
     frame.willDrawLayers.clear();
 
@@ -543,13 +546,13 @@
     // RenderWidget.
 
     // The root RenderPass is the last one to be drawn.
-    CCRenderPass* rootRenderPass = frame.renderPasses.last().get();
+    const CCRenderPass* rootRenderPass = frame.renderPasses.last();
 
     m_fpsCounter->markBeginningOfFrame(currentTime());
     m_layerRenderer->beginDrawingFrame(rootRenderPass);
 
     for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
-        CCRenderPass* renderPass = frame.renderPasses[i].get();
+        const CCRenderPass* renderPass = frame.renderPasses[i];
 
         FloatRect rootScissorRectInCurrentSurface = renderPass->targetSurface()->computeRootScissorRectInCurrentSurface(m_rootScissorRect);
         m_layerRenderer->drawRenderPass(renderPass, rootScissorRectInCurrentSurface);

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h	2012-07-12 23:26:01 UTC (rev 122525)
@@ -85,7 +85,7 @@
     struct FrameData {
         Vector<IntRect> occludingScreenSpaceRects;
         CCRenderPassList renderPasses;
-        CCRenderPassList skippedPasses;
+        CCRenderPassIdHashMap renderPassesById;
         CCLayerList* renderSurfaceLayerList;
         CCLayerList willDrawLayers;
     };
@@ -180,7 +180,7 @@
 
     class CullRenderPassesWithCachedTextures {
     public:
-        bool shouldRemoveRenderPass(const CCRenderPassList&, const CCRenderPassDrawQuad&) const;
+        bool shouldRemoveRenderPass(const CCRenderPassDrawQuad&, const FrameData&) const;
 
         // Iterates from the root first, in order to remove the surfaces closest
         // to the root with cached textures, and all surfaces that draw into
@@ -196,7 +196,7 @@
 
     class CullRenderPassesWithNoQuads {
     public:
-        bool shouldRemoveRenderPass(const CCRenderPassList&, const CCRenderPassDrawQuad&) const;
+        bool shouldRemoveRenderPass(const CCRenderPassDrawQuad&, const FrameData&) const;
 
         // Iterates in draw order, so that when a surface is removed, and its
         // target becomes empty, then its target can be removed also.
@@ -244,8 +244,6 @@
     void setBackgroundTickingEnabled(bool);
     IntSize contentSize() const;
 
-    static void removeRenderPassesRecursive(CCRenderPassList& passes, size_t bottomPass, const CCRenderPass* firstToRemove, CCRenderPassList& skippedPasses);
-
     void sendDidLoseContextRecursive(CCLayerImpl*);
     void clearRenderSurfaces();
     bool ensureRenderSurfaceLayerList();

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -72,7 +72,7 @@
 
     OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState();
     bool isReplica = false;
-    surface->appendQuads(quadCuller, sharedQuadState.get(), isReplica, contributingRenderPass);
+    surface->appendQuads(quadCuller, sharedQuadState.get(), isReplica, contributingRenderPass->id());
     m_sharedQuadStateList.append(sharedQuadState.release());
 
     if (!surface->hasReplica())
@@ -81,7 +81,7 @@
     // Add replica after the surface so that it appears below the surface.
     OwnPtr<CCSharedQuadState> replicaSharedQuadState = surface->createReplicaSharedQuadState();
     isReplica = true;
-    surface->appendQuads(quadCuller, replicaSharedQuadState.get(), isReplica, contributingRenderPass);
+    surface->appendQuads(quadCuller, replicaSharedQuadState.get(), isReplica, contributingRenderPass->id());
     m_sharedQuadStateList.append(replicaSharedQuadState.release());
 }
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h	2012-07-12 23:26:01 UTC (rev 122525)
@@ -30,6 +30,7 @@
 #include "cc/CCDrawQuad.h"
 #include "cc/CCOcclusionTracker.h"
 #include "cc/CCSharedQuadState.h"
+#include <wtf/HashMap.h>
 #include <wtf/PassOwnPtr.h>
 #include <wtf/Vector.h>
 
@@ -81,7 +82,8 @@
     bool m_hasTransparentBackground;
 };
 
-typedef Vector<OwnPtr<CCRenderPass> > CCRenderPassList;
+typedef Vector<CCRenderPass*> CCRenderPassList;
+typedef HashMap<int, OwnPtr<CCRenderPass> > CCRenderPassIdHashMap;
 
 }
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -27,21 +27,18 @@
 
 #include "cc/CCRenderPassDrawQuad.h"
 
-#include "cc/CCRenderPass.h"
-
 using WebKit::WebCompositorQuad;
 
 namespace WebCore {
 
-PassOwnPtr<CCRenderPassDrawQuad> CCRenderPassDrawQuad::create(const WebKit::WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const CCRenderPass* renderPass, bool isReplica, const WebKit::WebTransformationMatrix& drawTransform, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame)
+PassOwnPtr<CCRenderPassDrawQuad> CCRenderPassDrawQuad::create(const WebKit::WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, int renderPassId, bool isReplica, const WebKit::WebTransformationMatrix& drawTransform, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame)
 {
-    return adoptPtr(new CCRenderPassDrawQuad(sharedQuadState, quadRect, renderPass, isReplica, drawTransform, filters, backgroundFilters, maskTextureId, contentsChangedSinceLastFrame));
+    return adoptPtr(new CCRenderPassDrawQuad(sharedQuadState, quadRect, renderPassId, isReplica, drawTransform, filters, backgroundFilters, maskTextureId, contentsChangedSinceLastFrame));
 }
 
-CCRenderPassDrawQuad::CCRenderPassDrawQuad(const WebKit::WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const CCRenderPass* renderPass, bool isReplica, const WebKit::WebTransformationMatrix& drawTransform, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame)
-    : CCDrawQuad(sharedQuadState, CCDrawQuad::RenderPass, quadRect)
-    , m_renderPass(renderPass)
-    , m_renderPassId(renderPass->id())
+CCRenderPassDrawQuad::CCRenderPassDrawQuad(const WebKit::WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, int renderPassId, bool isReplica, const WebKit::WebTransformationMatrix& drawTransform, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame)
+    : WebCompositorQuad(sharedQuadState, WebCompositorQuad::RenderPass, quadRect)
+    , m_renderPassId(renderPassId)
     , m_isReplica(isReplica)
     , m_drawTransform(drawTransform)
     , m_filters(filters)
@@ -49,7 +46,7 @@
     , m_maskTextureId(maskTextureId)
     , m_contentsChangedSinceLastFrame(contentsChangedSinceLastFrame)
 {
-    ASSERT(m_renderPass);
+    ASSERT(m_renderPassId > 0);
 }
 
 const CCRenderPassDrawQuad* CCRenderPassDrawQuad::materialCast(const WebKit::WebCompositorQuad* quad)

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h	2012-07-12 23:26:01 UTC (rev 122525)
@@ -38,9 +38,8 @@
 class CCRenderPassDrawQuad : public WebKit::WebCompositorQuad {
     WTF_MAKE_NONCOPYABLE(CCRenderPassDrawQuad);
 public:
-    static PassOwnPtr<CCRenderPassDrawQuad> create(const WebKit::WebCompositorSharedQuadState*, const IntRect&, const CCRenderPass*, bool isReplica, const WebKit::WebTransformationMatrix&, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame);
+    static PassOwnPtr<CCRenderPassDrawQuad> create(const WebKit::WebCompositorSharedQuadState*, const IntRect&, int renderPassId, bool isReplica, const WebKit::WebTransformationMatrix&, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame);
 
-    const CCRenderPass* renderPass() const { return m_renderPass; }
     int renderPassId() const { return m_renderPassId; }
     bool isReplica() const { return m_isReplica; }
     unsigned maskTextureId() const { return m_maskTextureId; }
@@ -54,9 +53,8 @@
 
     static const CCRenderPassDrawQuad* materialCast(const WebKit::WebCompositorQuad*);
 private:
-    CCRenderPassDrawQuad(const WebKit::WebCompositorSharedQuadState*, const IntRect&, const CCRenderPass*, bool isReplica, const WebKit::WebTransformationMatrix&, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame);
+    CCRenderPassDrawQuad(const WebKit::WebCompositorSharedQuadState*, const IntRect&, int renderPassId, bool isReplica, const WebKit::WebTransformationMatrix&, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId, const IntRect& contentsChangedSinceLastFrame);
 
-    const CCRenderPass* m_renderPass;
     int m_renderPassId;
     bool m_isReplica;
     WebKit::WebTransformationMatrix m_drawTransform;

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -203,7 +203,7 @@
     return CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootScissorRect);
 }
 
-void CCRenderSurface::appendQuads(CCQuadCuller& quadList, CCSharedQuadState* sharedQuadState, bool forReplica, const CCRenderPass* renderPass)
+void CCRenderSurface::appendQuads(CCQuadCuller& quadList, CCSharedQuadState* sharedQuadState, bool forReplica, int renderPassId)
 {
     ASSERT(!forReplica || hasReplica());
 
@@ -235,7 +235,7 @@
     WebTransformationMatrix drawTransform = forReplica ? m_replicaDrawTransform : m_drawTransform;
     IntRect contentsChangedSinceLastFrame = contentsChanged() ? m_contentRect : IntRect();
 
-    quadList.appendSurface(CCRenderPassDrawQuad::create(sharedQuadState, contentRect(), renderPass, forReplica, drawTransform, filters(), backgroundFilters(), maskTextureId, contentsChangedSinceLastFrame));
+    quadList.appendSurface(CCRenderPassDrawQuad::create(sharedQuadState, contentRect(), renderPassId, forReplica, drawTransform, filters(), backgroundFilters(), maskTextureId, contentsChangedSinceLastFrame));
 }
 
 }

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h (122524 => 122525)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h	2012-07-12 23:26:01 UTC (rev 122525)
@@ -130,7 +130,7 @@
     PassOwnPtr<CCSharedQuadState> createSharedQuadState() const;
     PassOwnPtr<CCSharedQuadState> createReplicaSharedQuadState() const;
 
-    void appendQuads(CCQuadCuller&, CCSharedQuadState*, bool forReplica, const CCRenderPass*);
+    void appendQuads(CCQuadCuller&, CCSharedQuadState*, bool forReplica, int renderPassId);
 
     FloatRect computeRootScissorRectInCurrentSurface(const FloatRect& rootScissorRect) const;
 

Modified: trunk/Source/WebKit/chromium/ChangeLog (122524 => 122525)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-07-12 23:26:01 UTC (rev 122525)
@@ -1,3 +1,12 @@
+2012-07-12  Dana Jansens  <dan...@chromium.org>
+
+        [chromium] Remove the RenderPass pointer from RenderPassDrawQuad
+        https://bugs.webkit.org/show_bug.cgi?id=91023
+
+        Reviewed by Adrienne Walker.
+
+        * tests/CCLayerTreeHostImplTest.cpp:
+
 2012-07-12  Adam Barth  <aba...@webkit.org>
 
         [Chromium] WebSettings should be sorted

Modified: trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp (122524 => 122525)


--- trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp	2012-07-12 23:14:40 UTC (rev 122524)
+++ trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp	2012-07-12 23:26:01 UTC (rev 122525)
@@ -2520,7 +2520,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_TRUE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_TRUE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2552,7 +2553,8 @@
         EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[0]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2572,7 +2574,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_TRUE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_TRUE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2598,10 +2601,11 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         // Was our surface evicted?
-        EXPECT_FALSE(myHostImpl->layerRenderer()->haveCachedResourcesForRenderPassId(quad->renderPass()->id()));
+        EXPECT_FALSE(myHostImpl->layerRenderer()->haveCachedResourcesForRenderPassId(targetPass->id()));
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2635,7 +2639,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[0]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2667,7 +2672,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_TRUE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_TRUE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2700,7 +2706,8 @@
         EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[0]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2720,7 +2727,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_TRUE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_TRUE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2746,10 +2754,11 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         // Was our surface evicted?
-        EXPECT_FALSE(myHostImpl->layerRenderer()->haveCachedResourcesForRenderPassId(quad->renderPass()->id()));
+        EXPECT_FALSE(myHostImpl->layerRenderer()->haveCachedResourcesForRenderPassId(targetPass->id()));
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2784,7 +2793,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[0]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2825,7 +2835,8 @@
 
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[1]->quadList()[0].get());
-        EXPECT_TRUE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_TRUE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2858,7 +2869,8 @@
         EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
         EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->material());
         CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.renderPasses[0]->quadList()[0].get());
-        EXPECT_FALSE(quad->renderPass()->targetSurface()->contentsChanged());
+        CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId());
+        EXPECT_FALSE(targetPass->targetSurface()->contentsChanged());
 
         myHostImpl->drawLayers(frame);
         myHostImpl->didDrawAllLayers(frame);
@@ -2901,7 +2913,6 @@
 
 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData {
     std::map<char, RenderPassCacheEntry> renderPassCache;
-    std::map<const CCRenderPass*, char> renderPassId;
     Vector<OwnPtr<CCRenderSurface> > renderSurfaceStore;
     Vector<OwnPtr<CCLayerImpl> > layerStore;
     OwnPtr<CCSharedQuadState> sharedQuadState;
@@ -2974,7 +2985,6 @@
     // Pre-create root pass
     char rootRenderPassId = testScript[0];
     OwnPtr<CCRenderPass> rootRenderPass = createDummyRenderPass(testData, rootRenderPassId);
-    testData.renderPassId.insert(std::pair<CCRenderPass*, char>(rootRenderPass.get(), rootRenderPassId));
     testData.renderPassCache.insert(std::pair<char, RenderPassCacheEntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release())));
     while (*currentChar) {
         char renderPassId = currentChar[0];
@@ -3021,26 +3031,22 @@
                         currentChar++;
                 }
 
-                CCRenderPass* refRenderPassPtr;
-
                 if (testData.renderPassCache.find(newRenderPassId) == testData.renderPassCache.end()) {
                     if (hasTexture)
                         renderer->setHaveCachedResourcesForRenderPassId(newRenderPassId);
 
-                    OwnPtr<CCRenderPass> refRenderPass = createDummyRenderPass(testData, newRenderPassId);
-                    refRenderPassPtr = refRenderPass.get();
-                    testData.renderPassId.insert(std::pair<CCRenderPass*, char>(refRenderPass.get(), newRenderPassId));
-                    testData.renderPassCache.insert(std::pair<char, RenderPassCacheEntry>(newRenderPassId, RenderPassCacheEntry(refRenderPass.release())));
-                } else
-                    refRenderPassPtr = testData.renderPassCache[newRenderPassId].renderPass;
+                    OwnPtr<CCRenderPass> renderPass = createDummyRenderPass(testData, newRenderPassId);
+                    testData.renderPassCache.insert(std::pair<char, RenderPassCacheEntry>(newRenderPassId, RenderPassCacheEntry(renderPass.release())));
+                }
 
                 IntRect quadRect = IntRect(0, 0, 1, 1);
                 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRect();
-                OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create(testData.sharedQuadState.get(), quadRect, refRenderPassPtr, isReplica, WebKit::WebTransformationMatrix(), WebKit::WebFilterOperations(), WebKit::WebFilterOperations(), 1, contentsChangedRect);
+                OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, WebKit::WebTransformationMatrix(), WebKit::WebFilterOperations(), WebKit::WebFilterOperations(), 1, contentsChangedRect);
                 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(quad.release());
             }
         }
-        testData.renderPasses.insert(0, renderPass.release());
+        testData.renderPasses.insert(0, renderPass.get());
+        testData.renderPassesById.add(renderPass->id(), renderPass.release());
         if (*currentChar)
             currentChar++;
     }
@@ -3050,9 +3056,8 @@
 {
     char* pos = buffer;
     for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbegin(); it != testData.renderPasses.rend(); ++it) {
-        CCRenderPass* currentPass = it->get();
-        char passId = testData.renderPassId.find(currentPass)->second;
-        *pos = passId;
+        const CCRenderPass* currentPass = *it;
+        *pos = currentPass->id();
         pos++;
 
         CCQuadList::const_iterator quadListIterator = currentPass->quadList().begin();
@@ -3063,14 +3068,10 @@
                 *pos = 's';
                 pos++;
                 break;
-            case CCDrawQuad::RenderPass: {
-                CCRenderPassDrawQuad* renderPassDrawQuad = static_cast<CCRenderPassDrawQuad*>(currentQuad);
-                const CCRenderPass* refPass = renderPassDrawQuad->renderPass();
-                char refPassId = testData.renderPassId.find(refPass)->second;
-                *pos = refPassId;
+            case CCDrawQuad::RenderPass:
+                *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPassId();
                 pos++;
                 break;
-            }
             default:
                 *pos = 'x';
                 pos++;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to