diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index c676949b9882a02fbde6b9dcf2b7438a16a22a68..1a39a1b98a487ea52576d050cdb352740246b727 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -580,7 +580,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if(update_cache) { - objectp = regionp->updateCacheEntry(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 diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index f593809c5c209bc5a6a8e943e32e3f47e6c932b0..c6a10737a0ec0665afc34a7f3059b42bfa837d7d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1816,8 +1816,13 @@ LLViewerObject* LLViewerRegion::addNewObject(LLVOCacheEntry* entry) //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) +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) { @@ -1829,8 +1834,11 @@ LLViewerObject* LLViewerRegion::updateCacheEntry(U32 local_id, LLViewerObject* o objectp = addNewObject(entry); } - //remove from cache. - killCacheEntry(entry, true); + //remove from cache if terse update + if(update_type == (U32)OUT_TERSE_IMPROVED) + { + killCacheEntry(entry, true); + } return objectp; } diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 151071a478e7c052f2f248275abc2772a7079f63..da947a9fc1af9f18b9c72f3fdc3f9bcd2a2ddefb 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -362,7 +362,7 @@ class LLViewerRegion final : public LLCapabilityProvider // implements this inte void requestCacheMisses(); void addCacheMissFull(const U32 local_id); //update object cache if the object receives a full-update or terse update - LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp); + LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp, U32 update_type); void findOrphans(U32 parent_id); void clearCachedVisibleObjects(); void dumpCache();