From 76c7eb73109189871044ff7b19235af33d205bd3 Mon Sep 17 00:00:00 2001
From: andreykproductengine <andreykproductengine@lindenlab.com>
Date: Mon, 23 Oct 2017 17:28:18 +0300
Subject: [PATCH] Backed out changeset: bfa432c3c7d5 (SL-775)

---
 indra/newview/lltexturecache.cpp | 96 ++------------------------------
 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 7c88cdaf9ff..062ee378640 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 bcc27c65985..95f9afc2bc7 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -155,7 +155,6 @@ class LLTextureCache : public LLWorkerThread
 	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 @@ class LLTextureCache : public LLWorkerThread
 
 	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;
-- 
GitLab