diff options
| author | AndreyL ProductEngine <alihatskiy@productengine.com> | 2016-05-28 01:03:56 +0300 | 
|---|---|---|
| committer | AndreyL ProductEngine <alihatskiy@productengine.com> | 2016-05-28 01:03:56 +0300 | 
| commit | 057c034cb4584fb70f63a1572be0ff2219ad6294 (patch) | |
| tree | 069ecea204f81c380f484caa6aac41c29184ed3e /indra/newview | |
| parent | 817ae347744eab55ee1f8084102fbc8dc5195f3a (diff) | |
| parent | 0d5edb03a226a62bb416ddca250e4f1f789f56fd (diff) | |
Merged in lindenlab/viewer-lynx
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | indra/newview/featuretable.txt | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable_linux.txt | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable_mac.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llaisapi.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 4 | ||||
| -rw-r--r-- | indra/newview/llavatarrendernotifier.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.cpp | 59 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterdeleteprefpreset.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpresetsmanager.cpp | 57 | ||||
| -rw-r--r-- | indra/newview/llpresetsmanager.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 73 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 12 | 
15 files changed, 173 insertions, 102 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8d863631cf..dce0ea73cd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1315,13 +1315,10 @@ set(viewer_HEADER_FILES  source_group("CMake Rules" FILES ViewerInstall.cmake) +#summary.json creation moved to viewer_manifest.py MAINT-6413  # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild -# the summary.json file is created for the benefit of the TeamCity builds, where -#   it is used to provide descriptive information to the build results page  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"             "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n") -file(WRITE "${CMAKE_BINARY_DIR}/summary.json" -           "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n")  set_source_files_properties(     llversioninfo.cpp tests/llversioninfo_test.cpp  diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index be8ea2bab9..e99b94f150 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -32,7 +32,7 @@ RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors 1   16 -RenderAvatarMaxComplexity          1	80000 +RenderAvatarMaxComplexity          1	350000  RenderAvatarVP				1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index ca6c00951d..801a622e93 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -32,7 +32,7 @@ RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors 1   16 -RenderAvatarMaxComplexity          1	80000 +RenderAvatarMaxComplexity          1	350000  RenderAvatarVP				1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index ea69b088f9..1f891ee4d7 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -32,7 +32,7 @@ RenderAvatarCloth				1	1  RenderAvatarLODFactor			1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors     1   16 -RenderAvatarMaxComplexity              1	80000 +RenderAvatarMaxComplexity              1	350000  RenderAvatarVP					1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 3e3d5c7456..648212177b 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -838,11 +838,11 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories)  void AISUpdate::doUpdate()  { -	// Do version/descendent accounting. +	// Do version/descendant accounting.  	for (std::map<LLUUID,S32>::const_iterator catit = mCatDescendentDeltas.begin();  		 catit != mCatDescendentDeltas.end(); ++catit)  	{ -		LL_DEBUGS("Inventory") << "descendent accounting for " << catit->first << LL_ENDL; +		LL_DEBUGS("Inventory") << "descendant accounting for " << catit->first << LL_ENDL;  		const LLUUID cat_id(catit->first);  		// Don't account for update if we just created this category. @@ -859,13 +859,13 @@ void AISUpdate::doUpdate()  			continue;  		} -		// If we have a known descendent count, set that now. +		// If we have a known descendant count, set that now.  		LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);  		if (cat)  		{  			S32 descendent_delta = catit->second;  			S32 old_count = cat->getDescendentCount(); -			LL_DEBUGS("Inventory") << "Updating descendent count for " +			LL_DEBUGS("Inventory") << "Updating descendant count for "  								   << cat->getName() << " " << cat_id  								   << " with delta " << descendent_delta << " from "  								   << old_count << " to " << (old_count+descendent_delta) << LL_ENDL; @@ -896,7 +896,7 @@ void AISUpdate::doUpdate()  		LLUUID category_id(update_it->first);  		LLPointer<LLViewerInventoryCategory> new_category = update_it->second;  		// Since this is a copy of the category *before* the accounting update, above, -		// we need to transfer back the updated version/descendent count. +		// we need to transfer back the updated version/descendant count.  		LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID());  		if (!curr_cat)  		{ @@ -961,7 +961,16 @@ void AISUpdate::doUpdate()  		{  			LL_WARNS() << "Possible version mismatch for category " << cat->getName()  					<< ", viewer version " << cat->getVersion() -					<< " server version " << version << LL_ENDL; +					<< " AIS version " << version << " !!!Adjusting local version!!!" <<  LL_ENDL; + +            // the AIS version should be considered the true version. Adjust  +            // our local category model to reflect this version number.  Otherwise  +            // it becomes possible to get stuck with the viewer being out of  +            // sync with the inventory system.  Under normal circumstances  +            // inventory COF is maintained on the viewer through calls to  +            // LLInventoryModel::accountForUpdate when a changing operation  +            // is performed.  This occasionally gets out of sync however. +            cat->setVersion(version);  		}  	} diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index cc676550ab..a1d9786321 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -60,6 +60,8 @@  #include "llcoros.h"  #include "lleventcoro.h" +#include "llavatarpropertiesprocessor.h" +  #if LL_MSVC  // disable boost::lexical_cast warning  #pragma warning (disable:4702) @@ -3359,15 +3361,9 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()  {      if (!mOutstandingAppearanceBakeRequest)      { -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE          mRerequestAppearanceBake = false;          LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);          LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc); -#else -        LLCoros::instance().launch("serverAppearanceUpdateCoro",  -            boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this)); - -#endif      }      else      { @@ -3375,17 +3371,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()      }  } -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE  void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter) -#else -void LLAppearanceMgr::serverAppearanceUpdateCoro() -#endif  { -#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE -    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter( -        new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID)); -#endif -      mRerequestAppearanceBake = false;      if (!gAgent.getRegion())      { @@ -3493,10 +3480,15 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro()              // on multiple machines.              if (result.has("expected"))              { -                  S32 expectedCofVersion = result["expected"].asInteger();                  LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL; +                // Force an update texture request for ourself.  The message will return +                // through the UDP and be handled in LLVOAvatar::processAvatarAppearance +                // this should ensure that we receive a new canonical COF from the sim +                // host. Hopefully it will return before the timeout. +                LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(gAgent.getID()); +                  bRetry = true;                  // Wait for a 1/2 second before trying again.  Just to keep from asking too quickly.                  if (++retryCount > BAKE_RETRY_MAX_COUNT) diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index bf181cb4ad..7069da7352 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -228,11 +228,7 @@ public:  private: -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE      void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter); -#else -    void serverAppearanceUpdateCoro(); -#endif      static void debugAppearanceUpdateCOF(const LLSD& content); diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index a13e142e16..24934fdb73 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -63,7 +63,7 @@ mLatestAgentComplexity(0),  mLatestOverLimitPct(0.0f),  mShowOverLimitAgents(false),  mNotifyOutfitLoading(false), -mLastCofVersion(-1), +mLastCofVersion(LLViewerInventoryCategory::VERSION_UNKNOWN),  mLastOutfitRezStatus(-1),  mLastSkeletonSerialNum(-1)  { @@ -207,8 +207,8 @@ void LLAvatarRenderNotifier::updateNotificationState()          mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;      }      else if (mLastCofVersion >= 0 -        && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion -            || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum)) +        && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion() +        || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))      {          // version mismatch in comparison to previous outfit - outfit changed          mNotifyOutfitLoading = true; diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 7f1c981a3c..d4ba230feb 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -809,3 +809,62 @@ void LLFeatureManager::applyBaseMasks()  		maskFeatures("safe");  	}  } + +LLSD LLFeatureManager::getRecommendedSettingsMap() +{ +	// Create the map and fill it with the hardware recommended settings. +	// It's needed to create an initial Default graphics preset (MAINT-6435). +	// The process is similar to the one LLFeatureManager::applyRecommendedSettings() does. + +	LLSD map(LLSD::emptyMap()); + +	loadGPUClass(); +	U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5)); +	LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL; + +	applyBaseMasks(); +	std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low"); + +	maskFeatures(features); + +	LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading    +	map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level; +	map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();; +	map["RenderQualityPerformance"]["Persist"] = 1; +	map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); + + + +	for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt) +	{ +		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first); +		if (ctrl == NULL) +		{ +			LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL; +			continue; +		} + +		if (ctrl->isType(TYPE_BOOLEAN)) +		{ +			map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first); +		} +		else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32)) +		{ +			map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first); +		} +		else if (ctrl->isType(TYPE_F32)) +		{ +			map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first); +		} +		else +		{ +			LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL; +			continue; +		} +		map[mIt->first]["Comment"] = ctrl->getComment();; +		map[mIt->first]["Persist"] = 1; +		map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); +	} +	 +	return map; +} diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 12ea691b49..c3d87cea0b 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -157,7 +157,9 @@ public:  	// load the dynamic GPU/feature table from a website  	void fetchHTTPTables(); -	 + +	LLSD getRecommendedSettingsMap(); +  protected:  	bool loadGPUClass(); diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index c0888db3bc..7dedbbf984 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -53,8 +53,6 @@ BOOL LLFloaterDeletePrefPreset::postBuild()  	getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));  	LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this)); -	onPresetsListChange(); // ensure that delete button is disabled when the list is empty -  	return TRUE;  } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index d95546f11d..9957039f72 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -38,6 +38,7 @@  #include "llviewercontrol.h"  #include "llfloaterpreference.h"  #include "llfloaterreg.h" +#include "llfeaturemanager.h"  LLPresetsManager::LLPresetsManager()  { @@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault()  		LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;  		// Write current graphic settings as the default -		savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); +        savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);  	}      else      { @@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam  	presets = mPresetNames;  } -bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name) +bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)  {  	if (LLTrans::getString(PRESETS_DEFAULT) == name)  	{ @@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n  	if(PRESETS_GRAPHIC == subdirectory)  	{ -		gSavedSettings.setString("PresetGraphicActive", name); -  		LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -		if (instance) +		if (instance && !createDefault)  		{ +            gSavedSettings.setString("PresetGraphicActive", name);  			instance->getControlNames(name_list);              LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;  			name_list.push_back("PresetGraphicActive"); @@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n          LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;      } -    if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list +    if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list +        || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings       {          // make an empty llsd          LLSD paramsData(LLSD::emptyMap()); -        for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it) +        if (createDefault) +        { +            paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); +            if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) +            { +                // use the recommended setting as an initial one (MAINT-6435) +                gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger()); +            } +        } +        else          { -            std::string ctrl_name = *it; -            LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); -            std::string comment = ctrl->getComment(); -            std::string type = LLControlGroup::typeEnumToString(ctrl->type()); -            LLSD value = ctrl->getValue(); - -            paramsData[ctrl_name]["Comment"] =  comment; -            paramsData[ctrl_name]["Persist"] = 1; -            paramsData[ctrl_name]["Type"] = type; -            paramsData[ctrl_name]["Value"] = value; +            for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it) +            { +                std::string ctrl_name = *it; +                LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); +                std::string comment = ctrl->getComment(); +                std::string type = LLControlGroup::typeEnumToString(ctrl->type()); +                LLSD value = ctrl->getValue(); + +                paramsData[ctrl_name]["Comment"] = comment; +                paramsData[ctrl_name]["Persist"] = 1; +                paramsData[ctrl_name]["Type"] = type; +                paramsData[ctrl_name]["Value"] = value; +            }          }          std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); @@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n              LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; -            gSavedSettings.setString("PresetGraphicActive", name); - -            // signal interested parties -            triggerChangeSignal(); +            if (!createDefault) +            { +                gSavedSettings.setString("PresetGraphicActive", name); +                // signal interested parties +                triggerChangeSignal(); +            }          }          else          { diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index ac4f0c010c..21f9885f27 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -56,7 +56,7 @@ public:  	static std::string getPresetsDir(const std::string& subdirectory);  	void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);  	void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); -	bool savePreset(const std::string& subdirectory, std::string name); +	bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);  	void loadPreset(const std::string& subdirectory, std::string name);  	bool deletePreset(const std::string& subdirectory, std::string name); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b9dd43f061..cdc7e20c2c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7313,7 +7313,6 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32  //-----------------------------------------------------------------------------  void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  { -    static S32 largestSelfCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN);  	LL_DEBUGS("Avatar") << "starts" << LL_ENDL;  	bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"); @@ -7348,43 +7347,34 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		return;  	} -	S32 this_update_cof_version = contents.mCOFVersion; -	S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; +    S32 thisAppearanceVersion(contents.mCOFVersion); +    if (isSelf()) +    {   // In the past this was considered to be the canonical COF version,  +        // that is no longer the case.  The canonical version is maintained  +        // by the AIS code and should match the COF version there. Even so, +        // we must prevent rolling this one backwards backwards or processing  +        // stale versions. -	if( isSelf() ) -	{ -		LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version -				<< " last_update_request_cof_version " << last_update_request_cof_version -				<<  " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL; +        S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion()); + +        LL_DEBUGS("Avatar") << "handling self appearance message #" << thisAppearanceVersion << +            " (highest seen #" << mLastUpdateReceivedCOFVersion << +            ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL; -        if (largestSelfCOFSeen > this_update_cof_version) +        if (mLastUpdateReceivedCOFVersion >= thisAppearanceVersion)          { -            LL_WARNS("Avatar") << "Already processed appearance for COF version " << -                largestSelfCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL; +            LL_WARNS("Avatar") << "Stale appearance received #" << thisAppearanceVersion << +                " attempt to roll back from #" << mLastUpdateReceivedCOFVersion << +                "... dropping." << LL_ENDL; +            return; +        } +        if (isEditingAppearance()) +        { +            LL_DEBUGS("Avatar") << "Editing appearance.  Dropping appearance update." << LL_ENDL;              return;          } -        largestSelfCOFSeen = this_update_cof_version; - -	} -	else -	{ -		LL_DEBUGS("Avatar") << "appearance message received" << LL_ENDL; -	} - -	// Check for stale update. -	if (isSelf() -		&& (this_update_cof_version < last_update_request_cof_version)) -	{ -		LL_WARNS() << "Stale appearance update, wanted version " << last_update_request_cof_version -				<< ", got " << this_update_cof_version << LL_ENDL; -		return; -	} -	if (isSelf() && isEditingAppearance()) -	{ -		LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL; -		return; -	} +    }  	// SUNSHINE CLEANUP - is this case OK now?  	S32 num_params = contents.mParamWeights.size(); @@ -7399,13 +7389,17 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  	}  	// No backsies zone - if we get here, the message should be valid and usable, will be processed. -    LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL; +    LL_INFOS("Avatar") << "Processing appearance message version " << thisAppearanceVersion << LL_ENDL; -	// Note: -	// RequestAgentUpdateAppearanceResponder::onRequestRequested() -	// assumes that cof version is only updated with server-bake -	// appearance messages. -	mLastUpdateReceivedCOFVersion = this_update_cof_version; +    if (isSelf()) +    { +        // Note: +        // locally the COF is maintained via LLInventoryModel::accountForUpdate +        // which is called from various places.  This should match the simhost's  +        // idea of what the COF version is.  AIS however maintains its own version +        // of the COF that should be considered canonical.  +        mLastUpdateReceivedCOFVersion = thisAppearanceVersion; +    }      if (applyParsedTEMessage(contents.mTEContents) > 0 && isChanged(TEXTURE))      { @@ -7528,7 +7522,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		// Got an update for some other avatar  		// Ignore updates for self, because we have a more authoritative value in the preferences.  		setHoverOffset(contents.mHoverOffset); -		LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL; +		LL_DEBUGS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;  	}  	if (!contents.mHoverOffsetWasSet && !isSelf()) @@ -8151,6 +8145,7 @@ U32 LLVOAvatar::getPartitionType() const  //static  void LLVOAvatar::updateImpostors()  { +	LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;  	LLCharacter::sAllowInstancesChange = FALSE;  	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 1c77cf805e..f3d89bb866 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -30,6 +30,7 @@ import sys  import os.path  import shutil  import errno +import json  import re  import tarfile  import time @@ -181,9 +182,16 @@ class ViewerManifest(LLManifest):                  self.path("*.tga")                  self.end_prefix("local_assets") -            # Files in the newview/ directory +            # File in the newview/ directory              self.path("gpu_table.txt") -            # The summary.json file gets left in the build directory by newview/CMakeLists.txt. + +            #summary.json.  Standard with exception handling is fine.  If we can't open a new file for writing, we have worse problems +            summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()} +            with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle: +                json.dump(summary_dict,summary_handle) + +            #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the +            #return code for free.              if not self.path2basename(os.pardir, "summary.json"):                  print "No summary.json file" | 
