| Index: cc/CCLayerTreeHostImpl.cpp
|
| diff --git a/cc/CCLayerTreeHostImpl.cpp b/cc/CCLayerTreeHostImpl.cpp
|
| index 93c9dd301d22bb4604076e1e7d91695daf00b883..ca659bcc55371d9035a8c82adbed431071b478ca 100644
|
| --- a/cc/CCLayerTreeHostImpl.cpp
|
| +++ b/cc/CCLayerTreeHostImpl.cpp
|
| @@ -30,6 +30,7 @@
|
| #include "CCSingleThreadProxy.h"
|
| #include "TraceEvent.h"
|
| #include <wtf/CurrentTime.h>
|
| +#include <algorithm>
|
|
|
| using WebKit::WebTransformationMatrix;
|
|
|
| @@ -252,7 +253,7 @@ void CCLayerTreeHostImpl::calculateRenderSurfaceLayerList(CCLayerList& renderSur
|
| void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> renderPass)
|
| {
|
| CCRenderPass* pass = renderPass.get();
|
| - renderPasses.append(pass);
|
| + renderPasses.push_back(pass);
|
| renderPassesById.set(pass->id(), renderPass.Pass());
|
| }
|
|
|
| @@ -343,8 +344,8 @@ bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
|
| #endif
|
|
|
| if (!m_hasTransparentBackground) {
|
| - frame.renderPasses.last()->setHasTransparentBackground(false);
|
| - frame.renderPasses.last()->appendQuadsToFillScreen(m_rootLayerImpl.get(), m_backgroundColor, occlusionTracker);
|
| + frame.renderPasses.back()->setHasTransparentBackground(false);
|
| + frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get(), m_backgroundColor, occlusionTracker);
|
| }
|
|
|
| if (drawFrame)
|
| @@ -413,14 +414,16 @@ static inline CCRenderPass* findRenderPassById(CCRenderPass::Id renderPassId, co
|
| static void removeRenderPassesRecursive(CCRenderPass::Id removeRenderPassId, CCLayerTreeHostImpl::FrameData& frame)
|
| {
|
| CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame);
|
| - size_t removeIndex = frame.renderPasses.find(removeRenderPass);
|
| + CCRenderPassList& renderPasses = frame.renderPasses;
|
| + CCRenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPasses.end(), removeRenderPass);
|
|
|
| // The pass was already removed by another quad - probably the original, and we are the replica.
|
| - if (removeIndex == notFound)
|
| + if (toRemove == renderPasses.end())
|
| return;
|
|
|
| + size_t removeIndex = std::distance(renderPasses.begin(), toRemove);
|
| const CCRenderPass* removedPass = frame.renderPasses[removeIndex];
|
| - frame.renderPasses.remove(removeIndex);
|
| + frame.renderPasses.erase(toRemove);
|
|
|
| // Now follow up for all RenderPass quads and remove their RenderPasses recursively.
|
| const CCQuadList& quadList = removedPass->quadList();
|
| @@ -443,9 +446,11 @@ bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender
|
| bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(const CCRenderPassDrawQuad& quad, const FrameData& frame) const
|
| {
|
| const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame);
|
| - size_t passIndex = frame.renderPasses.find(renderPass);
|
| + const CCRenderPassList& renderPasses = frame.renderPasses;
|
| + CCRenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), renderPasses.end(), renderPass);
|
|
|
| - bool renderPassAlreadyRemoved = passIndex == notFound;
|
| + size_t passIndex = std::distance(renderPasses.begin(), foundPass);
|
| + bool renderPassAlreadyRemoved = foundPass == renderPasses.end();
|
| if (renderPassAlreadyRemoved)
|
| return false;
|
|
|
| @@ -458,7 +463,8 @@ bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co
|
| return false;
|
|
|
| const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDrawQuad::materialCast(currentQuad)->renderPassId(), frame);
|
| - if (frame.renderPasses.contains(contributingPass))
|
| + CCRenderPassList::const_iterator foundContributingPass = std::find(renderPasses.begin(), renderPasses.end(), contributingPass);
|
| + if (foundContributingPass != renderPasses.end())
|
| return false;
|
| }
|
| return true;
|
|
|