--- \cv_1.22.11.0_9\linden\indra\newview\lltexturecache.h 2009-03-11 17:46:01.000000000 +0100 +++ linden\indra\newview\lltexturecache.h 2009-06-03 13:12:53.583500000 +0200 @@ -122,6 +122,7 @@ void readHeaderCache(apr_pool_t* poolp = NULL); void purgeAllTextures(bool purge_directories); void purgeTextures(bool validate); + void purgeTextureFilesTimeSliced(BOOL force_all = FALSE); // VWR-3878 - NB S32 getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize = NULL); bool removeHeaderCacheEntry(const LLUUID& id); void lockHeaders() { mHeaderMutex.lock(); } @@ -143,7 +144,13 @@ typedef std::vector, bool> > responder_list_t; responder_list_t mCompletedList; - + + // START VWR-3878 - NB + typedef std::list filename_list_t; + filename_list_t mFilesToDelete; + LLTimer mTimeLastFileDelete; + // END VWR-3878 - NB + BOOL mReadOnly; // Entries --- \cv_1.22.11.0_9\linden\indra\newview\lltexturecache.cpp 2009-05-24 09:50:50.000000000 +0200 +++ linden\indra\newview\lltexturecache.cpp 2009-06-03 13:26:02.255375000 +0200 @@ -892,6 +892,8 @@ LLTextureCache::~LLTextureCache() { + purgeTextureFilesTimeSliced(TRUE); // VWR-3878 - NB - force-flush all pending file deletes + apr_pool_destroy(mFileAPRPool); } @@ -1196,7 +1198,7 @@ return; } - LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL; + LL_INFOS("TextureCache") << "TEXTURE CACHE: Reading " << num_entries << " Entries..." << LL_ENDL; // VWR-3878 - NB std::map entry_idx_map; S64 total_size = 0; @@ -1225,7 +1227,7 @@ LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL; } - S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10; + S64 min_cache_size = sCacheMaxTexturesSize * 95 / 100 ; // VWR-3878 - NB S32 purge_count = 0; S32 next_idx = 0; for (S32 idx=0; idx max_time_per_pass) + { + break; + } + } + + if (!mFilesToDelete.empty()) + { + LL_INFOS("TEXTURE CACHE") << "purging time sliced with " << howmany << " files deleted (" + << mFilesToDelete.size() << " files left for next pass)" + << llendl; + } + + mTimeLastFileDelete.reset(); +} + + ////////////////////////////////////////////////////////////////////////////// // call lockWorkers() first! @@ -1471,6 +1528,9 @@ purgeTextures(false); mDoPurge = FALSE; } + + purgeTextureFilesTimeSliced(); // VWR-3878 - NB - purge textures from cache in a non-hiccup-way + LLMutexLock lock(&mWorkersMutex); llassert_always(imagesize > 0); LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,