diff options
| author | simon <none@none> | 2015-04-15 15:07:13 -0700 | 
|---|---|---|
| committer | simon <none@none> | 2015-04-15 15:07:13 -0700 | 
| commit | a219cf1c98527faa0e7addeb9660f679208bb0e7 (patch) | |
| tree | 78a14774f7ff79dd92c022caa2d9d68ec85fba85 /indra/llmessage | |
| parent | b5324afb6f2e45deefb9b79e7e2192bc686b181a (diff) | |
| parent | a647b8f1cbab13f07ea889c80df28414bc906129 (diff) | |
Merge viewer-release
Diffstat (limited to 'indra/llmessage')
| -rwxr-xr-x | indra/llmessage/llcircuit.cpp | 78 | ||||
| -rwxr-xr-x | indra/llmessage/llcircuit.h | 5 | ||||
| -rwxr-xr-x | indra/llmessage/message.cpp | 4 | ||||
| -rwxr-xr-x | indra/llmessage/message.h | 2 | ||||
| -rwxr-xr-x | indra/llmessage/message_prehash.cpp | 2 | ||||
| -rwxr-xr-x | indra/llmessage/message_prehash.h | 2 | 
6 files changed, 55 insertions, 38 deletions
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp index 5aaada63b1..955a66f864 100755 --- a/indra/llmessage/llcircuit.cpp +++ b/indra/llmessage/llcircuit.cpp @@ -103,6 +103,7 @@ LLCircuitData::LLCircuitData(const LLHost &host, TPACKETID in_id,  	mPeakBPSOut(0.f),  	mPeriodTime(0.0),  	mExistenceTimer(), +	mAckCreationTime(0.f),  	mCurrentResendCount(0),  	mLastPacketGap(0),  	mHeartbeatInterval(circuit_heartbeat_interval),  @@ -1078,60 +1079,69 @@ BOOL LLCircuitData::collectRAck(TPACKETID packet_num)  	}  	mAcks.push_back(packet_num); +	if (mAckCreationTime == 0) +	{ +		mAckCreationTime = getAgeInSeconds(); +	}  	return TRUE;  }  // this method is called during the message system processAcks() to  // send out any acks that did not get sent already. -void LLCircuit::sendAcks() +void LLCircuit::sendAcks(F32 collect_time)  { +	collect_time = llclamp(collect_time, 0.f, LL_COLLECT_ACK_TIME_MAX);  	LLCircuitData* cd; -	circuit_data_map::iterator end = mSendAckMap.end(); -	for(circuit_data_map::iterator it = mSendAckMap.begin(); it != end; ++it) +	circuit_data_map::iterator it = mSendAckMap.begin(); +	while (it != mSendAckMap.end())  	{ -		cd = (*it).second; - +		circuit_data_map::iterator cur_it = it++; +		cd = (*cur_it).second;  		S32 count = (S32)cd->mAcks.size(); -		if(count > 0) +		F32 age = cd->getAgeInSeconds() - cd->mAckCreationTime; +		if (age > collect_time || count == 0)  		{ -			// send the packet acks -			S32 acks_this_packet = 0; -			for(S32 i = 0; i < count; ++i) +			if (count>0)  			{ -				if(acks_this_packet == 0) +				// send the packet acks +				S32 acks_this_packet = 0; +				for(S32 i = 0; i < count; ++i)  				{ -					gMessageSystem->newMessageFast(_PREHASH_PacketAck); +					if(acks_this_packet == 0) +					{ +						gMessageSystem->newMessageFast(_PREHASH_PacketAck); +					} +					gMessageSystem->nextBlockFast(_PREHASH_Packets); +					gMessageSystem->addU32Fast(_PREHASH_ID, cd->mAcks[i]); +					++acks_this_packet; +					if(acks_this_packet > 250) +					{ +						gMessageSystem->sendMessage(cd->mHost); +						acks_this_packet = 0; +					}  				} -				gMessageSystem->nextBlockFast(_PREHASH_Packets); -				gMessageSystem->addU32Fast(_PREHASH_ID, cd->mAcks[i]); -				++acks_this_packet; -				if(acks_this_packet > 250) +				if(acks_this_packet > 0)  				{  					gMessageSystem->sendMessage(cd->mHost); -					acks_this_packet = 0;  				} -			} -			if(acks_this_packet > 0) -			{ -				gMessageSystem->sendMessage(cd->mHost); -			} -			if(gMessageSystem->mVerboseLog) -			{ -				std::ostringstream str; -				str << "MSG: -> " << cd->mHost << "\tPACKET ACKS:\t"; -				std::ostream_iterator<TPACKETID> append(str, " "); -				std::copy(cd->mAcks.begin(), cd->mAcks.end(), append); -				LL_INFOS() << str.str() << LL_ENDL; -			} +				if(gMessageSystem->mVerboseLog) +				{ +					std::ostringstream str; +					str << "MSG: -> " << cd->mHost << "\tPACKET ACKS:\t"; +					std::ostream_iterator<TPACKETID> append(str, " "); +					std::copy(cd->mAcks.begin(), cd->mAcks.end(), append); +					LL_INFOS() << str.str() << LL_ENDL; +				} -			// empty out the acks list -			cd->mAcks.clear(); +				// empty out the acks list +				cd->mAcks.clear(); +				cd->mAckCreationTime = 0.f; +			} +			// remove data map +			mSendAckMap.erase(cur_it);  		}  	} - -	// All acks have been sent, clear the map -	mSendAckMap.clear();  } diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h index 5b109fc218..b8021bc9f0 100755 --- a/indra/llmessage/llcircuit.h +++ b/indra/llmessage/llcircuit.h @@ -60,6 +60,7 @@ const U8 LL_PACKET_ID_SIZE = 6;  const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100;  const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200; +const F32 LL_COLLECT_ACK_TIME_MAX = 2.f;  //  // Prototypes and Predefines @@ -237,6 +238,7 @@ protected:  	packet_time_map							mPotentialLostPackets;  	packet_time_map							mRecentlyReceivedReliablePackets;  	std::vector<TPACKETID> mAcks; +	F32 mAckCreationTime; // first ack creation time  	typedef std::map<TPACKETID, LLReliablePacket *> reliable_map;  	typedef reliable_map::iterator					reliable_iter; @@ -302,7 +304,7 @@ public:  	// this method is called during the message system processAcks()  	// to send out any acks that did not get sent already.  -	void sendAcks(); +	void sendAcks(F32 collect_time);  	friend std::ostream& operator<<(std::ostream& s, LLCircuit &circuit);  	void getInfo(LLSD& info) const; @@ -333,6 +335,7 @@ protected:  	circuit_data_map mCircuitData;  	typedef std::set<LLCircuitData *, LLCircuitData::less> ping_set_t; // Circuits sorted by next ping time +  	ping_set_t mPingSet;  	// This variable points to the last circuit data we found to diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index cc2d5d66ad..3d81bf31d5 100755 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -787,7 +787,7 @@ S32	LLMessageSystem::getReceiveBytes() const  } -void LLMessageSystem::processAcks() +void LLMessageSystem::processAcks(F32 collect_time)  {  	F64Seconds mt_sec = getMessageTimeSeconds();  	{ @@ -813,7 +813,7 @@ void LLMessageSystem::processAcks()  		mCircuitInfo.resendUnackedPackets(mUnackedListDepth, mUnackedListSize);  		//cycle through ack list for each host we need to send acks to -		mCircuitInfo.sendAcks(); +		mCircuitInfo.sendAcks(collect_time);  		if (!mDenyTrustedCircuitSet.empty())  		{ diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h index da06b64506..348b09b992 100755 --- a/indra/llmessage/message.h +++ b/indra/llmessage/message.h @@ -331,7 +331,7 @@ public:  	BOOL	poll(F32 seconds); // Number of seconds that we want to block waiting for data, returns if data was received  	BOOL	checkMessages( S64 frame_count = 0 ); -	void	processAcks(); +	void	processAcks(F32 collect_time = 0.f);  	BOOL	isMessageFast(const char *msg);  	BOOL	isMessage(const char *msg) diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index e0f69dc2d3..5c6b3d5fab 100755 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1383,5 +1383,7 @@ char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->  char const* const _PREHASH_AppearanceData = LLMessageStringTable::getInstance()->getString("AppearanceData");  char const* const _PREHASH_AppearanceVersion = LLMessageStringTable::getInstance()->getString("AppearanceVersion");  char const* const _PREHASH_CofVersion = LLMessageStringTable::getInstance()->getString("CofVersion"); +char const* const _PREHASH_AppearanceHover = LLMessageStringTable::getInstance()->getString("AppearanceHover"); +char const* const _PREHASH_HoverHeight = LLMessageStringTable::getInstance()->getString("HoverHeight");  char const* const _PREHASH_Experience = LLMessageStringTable::getInstance()->getString("Experience");  char const* const _PREHASH_ExperienceID = LLMessageStringTable::getInstance()->getString("ExperienceID"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index fb8dcc17fb..e696c3b0ca 100755 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1383,6 +1383,8 @@ extern char const* const _PREHASH_GroupAVSounds;  extern char const* const _PREHASH_AppearanceData;  extern char const* const _PREHASH_AppearanceVersion;  extern char const* const _PREHASH_CofVersion; +extern char const* const _PREHASH_AppearanceHover; +extern char const* const _PREHASH_HoverHeight;  extern char const* const _PREHASH_Experience;  extern char const* const _PREHASH_ExperienceID;  #endif  | 
