diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llagent.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llappviewer.cpp | 8 | ||||
-rw-r--r-- | indra/newview/lldrawable.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llflexibleobject.cpp | 15 | ||||
-rw-r--r-- | indra/newview/llglsandbox.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llviewerobject.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llviewerobjectlist.cpp | 171 | ||||
-rw-r--r-- | indra/newview/llviewerobjectlist.h | 31 | ||||
-rw-r--r-- | indra/newview/llviewerwindow.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llvoclouds.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llvotextbubble.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llvovolume.cpp | 17 | ||||
-rw-r--r-- | indra/newview/llworld.cpp | 3 | ||||
-rw-r--r-- | indra/newview/pipeline.cpp | 64 | ||||
-rw-r--r-- | indra/newview/pipeline.h | 5 |
15 files changed, 173 insertions, 185 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index afd9d7b3f9..3675be16e9 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3018,9 +3018,6 @@ void LLAgent::endAnimationUpdateUI() //----------------------------------------------------------------------------- void LLAgent::updateCamera() { - static LLFastTimer::DeclareTimer ftm("Camera"); - LLFastTimer t(ftm); - //Ventrella - changed camera_skyward to the new global "mCameraUpVector" mCameraUpVector = LLVector3::z_axis; //LLVector3 camera_skyward(0.f, 0.f, 1.f); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 948d38befb..00a9e4d745 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3593,15 +3593,13 @@ void LLAppViewer::idle() { // Handle pending gesture processing - static LLFastTimer::DeclareTimer ftm("Agent Position"); - LLFastTimer t(ftm); LLGestureManager::instance().update(); gAgent.updateAgentPosition(gFrameDTClamped, yaw, current_mouse.mX, current_mouse.mY); } { - LLFastTimer t(FTM_OBJECTLIST_UPDATE); + LLFastTimer t(FTM_OBJECTLIST_UPDATE); // Actually "object update" if (!(logoutRequestSent() && hasSavedFinalSnapshot())) { @@ -3635,8 +3633,6 @@ void LLAppViewer::idle() // { - static LLFastTimer::DeclareTimer ftm("HUD Effects"); - LLFastTimer t(ftm); LLSelectMgr::getInstance()->updateEffects(); LLHUDManager::getInstance()->cleanupEffects(); LLHUDManager::getInstance()->sendEffects(); @@ -3893,7 +3889,7 @@ void LLAppViewer::sendLogoutRequest() static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME; #endif -static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Idle Network"); +static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Network"); void LLAppViewer::idleNetwork() { diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 38eda5bd2e..9fbc3408d7 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -386,6 +386,8 @@ void LLDrawable::makeActive() mParent->makeActive(); } + gPipeline.setActive(this, TRUE); + //all child objects must also be active llassert_always(mVObjp); @@ -432,6 +434,7 @@ void LLDrawable::makeStatic(BOOL warning_enabled) if (isState(ACTIVE)) { clearState(ACTIVE); + gPipeline.setActive(this, FALSE); if (mParent.notNull() && mParent->isActive() && warning_enabled) { diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 561965d021..aea2de8e92 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -51,9 +51,6 @@ /*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f; -static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild"); -static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update"); - // LLFlexibleObjectData::pack/unpack now in llprimitive.cpp //----------------------------------------------- @@ -197,6 +194,7 @@ void LLVolumeImplFlexible::remapSections(LLFlexibleObjectSection *source, S32 so } } + //----------------------------------------------------------------------------- void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale) { @@ -365,7 +363,6 @@ inline S32 log2(S32 x) void LLVolumeImplFlexible::doFlexibleUpdate() { - LLFastTimer ftm(FTM_DO_FLEXIBLE_UPDATE); LLVolume* volume = mVO->getVolume(); LLPath *path = &volume->getPath(); if (mSimulateRes == 0) @@ -696,10 +693,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) } volume->updateRelativeXform(); - { - LLFastTimer t(FTM_DO_FLEXIBLE_UPDATE); - doFlexibleUpdate(); - } + doFlexibleUpdate(); // Object may have been rotated, which means it needs a rebuild. See SL-47220 BOOL rotated = FALSE; @@ -716,10 +710,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) volume->regenFaces(); volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME); volume->dirtySpatialGroup(); - { - LLFastTimer t(FTM_FLEXIBLE_REBUILD); - doFlexibleRebuild(); - } + doFlexibleRebuild(); volume->genBBoxes(isVolumeGlobal()); } else if (!mUpdated || rotated) diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 8569e208eb..750a9d478f 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -897,21 +897,19 @@ void LLViewerObjectList::renderObjectBeacons() S32 last_line_width = -1; // gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width) - BOOL flush = FALSE; - for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter) + for (S32 i = 0; i < mDebugBeacons.count(); i++) { - const LLDebugBeacon &debug_beacon = *iter; + const LLDebugBeacon &debug_beacon = mDebugBeacons[i]; LLColor4 color = debug_beacon.mColor; color.mV[3] *= 0.25f; S32 line_width = debug_beacon.mLineWidth; if (line_width != last_line_width) { - if (flush) + if (i > 0) { gGL.end(); + gGL.flush(); } - flush = TRUE; - gGL.flush(); glLineWidth( (F32)line_width ); last_line_width = line_width; gGL.begin(LLRender::LINES); @@ -938,20 +936,18 @@ void LLViewerObjectList::renderObjectBeacons() S32 last_line_width = -1; // gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width) - BOOL flush = FALSE; - for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter) + for (S32 i = 0; i < mDebugBeacons.count(); i++) { - const LLDebugBeacon &debug_beacon = *iter; + const LLDebugBeacon &debug_beacon = mDebugBeacons[i]; S32 line_width = debug_beacon.mLineWidth; if (line_width != last_line_width) { - if (flush) + if (i > 0) { gGL.end(); + gGL.flush(); } - flush = TRUE; - gGL.flush(); glLineWidth( (F32)line_width ); last_line_width = line_width; gGL.begin(LLRender::LINES); @@ -973,9 +969,9 @@ void LLViewerObjectList::renderObjectBeacons() gGL.flush(); glLineWidth(1.f); - for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter) + for (S32 i = 0; i < mDebugBeacons.count(); i++) { - LLDebugBeacon &debug_beacon = *iter; + LLDebugBeacon &debug_beacon = mDebugBeacons[i]; if (debug_beacon.mString == "") { continue; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index b5642d07a5..d0afa9d9de 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2001,9 +2001,6 @@ BOOL LLViewerObject::isActive() const BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) { - static LLFastTimer::DeclareTimer ftm("Viewer Object"); - LLFastTimer t(ftm); - if (mDead) { // It's dead. Don't update it. diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 6347090f71..96828ee1b6 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -93,7 +93,7 @@ extern LLPipeline gPipeline; // Statics for object lookup tables. U32 LLViewerObjectList::sSimulatorMachineIndex = 1; // Not zero deliberately, to speed up index check. -std::map<U64, U32> LLViewerObjectList::sIPAndPortToIndex; +LLMap<U64, U32> LLViewerObjectList::sIPAndPortToIndex; std::map<U64, LLUUID> LLViewerObjectList::sIndexAndLocalIDToUUID; LLViewerObjectList::LLViewerObjectList() @@ -571,9 +571,10 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys, void LLViewerObjectList::dirtyAllObjectInventory() { - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + S32 count = mObjects.count(); + for(S32 i = 0; i < count; ++i) { - (*iter)->dirtyInventory(); + mObjects[i]->dirtyInventory(); } } @@ -586,14 +587,14 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) S32 num_updates, max_value; if (NUM_BINS - 1 == mCurBin) { - num_updates = (S32) mObjects.size() - mCurLazyUpdateIndex; - max_value = (S32) mObjects.size(); + num_updates = mObjects.count() - mCurLazyUpdateIndex; + max_value = mObjects.count(); gTextureList.setUpdateStats(TRUE); } else { - num_updates = ((S32) mObjects.size() / NUM_BINS) + 1; - max_value = llmin((S32) mObjects.size(), mCurLazyUpdateIndex + num_updates); + num_updates = (mObjects.count() / NUM_BINS) + 1; + max_value = llmin(mObjects.count(), mCurLazyUpdateIndex + num_updates); } @@ -646,7 +647,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) } mCurLazyUpdateIndex = max_value; - if (mCurLazyUpdateIndex == mObjects.size()) + if (mCurLazyUpdateIndex == mObjects.count()) { mCurLazyUpdateIndex = 0; } @@ -693,26 +694,20 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world) // Make a copy of the list in case something in idleUpdate() messes with it std::vector<LLViewerObject*> idle_list; - - static LLFastTimer::DeclareTimer idle_copy("Idle Copy"); + idle_list.reserve( mActiveObjects.size() ); + for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin(); + active_iter != mActiveObjects.end(); active_iter++) { - LLFastTimer t(idle_copy); - idle_list.reserve( mActiveObjects.size() ); - - for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin(); - active_iter != mActiveObjects.end(); active_iter++) + objectp = *active_iter; + if (objectp) { - objectp = *active_iter; - if (objectp) - { - idle_list.push_back( objectp ); - } - else - { // There shouldn't be any NULL pointers in the list, but they have caused - // crashes before. This may be idleUpdate() messing with the list. - llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl; - } + idle_list.push_back( objectp ); + } + else + { // There shouldn't be any NULL pointers in the list, but they have caused + // crashes before. This may be idleUpdate() messing with the list. + llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl; } } @@ -812,7 +807,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world) } */ - LLViewerStats::getInstance()->mNumObjectsStat.addValue((S32) mObjects.size()); + LLViewerStats::getInstance()->mNumObjectsStat.addValue(mObjects.count()); LLViewerStats::getInstance()->mNumActiveObjectsStat.addValue(num_active_objects); LLViewerStats::getInstance()->mNumSizeCulledStat.addValue(mNumSizeCulled); LLViewerStats::getInstance()->mNumVisCulledStat.addValue(mNumVisCulled); @@ -820,9 +815,9 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world) void LLViewerObjectList::clearDebugText() { - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + for (S32 i = 0; i < mObjects.count(); i++) { - (*iter)->setDebugText(""); + mObjects[i]->setDebugText(""); } } @@ -861,7 +856,7 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp) if (objectp->isOnMap()) { - removeFromMap(objectp); + mMapObjects.removeObj(objectp); } // Don't clean up mObject references, these will be cleaned up more efficiently later! @@ -918,10 +913,10 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp) { LLViewerObject *objectp; - - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + S32 i; + for (i = 0; i < mObjects.count(); i++) { - objectp = *iter; + objectp = mObjects[i]; if (objectp->mRegionp == regionp) { @@ -938,9 +933,10 @@ void LLViewerObjectList::killAllObjects() // Used only on global destruction. LLViewerObject *objectp; - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + for (S32 i = 0; i < mObjects.count(); i++) { - objectp = *iter; + objectp = mObjects[i]; + killObject(objectp); llassert(objectp->isDead()); } @@ -949,7 +945,7 @@ void LLViewerObjectList::killAllObjects() if(!mObjects.empty()) { - llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << llendl; + llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.count() << llendl; mObjects.clear(); } @@ -974,15 +970,16 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer) return; } + S32 i = 0; S32 num_removed = 0; LLViewerObject *objectp; - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ) + while (i < mObjects.count()) { // Scan for all of the dead objects and remove any "global" references to them. - objectp = *iter; + objectp = mObjects[i]; if (objectp->isDead()) { - iter = mObjects.erase(iter); + mObjects.remove(i); num_removed++; if (num_removed == mNumDeadObjects) @@ -993,7 +990,8 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer) } else { - ++iter; + // iterate, this isn't a dead object. + i++; } } @@ -1043,11 +1041,12 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset) } LLViewerObject *objectp; - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + S32 i; + for (i = 0; i < mObjects.count(); i++) { - objectp = *iter; + objectp = getObject(i); // There could be dead objects on the object list, so don't update stuff if the object is dead. - if (!objectp->isDead()) + if (objectp) { objectp->updatePositionCaches(); @@ -1077,9 +1076,9 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius"); - for (vobj_list_t::iterator iter = mMapObjects.begin(); iter != mMapObjects.end(); ++iter) + for (S32 i = 0; i < mMapObjects.count(); i++) { - LLViewerObject* objectp = *iter; + LLViewerObject* objectp = mMapObjects[i]; if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) { continue; @@ -1145,14 +1144,21 @@ void LLViewerObjectList::renderObjectBounds(const LLVector3 ¢er) { } +void LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent) +{ + generatePickList(camera); + renderPickList(screen_rect, pick_parcel_wall, render_transparent); +} + void LLViewerObjectList::generatePickList(LLCamera &camera) { LLViewerObject *objectp; S32 i; // Reset all of the GL names to zero. - for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + for (i = 0; i < mObjects.count(); i++) { - (*iter)->mGLName = 0; + objectp = mObjects[i]; + objectp->mGLName = 0; } mSelectPickList.clear(); @@ -1315,19 +1321,17 @@ void LLViewerObjectList::addDebugBeacon(const LLVector3 &pos_agent, const LLColor4 &text_color, S32 line_width) { - LLDebugBeacon beacon; - beacon.mPositionAgent = pos_agent; - beacon.mString = string; - beacon.mColor = color; - beacon.mTextColor = text_color; - beacon.mLineWidth = line_width; - - mDebugBeacons.push_back(beacon); + LLDebugBeacon *beaconp = mDebugBeacons.reserve_block(1); + beaconp->mPositionAgent = pos_agent; + beaconp->mString = string; + beaconp->mColor = color; + beaconp->mTextColor = text_color; + beaconp->mLineWidth = line_width; } void LLViewerObjectList::resetObjectBeacons() { - mDebugBeacons.clear(); + mDebugBeacons.reset(); } LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLViewerRegion *regionp) @@ -1345,7 +1349,7 @@ LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLVi mUUIDObjectMap[fullid] = objectp; - mObjects.push_back(objectp); + mObjects.put(objectp); updateActive(objectp); @@ -1384,7 +1388,7 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe gMessageSystem->getSenderIP(), gMessageSystem->getSenderPort()); - mObjects.push_back(objectp); + mObjects.put(objectp); updateActive(objectp); @@ -1407,11 +1411,11 @@ LLViewerObject *LLViewerObjectList::replaceObject(const LLUUID &id, const LLPCod S32 LLViewerObjectList::findReferences(LLDrawable *drawablep) const { LLViewerObject *objectp; + S32 i; S32 num_refs = 0; - - for (vobj_list_t::const_iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + for (i = 0; i < mObjects.count(); i++) { - objectp = *iter; + objectp = mObjects[i]; if (objectp->mDrawable.notNull()) { num_refs += objectp->mDrawable->findReferences(drawablep); @@ -1456,15 +1460,15 @@ void LLViewerObjectList::orphanize(LLViewerObject *childp, U32 parent_id, U32 ip // Unknown parent, add to orpaned child list U64 parent_info = getIndex(parent_id, ip, port); - if (std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info) == mOrphanParents.end()) + if (-1 == mOrphanParents.find(parent_info)) { - mOrphanParents.push_back(parent_info); + mOrphanParents.put(parent_info); } LLViewerObjectList::OrphanInfo oi(parent_info, childp->mID); - if (std::find(mOrphanChildren.begin(), mOrphanChildren.end(), oi) == mOrphanChildren.end()) + if (-1 == mOrphanChildren.find(oi)) { - mOrphanChildren.push_back(oi); + mOrphanChildren.put(oi); mNumOrphans++; } } @@ -1487,29 +1491,28 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port) // See if we are a parent of an orphan. // Note: This code is fairly inefficient but it should happen very rarely. // It can be sped up if this is somehow a performance issue... - if (mOrphanParents.empty()) + if (0 == mOrphanParents.count()) { // no known orphan parents return; } - if (std::find(mOrphanParents.begin(), mOrphanParents.end(), getIndex(objectp->mLocalID, ip, port)) == mOrphanParents.end()) + if (-1 == mOrphanParents.find(getIndex(objectp->mLocalID, ip, port))) { // did not find objectp in OrphanParent list return; } + S32 i; U64 parent_info = getIndex(objectp->mLocalID, ip, port); BOOL orphans_found = FALSE; // Iterate through the orphan list, and set parents of matching children. - - for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); ) - { - if (iter->mParentInfo != parent_info) + for (i = 0; i < mOrphanChildren.count(); i++) + { + if (mOrphanChildren[i].mParentInfo != parent_info) { - ++iter; continue; } - LLViewerObject *childp = findObject(iter->mChildInfo); + LLViewerObject *childp = findObject(mOrphanChildren[i].mChildInfo); if (childp) { if (childp == objectp) @@ -1543,35 +1546,29 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port) objectp->addChild(childp); orphans_found = TRUE; - ++iter; } else { llinfos << "Missing orphan child, removing from list" << llendl; - - iter = mOrphanChildren.erase(iter); + mOrphanChildren.remove(i); + i--; } } // Remove orphan parent and children from lists now that they've been found + mOrphanParents.remove(mOrphanParents.find(parent_info)); + + i = 0; + while (i < mOrphanChildren.count()) { - std::vector<U64>::iterator iter = std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info); - if (iter != mOrphanParents.end()) - { - mOrphanParents.erase(iter); - } - } - - for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); ) - { - if (iter->mParentInfo == parent_info) + if (mOrphanChildren[i].mParentInfo == parent_info) { - iter = mOrphanChildren.erase(iter); + mOrphanChildren.remove(i); mNumOrphans--; } else { - ++iter; + i++; } } diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 706966deae..2858081dc9 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -38,6 +38,8 @@ // common includes #include "llstat.h" +#include "lldarrayptr.h" +#include "llmap.h" // *TODO: switch to std::map #include "llstring.h" // project includes @@ -48,7 +50,7 @@ class LLNetMap; class LLDebugBeacon; const U32 CLOSE_BIN_SIZE = 10; -const U32 NUM_BINS = 128; +const U32 NUM_BINS = 16; // GL name = position in object list + GL_NAME_INDEX_OFFSET so that // we can have special numbers like zero. @@ -109,12 +111,13 @@ public: void updateAvatarVisibility(); // Selection related stuff + void renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall = FALSE, BOOL render_transparent = TRUE); void generatePickList(LLCamera &camera); void renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent); LLViewerObject *getSelectedObject(const U32 object_id); - inline S32 getNumObjects() { return (S32) mObjects.size(); } + inline S32 getNumObjects() { return mObjects.count(); } void addToMap(LLViewerObject *objectp); void removeFromMap(LLViewerObject *objectp); @@ -128,7 +131,7 @@ public: S32 findReferences(LLDrawable *drawablep) const; // Find references to drawable in all objects, and return value. - S32 getOrphanParentCount() const { return (S32) mOrphanParents.size(); } + S32 getOrphanParentCount() const { return mOrphanParents.count(); } S32 getOrphanCount() const { return mNumOrphans; } void orphanize(LLViewerObject *childp, U32 parent_id, U32 ip, U32 port); void findOrphans(LLViewerObject* objectp, U32 ip, U32 port); @@ -176,28 +179,26 @@ public: S32 mNumUnknownKills; S32 mNumDeadObjects; protected: - std::vector<U64> mOrphanParents; // LocalID/ip,port of orphaned objects - std::vector<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects + LLDynamicArray<U64> mOrphanParents; // LocalID/ip,port of orphaned objects + LLDynamicArray<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects S32 mNumOrphans; - typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t; - - vobj_list_t mObjects; + LLDynamicArrayPtr<LLPointer<LLViewerObject>, 256> mObjects; std::set<LLPointer<LLViewerObject> > mActiveObjects; - vobj_list_t mMapObjects; + LLDynamicArrayPtr<LLPointer<LLViewerObject> > mMapObjects; typedef std::map<LLUUID, LLPointer<LLViewerObject> > vo_map; vo_map mDeadObjects; // Need to keep multiple entries per UUID std::map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap; - std::vector<LLDebugBeacon> mDebugBeacons; + LLDynamicArray<LLDebugBeacon> mDebugBeacons; S32 mCurLazyUpdateIndex; static U32 sSimulatorMachineIndex; - static std::map<U64, U32> sIPAndPortToIndex; + static LLMap<U64, U32> sIPAndPortToIndex; static std::map<U64, LLUUID> sIndexAndLocalIDToUUID; @@ -263,16 +264,12 @@ inline LLViewerObject *LLViewerObjectList::getObject(const S32 index) inline void LLViewerObjectList::addToMap(LLViewerObject *objectp) { - mMapObjects.push_back(objectp); + mMapObjects.put(objectp); } inline void LLViewerObjectList::removeFromMap(LLViewerObject *objectp) { - std::vector<LLPointer<LLViewerObject> >::iterator iter = std::find(mMapObjects.begin(), mMapObjects.end(), objectp); - if (iter != mMapObjects.end()) - { - mMapObjects.erase(iter); - } + mMapObjects.removeObj(objectp); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1fd7c1cfb3..1dcc7389cb 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2476,9 +2476,6 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params) // event processing. void LLViewerWindow::updateUI() { - static LLFastTimer::DeclareTimer ftm("Update UI"); - LLFastTimer t(ftm); - static std::string last_handle_msg; LLConsole::updateClass(); @@ -3060,6 +3057,7 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point) // Must be called after displayObjects is called, which sets the mGLName parameter // NOTE: This function gets called 3 times: // render_ui_3d: FALSE, FALSE, TRUE +// renderObjectsForSelect: TRUE, pick_parcel_wall, FALSE // render_hud_elements: FALSE, FALSE, FALSE void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud ) { diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp index 5153cef709..177cb16c50 100644 --- a/indra/newview/llvoclouds.cpp +++ b/indra/newview/llvoclouds.cpp @@ -77,11 +77,9 @@ BOOL LLVOClouds::isActive() const return TRUE; } + BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) { - static LLFastTimer::DeclareTimer ftm("Idle Clouds"); - LLFastTimer t(ftm); - if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS))) { return TRUE; diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp index 428ef20006..75beab519e 100644 --- a/indra/newview/llvotextbubble.cpp +++ b/indra/newview/llvotextbubble.cpp @@ -84,9 +84,6 @@ BOOL LLVOTextBubble::isActive() const BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) { - static LLFastTimer::DeclareTimer ftm("Text Bubble"); - LLFastTimer t(ftm); - F32 dt = mUpdateTimer.getElapsedTimeF32(); // Die after a few seconds. if (dt > 1.5f) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index fad726a225..12728a2377 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -603,9 +603,6 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) { LLViewerObject::idleUpdate(agent, world, time); - static LLFastTimer::DeclareTimer ftm("Volume"); - LLFastTimer t(ftm); - if (mDead || mDrawable.isNull()) { return TRUE; @@ -627,18 +624,6 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) mVolumeImpl->doIdleUpdate(agent, world, time); } - const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40; - - if (mDrawable->isActive()) - { - if (mDrawable->isRoot() && - mDrawable->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES && - (!mDrawable->getParent() || !mDrawable->getParent()->isActive())) - { - mDrawable->makeStatic(); - } - } - return TRUE; } @@ -1087,7 +1072,7 @@ BOOL LLVOVolume::calcLOD() S32 cur_detail = 0; F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length(); - F32 distance = mDrawable->mDistanceWRTCamera; //llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE); + F32 distance = llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE); distance *= sDistanceFactor; F32 rampDist = LLVOVolume::sLODFactor * 2; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index d7e5b464a6..118d7f8d08 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -657,9 +657,6 @@ void LLWorld::updateParticles() void LLWorld::updateClouds(const F32 dt) { - static LLFastTimer::DeclareTimer ftm("World Clouds"); - LLFastTimer t(ftm); - if (gSavedSettings.getBOOL("FreezeTime") || !gSavedSettings.getBOOL("SkyUseClassicClouds")) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 6e2fa14c75..dd9634a234 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -116,6 +116,7 @@ const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f; const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f; const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f; const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f; +const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40; const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10; const U32 REFLECTION_MAP_RES = 128; @@ -1411,26 +1412,38 @@ void LLPipeline::updateMove() assertInitialized(); + for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin(); + iter != mRetexturedList.end(); ++iter) { - static LLFastTimer::DeclareTimer ftm("Retexture"); - LLFastTimer t(ftm); - - for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin(); - iter != mRetexturedList.end(); ++iter) + LLDrawable* drawablep = *iter; + if (drawablep && !drawablep->isDead()) { - LLDrawable* drawablep = *iter; - if (drawablep && !drawablep->isDead()) - { - drawablep->updateTexture(); - } + drawablep->updateTexture(); } - mRetexturedList.clear(); } + mRetexturedList.clear(); + updateMovedList(mMovedList); + + for (LLDrawable::drawable_set_t::iterator iter = mActiveQ.begin(); + iter != mActiveQ.end(); ) { - static LLFastTimer::DeclareTimer ftm("Moved List"); - LLFastTimer t(ftm); - updateMovedList(mMovedList); + LLDrawable::drawable_set_t::iterator curiter = iter++; + LLDrawable* drawablep = *curiter; + if (drawablep && !drawablep->isDead()) + { + if (drawablep->isRoot() && + drawablep->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES && + (!drawablep->getParent() || !drawablep->getParent()->isActive())) + { + drawablep->makeStatic(); // removes drawable and its children from mActiveQ + iter = mActiveQ.upper_bound(drawablep); // next valid entry + } + } + else + { + mActiveQ.erase(curiter); + } } //balance octrees @@ -3046,6 +3059,12 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) } } + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING)) + { + LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderForSelect"); + gObjectList.renderObjectsForSelect(camera, gViewerWindow->getWindowRectScaled()); + } + else { LLFastTimer t(FTM_POOLS); @@ -4779,6 +4798,10 @@ void LLPipeline::findReferences(LLDrawable *drawablep) llinfos << "In mRetexturedList" << llendl; } + if (mActiveQ.find(drawablep) != mActiveQ.end()) + { + llinfos << "In mActiveQ" << llendl; + } if (std::find(mBuildQ1.begin(), mBuildQ1.end(), drawablep) != mBuildQ1.end()) { llinfos << "In mBuildQ1" << llendl; @@ -4935,6 +4958,19 @@ void LLPipeline::setLight(LLDrawable *drawablep, BOOL is_light) } } +void LLPipeline::setActive(LLDrawable *drawablep, BOOL active) +{ + assertInitialized(); + if (active) + { + mActiveQ.insert(drawablep); + } + else + { + mActiveQ.erase(drawablep); + } +} + //static void LLPipeline::toggleRenderType(U32 type) { diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index c5285943e8..67004a5f2d 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -270,7 +270,8 @@ public: void shiftObjects(const LLVector3 &offset); void setLight(LLDrawable *drawablep, BOOL is_light); - + void setActive(LLDrawable *drawablep, BOOL active); + BOOL hasRenderBatches(const U32 type) const; LLCullResult::drawinfo_list_t::iterator beginRenderMap(U32 type); LLCullResult::drawinfo_list_t::iterator endRenderMap(U32 type); @@ -588,6 +589,8 @@ protected: LLViewerObject::vobj_list_t mCreateQ; + LLDrawable::drawable_set_t mActiveQ; + LLDrawable::drawable_set_t mRetexturedList; class HighlightItem |