aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/lltexturecache.cpp22
1 files changed, 9 insertions, 13 deletions
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index b0d8412..ae0a63f 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -1172,7 +1172,7 @@ void LLTextureCache::readHeaderCache()
1172 U32 empty_entries = 0; 1172 U32 empty_entries = 0;
1173 typedef std::pair<U32, LLUUID> lru_data_t; 1173 typedef std::pair<U32, LLUUID> lru_data_t;
1174 std::set<lru_data_t> lru; 1174 std::set<lru_data_t> lru;
1175 std::vector<LLUUID> purge_list; 1175 std::set<LLUUID> purge_list;
1176 for (U32 i=0; i<num_entries; i++) 1176 for (U32 i=0; i<num_entries; i++)
1177 { 1177 {
1178 Entry& entry = entries[i]; 1178 Entry& entry = entries[i];
@@ -1191,27 +1191,23 @@ void LLTextureCache::readHeaderCache()
1191 { 1191 {
1192 // Shouldn't happen, failsafe only 1192 // Shouldn't happen, failsafe only
1193 llwarns << "Bad entry: " << i << ": " << entry.mID << ": BodySize: " << entry.mBodySize << llendl; 1193 llwarns << "Bad entry: " << i << ": " << entry.mID << ": BodySize: " << entry.mBodySize << llendl;
1194 purge_list.push_back(id); 1194 purge_list.insert(id);
1195 } 1195 }
1196 } 1196 }
1197 } 1197 }
1198 } 1198 }
1199 if (num_entries > sCacheMaxEntries) 1199 if (num_entries - empty_entries > sCacheMaxEntries)
1200 { 1200 {
1201 // Special case: cache size was reduced, need to remove entries 1201 // Special case: cache size was reduced, need to remove entries
1202 // Note: After we prune entries, we will call this again and create the LRU 1202 // Note: After we prune entries, we will call this again and create the LRU
1203 U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries; 1203 U32 entries_to_purge = (num_entries - empty_entries) - sCacheMaxEntries;
1204 llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl; 1204 llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl;
1205 if (entries_to_purge > 0) 1205 // We can exit the following loop with the given condition, since if we'd reach the end of the lru set we'd have:
1206 // purge_list.size() = lru.size() = num_entries - empty_entries = entries_to_purge + sCacheMaxEntries >= entries_to_purge
1207 for (std::set<lru_data_t>::iterator iter = lru.begin(); purge_list.size() < entries_to_purge; ++iter)
1206 { 1208 {
1207 for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) 1209 purge_list.insert(iter->second);
1208 {
1209 purge_list.push_back(iter->second);
1210 if (purge_list.size() >= entries_to_purge)
1211 break;
1212 }
1213 } 1210 }
1214 llassert_always(purge_list.size() >= entries_to_purge);
1215 } 1211 }
1216 else 1212 else
1217 { 1213 {
@@ -1227,7 +1223,7 @@ void LLTextureCache::readHeaderCache()
1227 1223
1228 if (purge_list.size() > 0) 1224 if (purge_list.size() > 0)
1229 { 1225 {
1230 for (std::vector<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter) 1226 for (std::set<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
1231 { 1227 {
1232 mHeaderMutex.unlock(); 1228 mHeaderMutex.unlock();
1233 removeFromCache(*iter); 1229 removeFromCache(*iter);