diff --git a/README_BUILD_FIRESTORM_LINUX.txt b/README_BUILD_FIRESTORM_LINUX.txt index b7838f1c1e..2e856043a1 100755 --- a/README_BUILD_FIRESTORM_LINUX.txt +++ b/README_BUILD_FIRESTORM_LINUX.txt @@ -1,9 +1,5 @@ First, make sure gcc-5.4 and g++-5.4 are installed. -Ensure you can build a stock viewer-development try as described in the SL wiki. Before asking for any help -compiling Firestorm, make sure you can build viewer-development first. If you try and skip this step, you may -receive much less help. http://wiki.secondlife.com/wiki/Compiling_the_viewer_(Linux) - If you want to use licensed FMOD or KDU build libraries (they are optional) you have to provision these yourself. If you're licensing these with Phoenix/Firestorm, ask for the libraries for fmod and kdu. Put them into: /opt/firestorm @@ -31,6 +27,9 @@ Other examples: autobuild build -A64 -c ReleaseFS --no-configure -- --clean # Clean rebuild autobuild build -A64 -c ReleaseFS -- --package # Complete a build and package it into a tarball +If you want to build with clang you can call autobuild like this: + CC=clang CXX=clang++ autobuild configure -A64 -c ReleaseFS + Any of the configure options can also be used (and do the same thing) with the build options. Typical LL autobuild configure options should also work, as long as they don't duplicate configuration we are already doing. diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 030b502524..9a95bf189e 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -214,6 +214,10 @@ if (LINUX) set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL") set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") + + if( NOT (CMAKE_CXX_COMPILER MATCHES ".*clang") ) + set( CMAKE_CXX_FLAGS "-fabi-version=9 ${CMAKE_CXX_FLAGS}" ) + endif() endif (LINUX) diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 4dd66bc975..846ffa309a 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -106,7 +106,7 @@ LLJoint *LLCharacter::getJoint( const std::string &name ) if (!joint) { - LL_WARNS() << "Failed to find joint." << LL_ENDL; + LL_WARNS() << "Failed to find joint: " << name << LL_ENDL; } return joint; } diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index 93c5dac12a..ac03b5f6ee 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -241,10 +241,12 @@ void LLMotionController::purgeExcessMotions() } U32 loaded_count = mLoadedMotions.size(); - if (loaded_count > (2 * MAX_MOTION_INSTANCES) && loaded_count > mLastCountAfterPurge) - { - LL_WARNS_ONCE("Animation") << loaded_count << " Loaded Motions. Amount of motions is over limit." << LL_ENDL; - } + // Can't do anything about it anyway - stop spamming the log + //if (loaded_count > (2 * MAX_MOTION_INSTANCES) && loaded_count > mLastCountAfterPurge) + //{ + // LL_WARNS_ONCE("Animation") << loaded_count << " Loaded Motions. Amount of motions is over limit." << LL_ENDL; + //} + // mLastCountAfterPurge = loaded_count; } diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h index d98c3163ef..b6399ad094 100644 --- a/indra/llcommon/lluuid.h +++ b/indra/llcommon/lluuid.h @@ -134,6 +134,8 @@ public: typedef std::vector uuid_vec_t; typedef std::set uuid_set_t; +// cleanupDeadObject spam avoidance +typedef std::multiset uuid_multiset_t; // Helper structure for ordering lluuids in stl containers. eg: // std::map widget_map; diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index ebaa64e2a1..7b5adf53e1 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -417,15 +417,18 @@ void LLAppViewerLinux::initCrashReporting(bool reportFreeze) pid_str << LLApp::getPid(); std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, ""); std::string appname = gDirUtilp->getExecutableFilename(); + std::string grid{ LLGridManager::getInstance()->getGridId() }; + std::string title{ LLAppViewer::instance()->getSecondLifeTitle() }; + std::string pidstr{ pid_str.str() }; // launch the actual crash logger const char * cmdargv[] = {cmd.c_str(), "-user", - (char*)LLGridManager::getInstance()->getGridId().c_str(), + grid.c_str(), "-name", - LLAppViewer::instance()->getSecondLifeTitle().c_str(), + title.c_str(), "-pid", - pid_str.str().c_str(), + pidstr.c_str(), "-dumpdir", logdir.c_str(), "-procname", diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index f006fa1d8f..b608646abd 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -152,7 +152,7 @@ void LLAvatarRenderNotifier::displayNotification(bool show_over_limit) } // log unconditionally - LL_WARNS("AvatarRenderInfo") << notification_name << " " << args << LL_ENDL; + LL_DEBUGS("AvatarRenderInfo") << notification_name << " " << args << LL_ENDL; if ( expire_delay // expiration of zero means do not show the notices && gAgentCamera.getLastCameraMode() != CAMERA_MODE_MOUSELOOK // don't display notices in Mouselook diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 5370e71588..ded58caba3 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -567,13 +567,6 @@ bool LLInventoryFilter::checkAgainstPermissions(const LLFolderViewModelItemInven { if (!listener) return FALSE; - // Fix empty filtered folders still showing - if (listener->getInventoryType() == LLInventoryType::IT_CATEGORY) - { - return false; - } - // - PermissionMask perm = listener->getPermissionMask(); const LLInvFVBridge *bridge = dynamic_cast(listener); if (bridge && bridge->isLink()) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index dc040019f0..999dbaf40b 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -403,6 +403,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* bool justCreated = false; if (!objectp) { + objectp = createObjectFromCache(pcode, regionp, fullid, entry->getLocalID()); LL_DEBUGS("ObjectUpdate") << "uuid " << fullid << " created objectp " << objectp << LL_ENDL; @@ -1415,25 +1416,20 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp) // bool new_dead_object = true; if (mDeadObjects.find(objectp->mID) != mDeadObjects.end()) { - LL_INFOS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL; // FIRE-30694 DeadObject Spam + // LL_INFOS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL; // new_dead_object = false; + LL_DEBUGS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL; + // } - else + // detect but still delete dupes + // else { // FIRE-30694 DeadObject Spam // mDeadObjects.insert(objectp->mID); - bool success; - std::tie( std::ignore, success ) = mDeadObjects.insert( objectp->mID ); - if( success ) - { - mNumDeadObjects++; - llassert( mNumDeadObjects == mDeadObjects.size() ); - } - else - { - LL_WARNS() << "Object " << objectp->mID << " failed to insert on dead list!" << LL_ENDL; - } + mDeadObjects.insert( objectp->mID ); + mNumDeadObjects++; + llassert( mNumDeadObjects == mDeadObjects.size() ); // } @@ -1641,11 +1637,17 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer) { // FIRE-30694 DeadObject Spam // mDeadObjects.erase(objectp->mID); // Use timer for cleaning up dead objects - if(mDeadObjects.erase(objectp->mID)==0) - { + auto delete_me = mDeadObjects.find(objectp->mID); + if( delete_me !=mDeadObjects.end() ) + { + mDeadObjects.erase( delete_me ); + } + else + { LL_WARNS() << "Attempt to delete object " << objectp->mID << " but object not in dead list" << LL_ENDL; num_divergent++; // this is the number we are adrift in the count - } + } + LLPointer::swap(*iter, *target); *target = NULL; ++target; @@ -1682,7 +1684,7 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer) // TODO(Beq) If this still happens, we ought to realign at this point. Do a full sweep and reset. if ( mNumDeadObjects != mDeadObjects.size() ) { - LL_WARNS() << "Num dead objects (" << mNumDeadObjects << ") != dead object list size (" << mDeadObjects.size() << "), deadlist discrepancy (" << num_divergent << ")" << LL_ENDL; + LL_WARNS_ONCE() << "Num dead objects (" << mNumDeadObjects << ") != dead object list size (" << mDeadObjects.size() << "), deadlist discrepancy (" << num_divergent << ")" << LL_ENDL; } // } @@ -2326,7 +2328,7 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe return NULL; } // - + LLUUID fullid; if (uuid == LLUUID::null) { @@ -2519,7 +2521,9 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port) } else { - LL_INFOS() << "Missing orphan child, removing from list" << LL_ENDL; + // descope uninteresting spam we can do nothing about. + // LL_INFOS() << "Missing orphan child, removing from list" << LL_ENDL; + LL_DEBUGS() << "Missing orphan child, removing from list" << LL_ENDL; iter = mOrphanChildren.erase(iter); } diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 2a0a99f6bd..e295639cbb 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -223,7 +223,10 @@ protected: vobj_list_t mMapObjects; - uuid_set_t mDeadObjects; + // deadobject cleanup + // uuid_set_t mDeadObjects; + uuid_multiset_t mDeadObjects; + // std::map > mUUIDObjectMap; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 14c9a90bc4..3167f7cce5 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5319,13 +5319,15 @@ static LLTrace::BlockTimerStatHandle FTM_REGISTER_FACE("Register Face"); void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 type) { LL_RECORD_BLOCK_TIME(FTM_REGISTER_FACE); - if ( type == LLRenderPass::PASS_ALPHA - && facep->getTextureEntry()->getMaterialParams().notNull() - && !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT) - && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1) - { - LL_WARNS_ONCE("RenderMaterials") << "Oh no! No binormals for this alpha blended face!" << LL_ENDL; - } + // Can't do anything about it anyway - stop spamming the log + //if ( type == LLRenderPass::PASS_ALPHA + // && facep->getTextureEntry()->getMaterialParams().notNull() + // && !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT) + // && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1) + //{ + // LL_WARNS_ONCE("RenderMaterials") << "Oh no! No binormals for this alpha blended face!" << LL_ENDL; + //} + // // bool selected = facep->getViewerObject()->isSelected(); // diff --git a/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml index ea0a4c56e2..4add688fca 100644 --- a/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml +++ b/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml @@ -6,9 +6,10 @@ [ITEM_COUNT] Элементов [FILTER] - - Объекты: - + + Обнаружено [ITEM_COUNT] элементов [FILTER] + + @@ -70,7 +71,9 @@ - + + + @@ -108,7 +111,7 @@