diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-10-23 17:28:18 +0300 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-10-23 17:28:18 +0300 | 
| commit | 76c7eb73109189871044ff7b19235af33d205bd3 (patch) | |
| tree | c8ed17f857829f05347159877e99e2058e8c86c6 | |
| parent | 7697f7f9a651766cd7b3e88824dd546e66e3499b (diff) | |
Backed out changeset: bfa432c3c7d5 (SL-775)
| -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; | 
