mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 12:28:02 +02:00
added averages for bits per voxel and elapsed time
This commit is contained in:
parent
c3fa37019e
commit
70c6ed040c
2 changed files with 33 additions and 11 deletions
|
@ -13,9 +13,10 @@
|
||||||
#include "VoxelSceneStats.h"
|
#include "VoxelSceneStats.h"
|
||||||
|
|
||||||
|
|
||||||
VoxelSceneStats::VoxelSceneStats() {
|
VoxelSceneStats::VoxelSceneStats() : _elapsedAverage(100), _bitsPerVoxelAverage(100) {
|
||||||
reset();
|
reset();
|
||||||
_readyToSend = false;
|
_readyToSend = false;
|
||||||
|
_started = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
VoxelSceneStats::~VoxelSceneStats() {
|
VoxelSceneStats::~VoxelSceneStats() {
|
||||||
|
@ -23,6 +24,7 @@ VoxelSceneStats::~VoxelSceneStats() {
|
||||||
|
|
||||||
void VoxelSceneStats::sceneStarted(bool fullScene, bool moving, VoxelNode* root) {
|
void VoxelSceneStats::sceneStarted(bool fullScene, bool moving, VoxelNode* root) {
|
||||||
reset(); // resets packet and voxel stats
|
reset(); // resets packet and voxel stats
|
||||||
|
_started = true;
|
||||||
_start = usecTimestampNow();
|
_start = usecTimestampNow();
|
||||||
_totalVoxels = root->getSubTreeNodeCount();
|
_totalVoxels = root->getSubTreeNodeCount();
|
||||||
_totalInternal = root->getSubTreeInternalNodeCount();
|
_totalInternal = root->getSubTreeInternalNodeCount();
|
||||||
|
@ -33,11 +35,15 @@ void VoxelSceneStats::sceneStarted(bool fullScene, bool moving, VoxelNode* root)
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelSceneStats::sceneCompleted() {
|
void VoxelSceneStats::sceneCompleted() {
|
||||||
_end = usecTimestampNow();
|
if (_started) {
|
||||||
_elapsed = _end - _start;
|
_end = usecTimestampNow();
|
||||||
|
_elapsed = _end - _start;
|
||||||
|
_elapsedAverage.updateAverage((float)_elapsed);
|
||||||
|
|
||||||
_statsMessageLength = packIntoMessage(_statsMessage, sizeof(_statsMessage));
|
_statsMessageLength = packIntoMessage(_statsMessage, sizeof(_statsMessage));
|
||||||
_readyToSend = true;
|
_readyToSend = true;
|
||||||
|
_started = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelSceneStats::encodeStarted() {
|
void VoxelSceneStats::encodeStarted() {
|
||||||
|
@ -356,6 +362,13 @@ int VoxelSceneStats::unpackFromMessage(unsigned char* sourceBuffer, int availabl
|
||||||
sourceBuffer += sizeof(_existsInPacketBitsWritten);
|
sourceBuffer += sizeof(_existsInPacketBitsWritten);
|
||||||
memcpy(&_treesRemoved, sourceBuffer, sizeof(_treesRemoved));
|
memcpy(&_treesRemoved, sourceBuffer, sizeof(_treesRemoved));
|
||||||
sourceBuffer += sizeof(_treesRemoved);
|
sourceBuffer += sizeof(_treesRemoved);
|
||||||
|
|
||||||
|
// running averages
|
||||||
|
_elapsedAverage.updateAverage((float)_elapsed);
|
||||||
|
unsigned long total = _existsInPacketBitsWritten + _colorSent;
|
||||||
|
float calculatedBPV = total == 0 ? 0 : (_bytes * 8) / total;
|
||||||
|
_bitsPerVoxelAverage.updateAverage(calculatedBPV);
|
||||||
|
|
||||||
|
|
||||||
return sourceBuffer - startPosition; // includes header!
|
return sourceBuffer - startPosition; // includes header!
|
||||||
}
|
}
|
||||||
|
@ -432,13 +445,17 @@ VoxelSceneStats::ItemInfo VoxelSceneStats::_ITEMS[] = {
|
||||||
|
|
||||||
char* VoxelSceneStats::getItemValue(int item) {
|
char* VoxelSceneStats::getItemValue(int item) {
|
||||||
const uint64_t USECS_PER_SECOND = 1000 * 1000;
|
const uint64_t USECS_PER_SECOND = 1000 * 1000;
|
||||||
int calcFPS;
|
int calcFPS, calcAverageFPS, calculatedKBPS;
|
||||||
int calculatedKBPS;
|
|
||||||
switch(item) {
|
switch(item) {
|
||||||
case ITEM_ELAPSED:
|
case ITEM_ELAPSED: {
|
||||||
calcFPS = (float)USECS_PER_SECOND / (float)_elapsed;
|
calcFPS = (float)USECS_PER_SECOND / (float)_elapsed;
|
||||||
sprintf(_itemValueBuffer, "%llu usecs (%d fps)", _elapsed, calcFPS);
|
float elapsedAverage = _elapsedAverage.getAverage();
|
||||||
|
calcAverageFPS = (float)USECS_PER_SECOND / (float)elapsedAverage;
|
||||||
|
|
||||||
|
sprintf(_itemValueBuffer, "%llu usecs (%d fps) Average: %.0f usecs (%d fps)",
|
||||||
|
_elapsed, calcFPS, elapsedAverage, calcAverageFPS);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ITEM_ENCODE:
|
case ITEM_ENCODE:
|
||||||
calcFPS = (float)USECS_PER_SECOND / (float)_totalEncodeTime;
|
calcFPS = (float)USECS_PER_SECOND / (float)_totalEncodeTime;
|
||||||
sprintf(_itemValueBuffer, "%llu usecs (%d fps)", _totalEncodeTime, calcFPS);
|
sprintf(_itemValueBuffer, "%llu usecs (%d fps)", _totalEncodeTime, calcFPS);
|
||||||
|
@ -457,8 +474,9 @@ char* VoxelSceneStats::getItemValue(int item) {
|
||||||
case ITEM_VOXELS: {
|
case ITEM_VOXELS: {
|
||||||
unsigned long total = _existsInPacketBitsWritten + _colorSent;
|
unsigned long total = _existsInPacketBitsWritten + _colorSent;
|
||||||
float calculatedBPV = total == 0 ? 0 : (_bytes * 8) / total;
|
float calculatedBPV = total == 0 ? 0 : (_bytes * 8) / total;
|
||||||
sprintf(_itemValueBuffer, "%lu (%.2f bits/voxel) %lu internal %lu leaves",
|
float averageBPV = _bitsPerVoxelAverage.getAverage();
|
||||||
total, calculatedBPV, _existsInPacketBitsWritten, _colorSent);
|
sprintf(_itemValueBuffer, "%lu (%.2f bits/voxel Average: %.2f bits/voxel) %lu internal %lu leaves",
|
||||||
|
total, calculatedBPV, averageBPV, _existsInPacketBitsWritten, _colorSent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ITEM_TRAVERSED: {
|
case ITEM_TRAVERSED: {
|
||||||
|
|
|
@ -84,9 +84,13 @@ private:
|
||||||
int _statsMessageLength;
|
int _statsMessageLength;
|
||||||
|
|
||||||
// scene timing data in usecs
|
// scene timing data in usecs
|
||||||
|
bool _started;
|
||||||
uint64_t _start;
|
uint64_t _start;
|
||||||
uint64_t _end;
|
uint64_t _end;
|
||||||
uint64_t _elapsed;
|
uint64_t _elapsed;
|
||||||
|
|
||||||
|
SimpleMovingAverage _elapsedAverage;
|
||||||
|
SimpleMovingAverage _bitsPerVoxelAverage;
|
||||||
|
|
||||||
uint64_t _totalEncodeTime;
|
uint64_t _totalEncodeTime;
|
||||||
uint64_t _encodeStart;
|
uint64_t _encodeStart;
|
||||||
|
|
Loading…
Reference in a new issue