// 割り当て可能なメモリ量 if (strategy == MaximalPrune) // 強制削除なら全削除 capacity = 0; if (!m_liveSize || (capacity && m_liveSize <= capacity)) return; size_t targetSize = static_cast<size_t>(capacity * cTargetPrunePercentage); for (int priority = MemoryCacheLiveResourcePriorityLow; priority <= MemoryCacheLiveResourcePriorityHigh; ++priority) { MemoryCacheEntry* current = m_liveDecodedResources[priority].m_tail; while (current) { MemoryCacheEntry* previous = current->m_previousInLiveResourcesList; ASSERT(current->m_resource->hasClients()); if (current->m_resource->isLoaded() && current->m_resource->decodedSize()) { double elapsedTime = m_pruneFrameTimeStamp - current->m_lastDecodedAccessTime; if (strategy == AutomaticPrune && elapsedTime < m_delayBeforeLiveDecodedPrune) return; current->m_resource->prune(); if (targetSize && m_liveSize <= targetSize) return; } current = previous; } } } 7