Index: cc/CCPrioritizedTextureManager.cpp |
diff --git a/cc/CCPrioritizedTextureManager.cpp b/cc/CCPrioritizedTextureManager.cpp |
index 3089d00a913a7076650853020184c9613b8f9553..00d06897cc77f92b8618b15d13bf0d0516eaa84f 100644 |
--- a/cc/CCPrioritizedTextureManager.cpp |
+++ b/cc/CCPrioritizedTextureManager.cpp |
@@ -228,6 +228,8 @@ void CCPrioritizedTextureManager::reduceMemory(CCResourceProvider* resourceProvi |
void CCPrioritizedTextureManager::clearAllMemory(CCResourceProvider* resourceProvider) |
{ |
+ ASSERT(CCProxy::isImplThread() && CCProxy::isMainThreadBlocked()); |
+ ASSERT(resourceProvider); |
// Unlink and destroy all backing textures. |
while (m_backings.size() > 0) { |
BackingSet::iterator it = m_backings.begin(); |
@@ -237,12 +239,24 @@ void CCPrioritizedTextureManager::clearAllMemory(CCResourceProvider* resourcePro |
} |
} |
-void CCPrioritizedTextureManager::allBackingTexturesWereDeleted() |
+void CCPrioritizedTextureManager::unlinkAllBackings() |
+{ |
+ ASSERT(CCProxy::isMainThread()); |
+ for (BackingSet::iterator it = m_backings.begin(); it != m_backings.end(); ++it) |
+ if ((*it)->owner()) |
+ (*it)->owner()->unlink(); |
+} |
+ |
+void CCPrioritizedTextureManager::deleteAllUnlinkedBackings() |
{ |
- // Same as clearAllMemory, except all our textures were already |
- // deleted externally, so we don't delete them. Passing no |
- // resourceProvider results in leaking the (now invalid) texture ids. |
- clearAllMemory(0); |
+ ASSERT(CCProxy::isImplThread() && CCProxy::isMainThreadBlocked()); |
+ BackingVector backingsToDelete; |
+ for (BackingSet::iterator it = m_backings.begin(); it != m_backings.end(); ++it) |
+ if (!(*it)->owner()) |
+ backingsToDelete.append((*it)); |
+ |
+ for (BackingVector::iterator it = backingsToDelete.begin(); it != backingsToDelete.end(); ++it) |
+ destroyBacking((*it), 0); |
} |
void CCPrioritizedTextureManager::registerTexture(CCPrioritizedTexture* texture) |