Automated merge with http://bitbucket.org/lindenlab/viewer-interesting
commit
7e17824f61
|
|
@ -458,7 +458,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
|||
LLTimer update_timer;
|
||||
BOOL justCreated = FALSE;
|
||||
S32 msg_size = 0;
|
||||
bool remove_from_cache = false; //remove from object cache if it is a full-update or terse update
|
||||
bool update_cache = false; //update object cache if it is a full-update or terse update
|
||||
|
||||
if (compressed)
|
||||
{
|
||||
|
|
@ -486,9 +486,9 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
|||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
else //OUT_TERSE_IMPROVED
|
||||
{
|
||||
remove_from_cache = true;
|
||||
update_cache = true;
|
||||
compressed_dp.unpackU32(local_id, "LocalID");
|
||||
getUUIDFromLocal(fullid,
|
||||
local_id,
|
||||
|
|
@ -518,7 +518,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
|||
}
|
||||
else // OUT_FULL only?
|
||||
{
|
||||
remove_from_cache = true;
|
||||
update_cache = true;
|
||||
mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i);
|
||||
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
|
||||
msg_size += sizeof(LLUUID);
|
||||
|
|
@ -527,9 +527,9 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
|||
}
|
||||
objectp = findObject(fullid);
|
||||
|
||||
if(remove_from_cache)
|
||||
if(update_cache)
|
||||
{
|
||||
objectp = regionp->forceToRemoveFromCache(local_id, objectp);
|
||||
objectp = regionp->updateCacheEntry(local_id, objectp, update_type);
|
||||
}
|
||||
|
||||
// This looks like it will break if the local_id of the object doesn't change
|
||||
|
|
|
|||
|
|
@ -1535,9 +1535,15 @@ LLViewerObject* LLViewerRegion::addNewObject(LLVOCacheEntry* entry)
|
|||
return obj;
|
||||
}
|
||||
|
||||
//remove from object cache if the object receives a full-update or terse update
|
||||
LLViewerObject* LLViewerRegion::forceToRemoveFromCache(U32 local_id, LLViewerObject* objectp)
|
||||
//update object cache if the object receives a full-update or terse update
|
||||
//update_type == EObjectUpdateType::OUT_TERSE_IMPROVED or EObjectUpdateType::OUT_FULL
|
||||
LLViewerObject* LLViewerRegion::updateCacheEntry(U32 local_id, LLViewerObject* objectp, U32 update_type)
|
||||
{
|
||||
if(objectp && update_type != (U32)OUT_TERSE_IMPROVED)
|
||||
{
|
||||
return objectp; //no need to access cache
|
||||
}
|
||||
|
||||
LLVOCacheEntry* entry = getCacheEntry(local_id);
|
||||
if (!entry)
|
||||
{
|
||||
|
|
@ -1545,14 +1551,15 @@ LLViewerObject* LLViewerRegion::forceToRemoveFromCache(U32 local_id, LLViewerObj
|
|||
}
|
||||
if(!objectp) //object not created
|
||||
{
|
||||
entry->setTouched(FALSE); //mark this entry invalid
|
||||
|
||||
//create a new object before delete it from cache.
|
||||
//create a new object from cache.
|
||||
objectp = gObjectList.processObjectUpdateFromCache(entry, this);
|
||||
}
|
||||
|
||||
//remove from cache.
|
||||
killCacheEntry(entry);
|
||||
//remove from cache if terse update
|
||||
if(update_type == (U32)OUT_TERSE_IMPROVED)
|
||||
{
|
||||
killCacheEntry(entry);
|
||||
}
|
||||
|
||||
return objectp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -335,8 +335,8 @@ public:
|
|||
bool probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss_type);
|
||||
void requestCacheMisses();
|
||||
void addCacheMissFull(const U32 local_id);
|
||||
//remove from object cache if the object receives a full-update or terse update
|
||||
LLViewerObject* forceToRemoveFromCache(U32 local_id, LLViewerObject* objectp);
|
||||
//update object cache if the object receives a full-update or terse update
|
||||
LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp, U32 update_type);
|
||||
void findOrphans(U32 parent_id);
|
||||
void clearCachedVisibleObjects();
|
||||
void dumpCache();
|
||||
|
|
|
|||
Loading…
Reference in New Issue