added averages for bits per voxel and elapsed time

This commit is contained in:
ZappoMan 2013-07-21 07:21:23 -07:00
parent c3fa37019e
commit 70c6ed040c
2 changed files with 33 additions and 11 deletions

View file

@ -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: {

View file

@ -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;