summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorandreykproductengine <andreykproductengine@lindenlab.com>2017-10-23 17:28:18 +0300
committerandreykproductengine <andreykproductengine@lindenlab.com>2017-10-23 17:28:18 +0300
commit76c7eb73109189871044ff7b19235af33d205bd3 (patch)
treec8ed17f857829f05347159877e99e2058e8c86c6 /indra/newview
parent7697f7f9a651766cd7b3e88824dd546e66e3499b (diff)
Backed out changeset: bfa432c3c7d5 (SL-775)
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/lltexturecache.cpp96
-rw-r--r--indra/newview/lltexturecache.h3
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;