Multiplayer replay: added properties showing memory usage info.
This commit is contained in:
parent
e7b1f3f52e
commit
4de00657c9
4 changed files with 103 additions and 14 deletions
|
@ -317,18 +317,18 @@ FGFlightRecorder::processSignalList(const char* pSignalType, TSignalList& Signal
|
||||||
* If pBuffer!=NULL memory of given buffer is reused.
|
* If pBuffer!=NULL memory of given buffer is reused.
|
||||||
*/
|
*/
|
||||||
FGReplayData*
|
FGReplayData*
|
||||||
FGFlightRecorder::capture(double SimTime, FGReplayData* pRecycledBuffer)
|
FGFlightRecorder::capture(double SimTime, FGReplayData* ReplayData)
|
||||||
{
|
{
|
||||||
if (!pRecycledBuffer)
|
if (!ReplayData)
|
||||||
{
|
{
|
||||||
pRecycledBuffer = new FGReplayData;
|
ReplayData = new FGReplayData;
|
||||||
if (!pRecycledBuffer)
|
if (!ReplayData)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
int Offset = 0;
|
int Offset = 0;
|
||||||
pRecycledBuffer->sim_time = SimTime;
|
ReplayData->sim_time = SimTime;
|
||||||
pRecycledBuffer->raw_data.resize( m_TotalRecordSize);
|
ReplayData->raw_data.resize( m_TotalRecordSize);
|
||||||
char* pBuffer = &pRecycledBuffer->raw_data.front();
|
char* pBuffer = &ReplayData->raw_data.front();
|
||||||
|
|
||||||
// 64bit aligned data first!
|
// 64bit aligned data first!
|
||||||
{
|
{
|
||||||
|
@ -407,10 +407,10 @@ FGFlightRecorder::capture(double SimTime, FGReplayData* pRecycledBuffer)
|
||||||
|
|
||||||
// If m_ReplayMultiplayer is true, move all recent
|
// If m_ReplayMultiplayer is true, move all recent
|
||||||
// multiplayer messages from m_MultiplayMgr into
|
// multiplayer messages from m_MultiplayMgr into
|
||||||
// pRecycledBuffer->multiplayer_messages. Otherwise clear m_MultiplayMgr's
|
// ReplayData->multiplayer_messages. Otherwise clear m_MultiplayMgr's
|
||||||
// list of recent messages.
|
// list of recent messages.
|
||||||
//
|
//
|
||||||
pRecycledBuffer->multiplayer_messages.clear();
|
ReplayData->multiplayer_messages.clear();
|
||||||
bool replayMultiplayer = m_ReplayMultiplayer->getBoolValue();
|
bool replayMultiplayer = m_ReplayMultiplayer->getBoolValue();
|
||||||
for(;;) {
|
for(;;) {
|
||||||
auto MultiplayerMessage = m_MultiplayMgr->popMessageHistory();
|
auto MultiplayerMessage = m_MultiplayMgr->popMessageHistory();
|
||||||
|
@ -418,11 +418,12 @@ FGFlightRecorder::capture(double SimTime, FGReplayData* pRecycledBuffer)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (replayMultiplayer) {
|
if (replayMultiplayer) {
|
||||||
pRecycledBuffer->multiplayer_messages.push_back( MultiplayerMessage);
|
ReplayData->multiplayer_messages.push_back( MultiplayerMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ReplayData->UpdateStats();
|
||||||
|
|
||||||
return pRecycledBuffer;
|
return ReplayData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Do interpolation as defined by given interpolation type and weighting ratio. */
|
/** Do interpolation as defined by given interpolation type and weighting ratio. */
|
||||||
|
|
|
@ -55,6 +55,69 @@ using simgear::gzContainerWriter;
|
||||||
/** Magic string to verify valid FG flight recorder tapes. */
|
/** Magic string to verify valid FG flight recorder tapes. */
|
||||||
static const char* const FlightRecorderFileMagic = "FlightGear Flight Recorder Tape";
|
static const char* const FlightRecorderFileMagic = "FlightGear Flight Recorder Tape";
|
||||||
|
|
||||||
|
void FGReplayData::UpdateStats()
|
||||||
|
{
|
||||||
|
size_t bytes_raw_data_old = m_bytes_raw_data;
|
||||||
|
size_t bytes_multiplayer_messages_old = m_bytes_multiplayer_messages;
|
||||||
|
size_t num_multiplayer_messages_old = m_num_multiplayer_messages;
|
||||||
|
|
||||||
|
m_bytes_raw_data = raw_data.size();
|
||||||
|
m_bytes_multiplayer_messages = 0;
|
||||||
|
for ( auto m: multiplayer_messages) {
|
||||||
|
m_bytes_multiplayer_messages += m->size();
|
||||||
|
}
|
||||||
|
m_num_multiplayer_messages = multiplayer_messages.size();
|
||||||
|
|
||||||
|
// Update global stats by adding how much we have changed since last time
|
||||||
|
// UpdateStats() was called.
|
||||||
|
//
|
||||||
|
s_bytes_raw_data += m_bytes_raw_data - bytes_raw_data_old;
|
||||||
|
s_bytes_multiplayer_messages += m_bytes_multiplayer_messages - bytes_multiplayer_messages_old;
|
||||||
|
s_num_multiplayer_messages += m_num_multiplayer_messages - num_multiplayer_messages_old;
|
||||||
|
|
||||||
|
if (!s_prop_num) s_prop_num = fgGetNode("/sim/replay/datastats_num", true);
|
||||||
|
if (!s_prop_bytes_raw_data) s_prop_bytes_raw_data = fgGetNode("/sim/replay/datastats_bytes_raw_data", true);
|
||||||
|
if (!s_prop_bytes_multiplayer_messages) s_prop_bytes_multiplayer_messages = fgGetNode("/sim/replay/datastats_bytes_multiplayer_messages", true);
|
||||||
|
if (!s_prop_num_multiplayer_messages) s_prop_num_multiplayer_messages = fgGetNode("/sim/replay/datastats_num_multiplayer_messages", true);
|
||||||
|
|
||||||
|
s_prop_num->setLongValue(s_num);
|
||||||
|
s_prop_bytes_raw_data->setLongValue(s_bytes_raw_data);
|
||||||
|
s_prop_bytes_multiplayer_messages->setLongValue(s_bytes_multiplayer_messages);
|
||||||
|
s_prop_num_multiplayer_messages->setLongValue(s_num_multiplayer_messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
FGReplayData::FGReplayData()
|
||||||
|
{
|
||||||
|
s_num += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
FGReplayData::~FGReplayData()
|
||||||
|
{
|
||||||
|
s_bytes_raw_data -= m_bytes_raw_data;
|
||||||
|
s_bytes_multiplayer_messages -= m_bytes_multiplayer_messages;
|
||||||
|
s_num_multiplayer_messages -= m_num_multiplayer_messages;
|
||||||
|
s_num -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FGReplayData::resetStatisticsProperties()
|
||||||
|
{
|
||||||
|
s_prop_num.reset();
|
||||||
|
s_prop_bytes_raw_data.reset();
|
||||||
|
s_prop_bytes_multiplayer_messages.reset();
|
||||||
|
s_prop_num_multiplayer_messages.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t FGReplayData::s_num = 0;
|
||||||
|
size_t FGReplayData::s_bytes_raw_data = 0;
|
||||||
|
size_t FGReplayData::s_bytes_multiplayer_messages = 0;
|
||||||
|
size_t FGReplayData::s_num_multiplayer_messages = 0;
|
||||||
|
|
||||||
|
SGPropertyNode_ptr FGReplayData::s_prop_num;
|
||||||
|
SGPropertyNode_ptr FGReplayData::s_prop_bytes_raw_data;
|
||||||
|
SGPropertyNode_ptr FGReplayData::s_prop_bytes_multiplayer_messages;
|
||||||
|
SGPropertyNode_ptr FGReplayData::s_prop_num_multiplayer_messages;
|
||||||
|
|
||||||
|
|
||||||
namespace ReplayContainer
|
namespace ReplayContainer
|
||||||
{
|
{
|
||||||
enum Type
|
enum Type
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
class FGFlightRecorder;
|
class FGFlightRecorder;
|
||||||
|
|
||||||
typedef struct {
|
struct FGReplayData {
|
||||||
|
|
||||||
double sim_time;
|
double sim_time;
|
||||||
// Our aircraft state.
|
// Our aircraft state.
|
||||||
|
@ -47,7 +47,30 @@ typedef struct {
|
||||||
|
|
||||||
// Incoming multiplayer messages.
|
// Incoming multiplayer messages.
|
||||||
std::vector<std::shared_ptr<std::vector<char>>> multiplayer_messages;
|
std::vector<std::shared_ptr<std::vector<char>>> multiplayer_messages;
|
||||||
} FGReplayData;
|
|
||||||
|
// Updates static statistics defined below.
|
||||||
|
void UpdateStats();
|
||||||
|
|
||||||
|
// Resets out static property nodes; to be called by fgStartNewReset().
|
||||||
|
static void resetStatisticsProperties();
|
||||||
|
|
||||||
|
FGReplayData();
|
||||||
|
~FGReplayData();
|
||||||
|
|
||||||
|
size_t m_bytes_raw_data = 0;
|
||||||
|
size_t m_bytes_multiplayer_messages = 0;
|
||||||
|
size_t m_num_multiplayer_messages = 0;
|
||||||
|
|
||||||
|
// Statistics about replay data, also properties /sim/replay/datastats_*.
|
||||||
|
static size_t s_num;
|
||||||
|
static size_t s_bytes_raw_data;
|
||||||
|
static size_t s_bytes_multiplayer_messages;
|
||||||
|
static size_t s_num_multiplayer_messages;
|
||||||
|
static SGPropertyNode_ptr s_prop_num;
|
||||||
|
static SGPropertyNode_ptr s_prop_bytes_raw_data;
|
||||||
|
static SGPropertyNode_ptr s_prop_bytes_multiplayer_messages;
|
||||||
|
static SGPropertyNode_ptr s_prop_num_multiplayer_messages;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double sim_time;
|
double sim_time;
|
||||||
|
|
|
@ -1359,6 +1359,8 @@ void fgStartNewReset()
|
||||||
|
|
||||||
fgOSResetProperties();
|
fgOSResetProperties();
|
||||||
|
|
||||||
|
FGReplayData::resetStatisticsProperties();
|
||||||
|
|
||||||
// init some things manually
|
// init some things manually
|
||||||
// which do not follow the regular init pattern
|
// which do not follow the regular init pattern
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue