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++;