From: <kha...@us...> - 2008-05-04 00:37:26
|
Revision: 1472 http://planeshift.svn.sourceforge.net/planeshift/?rev=1472&view=rev Author: khakilord Date: 2008-05-03 17:37:33 -0700 (Sat, 03 May 2008) Log Message: ----------- Fixes for netcode profiling from trunk Modified Paths: -------------- stable/src/common/net/netbase.cpp stable/src/common/net/netbase.h stable/src/server/netmanager.cpp Modified: stable/src/common/net/netbase.cpp =================================================================== --- stable/src/common/net/netbase.cpp 2008-05-04 00:35:25 UTC (rev 1471) +++ stable/src/common/net/netbase.cpp 2008-05-04 00:37:33 UTC (rev 1472) @@ -95,6 +95,7 @@ for(int i =0;i < RESENDAVGCOUNT;i++) resends[i] = 0; avgIndex = resendIndex = 0; + lastSendReport = csGetTicks(); } NetBase::~NetBase() @@ -435,6 +436,8 @@ #ifdef PACKETDEBUG Debug2(LOG_NET,0,"No packet in ack queue :%d\n", pkt->packet->pktid); #endif + else + pkt->DecRef(); } } if(pkts.GetSize() > 0) @@ -635,10 +638,11 @@ csString status; if(timeTaken > 50) status.Format("Sending network messages has taken %u time to process, for %u senders and %u messages.", timeTaken, senderCount, sentCount); - status.AppendFmt("Network average statistics: %f senders, %f messages per sender, %f time per message. Peak %u senders, %f messages/sender %u time", sendAvg, messagesAvg, timeAvg, peakSenders, peakMessagesPerSender, peakTime); + status.AppendFmt("Network average statistics for last %u ticks: %f senders, %f messages per sender, %f time per message. Peak %u senders, %f messages/sender %u time", csGetTicks() - lastSendReport, sendAvg, messagesAvg, timeAvg, peakSenders, peakMessagesPerSender, peakTime); CPrintf(CON_WARNING, "%s\n", (const char *) status.GetData()); if(LogCSV::GetSingletonPtr()) LogCSV::GetSingleton().Write(CSV_STATUS, status); + lastSendReport = csGetTicks(); } if(senderCount > 0) Modified: stable/src/common/net/netbase.h =================================================================== --- stable/src/common/net/netbase.h 2008-05-04 00:35:25 UTC (rev 1471) +++ stable/src/common/net/netbase.h 2008-05-04 00:37:33 UTC (rev 1472) @@ -34,7 +34,7 @@ #define NUM_BROADCAST 0xffffffff #define MAXQUEUESIZE 20000 #define MAXPACKETHISTORY 200 -#define NETAVGCOUNT 200 +#define NETAVGCOUNT 400 #define RESENDAVGCOUNT 200 // The number of times the SendTo function will retry on a EAGAIN or EWOULDBLOCK @@ -504,6 +504,20 @@ /** total packages transferred by this object */ int totalcountin, totalcountout; + /** Moving averages */ + typedef struct { + unsigned int senders; + unsigned int messages; + csTicks time; + } SendQueueStats_t; + + SendQueueStats_t sendStats[NETAVGCOUNT]; + csTicks lastSendReport; + unsigned int avgIndex; + + unsigned int resends[RESENDAVGCOUNT]; + unsigned int resendIndex; + psNetMsgProfiles * profs; private: @@ -532,19 +546,9 @@ /** LogMessage filter setting */ csArray<int> logmessagefilter; - - /** Moving averages */ - typedef struct { - unsigned int senders; - unsigned int messages; - csTicks time; - } SendQueueStats_t; - - SendQueueStats_t sendStats[NETAVGCOUNT]; - unsigned int avgIndex; - unsigned int resends[RESENDAVGCOUNT]; - unsigned int resendIndex; + + typedef struct { bool invert; bool filterhex; Modified: stable/src/server/netmanager.cpp =================================================================== --- stable/src/server/netmanager.cpp 2008-05-04 00:35:25 UTC (rev 1471) +++ stable/src/server/netmanager.cpp 2008-05-04 00:37:33 UTC (rev 1472) @@ -166,6 +166,7 @@ if (!outqueue) { awaitingack.Delete(pkt); + pkt->DecRef(); continue; } @@ -199,8 +200,41 @@ Debug2(LOG_NET,"No packet in ack queue :%d\n", pkt->packet->pktid); #endif } + else + pkt->DecRef(); } + if(pkts.GetSize() > 0) + { + resends[resendIndex] = pkts.GetSize(); + resendIndex = (resendIndex + 1) % RESENDAVGCOUNT; + + csTicks timeTaken = csGetTicks() - currenttime; + if(pkts.GetSize() > 300 || resendIndex == 1 || timeTaken > 50) + { + unsigned int peakResend = 0; + float resendAvg = 0.0f; + // Calculate averages data here + for(int i = 0; i < RESENDAVGCOUNT; i++) + { + resendAvg += resends[i]; + peakResend = MAX(peakResend, resends[i]); + } + resendAvg /= RESENDAVGCOUNT; + csString status; + if(timeTaken > 50) + { + status.Format("Resending high priority packets has taken %u time to process, for %u packets.", timeTaken, (unsigned int) pkts.GetSize()); + CPrintf(CON_WARNING, "%s\n", (const char *) status.GetData()); + } + status.AppendFmt("Resending non-acked packet statistics: %f average resends, peak of %u resent packets", resendAvg, peakResend); + + if(LogCSV::GetSingletonPtr()) + LogCSV::GetSingleton().Write(CSV_STATUS, status); + } + + } + } NetManager::Connection *NetManager::GetConnByIP (LPSOCKADDR_IN addr) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |