diff options
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 22 | ||||
| -rw-r--r-- | indra/newview/llspeakers.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llspeakers.h | 1 | 
3 files changed, 31 insertions, 3 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 79376f7467..e216c7865d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1584,6 +1584,28 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>ChatLoadGroupMaxMembers</key> +    <map> +        <key>Comment</key> +        <string>Max number of active members we'll show up for an unresponsive group</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>S32</string> +        <key>Value</key> +        <real>100</real> +    </map> +    <key>ChatLoadGroupTimeout</key> +    <map> +        <key>Comment</key> +        <string>Time we give the server to send group participants before we hit the server for group info (seconds)</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>F32</string> +        <key>Value</key> +        <real>10.0</real> +    </map>      <key>ChatOnlineNotification</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 301b489c34..8783d99b11 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -38,6 +38,8 @@  #include "llvoavatar.h"  #include "llworld.h" +extern LLControlGroup gSavedSettings; +  const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f);  const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f); @@ -311,6 +313,7 @@ LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :  	mModerateModeHandledFirstTime(false),  	mSpeakerListUpdated(false)  { +    mGetListTime.reset();  	static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0);  	mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLSpeakerMgr::removeSpeaker, this, _1), remove_delay); @@ -537,18 +540,20 @@ void LLSpeakerMgr::updateSpeakerList()  			LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);  			if (session->isGroupSessionType() && (mSpeakers.size() <= 1))  			{ +                const F32 load_group_timeout = gSavedSettings.getF32("ChatLoadGroupTimeout");  				// For groups, we need to hit the group manager.  				// Note: The session uuid and the group uuid are actually one and the same. If that was to change, this will fail.  				LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(session_id); -				if (!gdatap) +				if (!gdatap && (mGetListTime.getElapsedTimeF32() >= load_group_timeout))  				{  					// Request the data the first time around  					LLGroupMgr::getInstance()->sendCapGroupMembersRequest(session_id);  				} -				else if (gdatap->isMemberDataComplete() && !gdatap->mMembers.empty()) +				else if (gdatap && gdatap->isMemberDataComplete() && !gdatap->mMembers.empty())  				{  					// Add group members when we get the complete list (note: can take a while before we get that list)  					LLGroupMgrGroupData::member_list_t::iterator member_it = gdatap->mMembers.begin(); +                    const S32 load_group_max_members = gSavedSettings.getS32("ChatLoadGroupMaxMembers");                      S32 updated = 0;  					while (member_it != gdatap->mMembers.end())  					{ @@ -564,7 +569,7 @@ void LLSpeakerMgr::updateSpeakerList()  						++member_it;                          // Limit the number of "manually updated" participants to a reasonable number to avoid severe fps drop                          // *TODO : solve the perf issue of having several hundreds of widgets in the conversation list -                        if (updated >= 100) +                        if (updated >= load_group_max_members)                              break;  					}                      mSpeakerListUpdated = true; diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index 5f5095097e..e953dd0e1a 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -264,6 +264,7 @@ protected:  	typedef std::map<LLUUID, LLPointer<LLSpeaker> > speaker_map_t;  	speaker_map_t		mSpeakers;  	bool                mSpeakerListUpdated; +    LLTimer             mGetListTime;  	speaker_list_t		mSpeakersSorted;  	LLFrameTimer		mSpeechTimer;  | 
