void AssetManager::runFrame() { SCOPE_LOCK; AX_ASSERT(m_frameId < std::numeric_limits<int>::max()); m_frameId++; // TODO: free old asset for (int i = 0; i < Asset::MAX_TYPES; i++) { Data* d = m_datas[i]; if (!d) { continue; } if (d->poolHint == AssetFactory::Immortal) { continue; } #if 0 if (d->poolHint == AssetFactory::Pooled) { } #endif AssetList::iterator it = d->assetNotRefed.begin(); while (it != d->assetNotRefed.end()) { Asset* asset = *it; if (asset->getRefCount()) { it = d->assetNotRefed.erase(it); asset->m_isInDeleteList = false; continue; } if (asset->m_frameId < m_frameId - 2) { d->assetDict.erase(asset->m_key); it = d->assetNotRefed.erase(it); d->factory->destroy(asset); } else { ++it; } } } }