summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerregion.h
diff options
context:
space:
mode:
authorXiaohong Bao <bao@lindenlab.com>2013-02-28 22:49:05 -0700
committerXiaohong Bao <bao@lindenlab.com>2013-02-28 22:49:05 -0700
commitbd60fdbe44d9f996686d31cf48a3f2ca664dd301 (patch)
tree45ef35b52504e9b9788ba19725b38b10257a296c /indra/newview/llviewerregion.h
parent8144fa95701122f24c36b8ae2a51a5ce720614a6 (diff)
for SH-3824: interesting: Ensure viewer can handle object updates from entire region gracefully
Diffstat (limited to 'indra/newview/llviewerregion.h')
-rw-r--r--indra/newview/llviewerregion.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index de14c0fe27..6da8c191a4 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -317,6 +317,7 @@ public:
} eCacheUpdateResult;
// handle a full update message
+ eCacheUpdateResult cacheFullUpdate(LLDataPackerBinaryBuffer &dp);
eCacheUpdateResult cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp);
LLVOCacheEntry* getCacheEntryForOctree(U32 local_id);
bool probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss_type);
@@ -347,7 +348,7 @@ public:
void getNeighboringRegionsStatus( std::vector<S32>& regions );
private:
- void addToVOCacheTree(LLVOCacheEntry* entry);
+ void addToVOCacheTree(LLVOCacheEntry* entry, bool forced = false);
LLViewerObject* addNewObject(LLVOCacheEntry* entry);
void killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& delete_list);
LLVOCacheEntry* getCacheEntry(U32 local_id);
@@ -360,6 +361,7 @@ private:
F32 updateVisibleEntries(F32 max_time); //update visible entries
void addCacheMiss(U32 id, LLViewerRegion::eCacheMissType miss_type, F32 weight);
+ void postProcesNewEntry(LLVOCacheEntry* entry);
public:
struct CompareDistance
{
@@ -445,6 +447,21 @@ private:
BOOL mReleaseNotesRequested;
BOOL mDead; //if true, this region is in the process of deleting.
+ class OrphanList
+ {
+ public:
+ OrphanList(){}
+ OrphanList(U32 child_id){addChild(child_id);}
+
+ void addChild(U32 child_id) {mChildList.insert(child_id);}
+ std::set<U32>* getChildList() {return &mChildList;}
+
+ private:
+ std::set<U32> mChildList;
+ };
+
+ std::map<U32, OrphanList> mOrphanMap;
+
class CacheMissItem
{
public: