| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- //
- // Filename: netstats.h
- // Project: wwnet
- // Author: Tom Spencer-Smith
- // Date: Oct 1998
- // Description:
- //
- //-----------------------------------------------------------------------------
- #if defined(_MSV_VER)
- #pragma once
- #endif
- #ifndef NETSTATS_H
- #define NETSTATS_H
- #include "bittype.h"
- #include "wwdebug.h"
- //
- // Statistics.
- // Abbrev:
- // R = Reliable
- // U = Unreliable
- // Pkt = packet
- // Rcv = Received
- // App = Application
- // Hdr = Header
- // Byte = bytes, including header
- //
- // Syntax is U/R then Pkt/Byte/AppByte then Sent/Rcv
- //
- typedef enum Statistic
- {
- STAT_PktSent,
- STAT_PktRcv,
- STAT_MsgSent, // Need to count separately since messages can be combined
- STAT_MsgRcv, // into packets TSS - bug: this not accurate because of combining
- STAT_AppByteSent,
- STAT_AppByteRcv,
- //STAT_HdrByteSent,
- //STAT_HdrByteRcv,
- STAT_BitsSent,
- STAT_BitsRcv,
- STAT_UPktSent,
- STAT_RPktSent,
- STAT_UByteSent,
- STAT_RByteSent,
- STAT_UPktRcv,
- STAT_RPktRcv,
- STAT_UByteRcv,
- STAT_RByteRcv,
- /*
- STAT_AppDataSentPc, // App / (App + Hdr)
- STAT_AppDataRcvPc, // App / (App + Hdr)
- */
- STAT_AckCountSent,
- STAT_AckCountRcv,
- STAT_DiscardCount,
- STAT_ResendCount,
- STAT_SendFailureCount,
- STAT_PktRcvRemote,
- STAT_UPktShouldRcv,
- STAT_UPktRcv2, // used in packetloss calculations. Slightly less than STAT_UPktRcv
- STAT_ServiceCount,
- STAT_COUNT // must include, used as array bound
- };
- //-----------------------------------------------------------------------------
- class cNetStats
- {
- public:
- cNetStats();
- ~cNetStats() {};
- void Init_Net_Stats();
- bool Update_If_Sample_Done(int this_frame_time, bool force_update = false);
- double Get_Pc_Packetloss_Received() const;
- void Set_Pc_Packetloss_Sent(double packetloss_pc);
- double Get_Pc_Packetloss_Sent() const {return RemotePacketloss;}
- int Get_Remote_Service_Count() {return RemoteServiceCount;}
- void Set_Remote_Service_Count(int remote_service_count);
- int Get_Sample_Start_Time() const {return SampleStartTime;}
- int Get_Last_Unreliable_Packet_Id() const {return LastUnreliablePacketId;}
- void Set_Last_Unreliable_Packet_Id(int id) {LastUnreliablePacketId = id;}
- int Get_Freeze_Packet_Id() const {return FreezePacketId;}
- void Increment_Unreliable_Count() {UnreliableCount++;}
- UINT Get_Stat_Sample(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatSample[stat];}
- UINT Get_Stat_Macro_Sample(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatMacroSample[stat];}
- UINT Get_Stat_Snapshot(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatSnapshot[stat];}
- UINT Get_Stat_Macro_Snapshot(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatMacroSnapshot[stat];}
- UINT Get_Stat_Total(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatTotal[stat];}
- UINT Get_Stat_Average(int stat) const {WWASSERT(stat >= 0 && stat < STAT_COUNT); return StatAverage[stat];}
- void Increment_Stat_Sample(int stat, UINT increment) {WWASSERT(stat >= 0 && stat < STAT_COUNT); StatSample[stat] += increment;}
- void Increment_Stat_Macro_Sample(int stat, UINT increment) {WWASSERT(stat >= 0 && stat < STAT_COUNT); StatMacroSample[stat] += increment;}
- void Increment_Stat_Snapshot(int stat, UINT increment) {WWASSERT(stat >= 0 && stat < STAT_COUNT); StatSnapshot[stat] += increment;}
- void Increment_Stat_Macro_Snapshot(int stat, UINT increment){WWASSERT(stat >= 0 && stat < STAT_COUNT); StatMacroSnapshot[stat] += increment;}
- void Increment_Stat_Total(int stat, UINT increment) {WWASSERT(stat >= 0 && stat < STAT_COUNT); StatTotal[stat] += increment;}
- void Increment_Stat_Average(int stat, UINT increment) {WWASSERT(stat >= 0 && stat < STAT_COUNT); StatAverage[stat] += increment;}
- //
- // TSS - shift these down, and use above access operators
- //
- UINT StatSample[STAT_COUNT];
- UINT StatMacroSample[STAT_COUNT];
- UINT StatSnapshot[STAT_COUNT];
- UINT StatMacroSnapshot[STAT_COUNT];
- UINT StatTotal[STAT_COUNT];
- UINT StatAverage[STAT_COUNT];
- private:
- cNetStats(const cNetStats& source); // Disallow copy (compile/link time)
- cNetStats& operator=(const cNetStats& rhs); // Disallow assignment (compile/link time)
- //int PrevLastUnreliable;
- unsigned long SampleStartTime;
- int LastUnreliablePacketId;
- int FreezePacketId;
- int UnreliableCount;
- unsigned long StartTime;
- double RemotePacketloss;
- int RemoteServiceCount;
- };
- //-----------------------------------------------------------------------------
- #endif // NETSTATS_H
- //static const USHORT SAMPLE_TIME; // stats gathering period in ms
|