diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/lltexturecache.cpp | 96 | ||||
-rw-r--r-- | indra/newview/lltexturecache.h | 3 |
2 files changed, 5 insertions, 94 deletions
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 7c88cdaf9f..062ee37864 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -53,7 +53,6 @@ const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate) const S32 TEXTURE_FAST_CACHE_ENTRY_OVERHEAD = sizeof(S32) * 4; //w, h, c, level const S32 TEXTURE_FAST_CACHE_ENTRY_SIZE = 16 * 16 * 4 + TEXTURE_FAST_CACHE_ENTRY_OVERHEAD; -const F32 TEXTURE_LAZY_PURGE_TIME_LIMIT = .01f; // 10ms class LLTextureCacheWorker : public LLWorkerClass { @@ -1635,92 +1634,6 @@ void LLTextureCache::purgeAllTextures(bool purge_directories) LL_INFOS() << "The entire texture cache is cleared." << LL_ENDL ; } -void LLTextureCache::purgeTexturesLazy(F32 time_limit) -{ - if (mReadOnly) - { - return; - } - - if (!mThreaded) - { - // *FIX:Mani - watchdog off. - LLAppViewer::instance()->pauseMainloopTimeout(); - } - - // time_limit doesn't account for lock time - LLMutexLock lock(&mHeaderMutex); - - if (mPurgeEntryList.empty()) - { - // Read the entries list and form list of textures to purge - std::vector<Entry> entries; - U32 num_entries = openAndReadEntries(entries); - if (!num_entries) - { - return; // nothing to purge - } - - // Use mTexturesSizeMap to collect UUIDs of textures with bodies - typedef std::set<std::pair<U32, S32> > time_idx_set_t; - std::set<std::pair<U32, S32> > time_idx_set; - for (size_map_t::iterator iter1 = mTexturesSizeMap.begin(); - iter1 != mTexturesSizeMap.end(); ++iter1) - { - if (iter1->second > 0) - { - id_map_t::iterator iter2 = mHeaderIDMap.find(iter1->first); - if (iter2 != mHeaderIDMap.end()) - { - S32 idx = iter2->second; - time_idx_set.insert(std::make_pair(entries[idx].mTime, idx)); - } - else - { - LL_ERRS() << "mTexturesSizeMap / mHeaderIDMap corrupted." << LL_ENDL; - } - } - } - - S64 cache_size = mTexturesSizeTotal; - S64 purged_cache_size = (sCacheMaxTexturesSize * (S64)((1.f - TEXTURE_CACHE_PURGE_AMOUNT) * 100)) / 100; - for (time_idx_set_t::iterator iter = time_idx_set.begin(); - iter != time_idx_set.end(); ++iter) - { - S32 idx = iter->second; - if (cache_size >= purged_cache_size) - { - cache_size -= entries[idx].mBodySize; - mPurgeEntryList.push_back(std::pair<S32, Entry>(idx, entries[idx])); - } - else - { - break; - } - } - LL_DEBUGS() << "Formed Purge list of " << mPurgeEntryList.size() << " entries" << LL_ENDL; - } - else - { - // Remove collected entried - LLTimer timer; - while (!mPurgeEntryList.empty() && timer.getElapsedTimeF32() < time_limit) - { - S32 idx = mPurgeEntryList.back().first; - Entry entry = mPurgeEntryList.back().second; - mPurgeEntryList.pop_back(); - // make sure record is still valid - id_map_t::iterator iter_header = mHeaderIDMap.find(entry.mID); - if (iter_header != mHeaderIDMap.end() && iter_header->second == idx) - { - std::string tex_filename = getTextureFileName(entry.mID); - removeEntry(idx, entry, tex_filename); - writeEntryToHeaderImmediately(idx, entry); - } - } - } -} - void LLTextureCache::purgeTextures(bool validate) { if (mReadOnly) @@ -1980,10 +1893,11 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio } if (mDoPurge) { - // NOTE: Needs to be done on the control thread - // (i.e. here) - purgeTexturesLazy(TEXTURE_LAZY_PURGE_TIME_LIMIT); - mDoPurge = !mPurgeEntryList.empty(); + // NOTE: This may cause an occasional hiccup, + // but it really needs to be done on the control thread + // (i.e. here) + purgeTextures(false); + mDoPurge = FALSE; } LLMutexLock lock(&mWorkersMutex); LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id, diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index bcc27c6598..95f9afc2bc 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -155,7 +155,6 @@ private: void readHeaderCache(); void clearCorruptedCache(); void purgeAllTextures(bool purge_directories); - void purgeTexturesLazy(F32 time_limit); void purgeTextures(bool validate); LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset); void closeHeaderEntriesFile(); @@ -226,8 +225,6 @@ private: typedef std::map<S32, Entry> idx_entry_map_t; idx_entry_map_t mUpdatedEntryMap; - typedef std::vector<std::pair<S32, Entry> > idx_entry_vector_t; - idx_entry_vector_t mPurgeEntryList; // Statics static F32 sHeaderCacheVersion; |