diff --git a/libraries/voxels/src/VoxelSceneStats.cpp b/libraries/voxels/src/VoxelSceneStats.cpp new file mode 100644 index 0000000000..37422e471d --- /dev/null +++ b/libraries/voxels/src/VoxelSceneStats.cpp @@ -0,0 +1,76 @@ +// +// VoxelSceneStats.cpp +// hifi +// +// Created by Brad Hefta-Gaub on 7/18/13. +// +// + +#include "VoxelSceneStats.h" + +VoxelSceneStats::VoxelSceneStats() : + start(0), + end(0), + elapsed(0), + total(0), + traversed(0), + internal(0), + internalOutOfView(0), + internalOccluded(0), + internalDirty(0), + leaves(0), + leavesOutOfView(0), + leavesOccluded(0), + leavesDirty(0), + packets(0), + bytes(0), + passes(0), + elapsedUsecsToSend(0), + wasFinished(false), + wasMoving(false), + hadDeltaView(false), + hadOcclusionCulling(false) +{ +} + +VoxelSceneStats::~VoxelSceneStats() { +} + +void VoxelSceneStats::sceneStarted() { + start = usecTimestampNow(); +} + +void VoxelSceneStats::sceneCompleted() { + end = usecTimestampNow(); + elapsed = end - start; +} + +void VoxelSceneStats::reset() { + start = 0; + end= 0; + elapsed= 0; + + + total = 0; + traversed = 0; + internal = 0; + internalOutOfView = 0; + internalOccluded = 0; + internalDirty = 0; + leaves = 0; + leavesOutOfView = 0; + leavesOccluded = 0; + leavesDirty = 0; + packets = 0; + bytes = 0; + passes = 0; + wasFinished = false; + wasMoving = false; + hadDeltaView = false; + hadOcclusionCulling = false; +} + + +void VoxelSceneStats::printDebugDetails() { + qDebug("VoxelSceneStats: start: %llu, end: %llu, elapsed: %llu \n", start, end, elapsed); +} diff --git a/libraries/voxels/src/VoxelSceneStats.h b/libraries/voxels/src/VoxelSceneStats.h new file mode 100644 index 0000000000..c91e757236 --- /dev/null +++ b/libraries/voxels/src/VoxelSceneStats.h @@ -0,0 +1,51 @@ +// +// VoxelSceneStats.h +// hifi +// +// Created by Brad Hefta-Gaub on 7/18/13. +// +// + +#ifndef __hifi__VoxelSceneStats__ +#define __hifi__VoxelSceneStats__ + + +class VoxelSceneStats { +public: + VoxelSceneStats(); + ~VoxelSceneStats(); + void reset(); + void sceneStarted(); + void sceneCompleted(); + void printDebugDetails(); + + // scene timing data in usecs + uint64_t start; + uint64_t end; + uint64_t elapsed; + + // scene voxel related data + unsigned long total; + unsigned long traversed; + unsigned long internal; + unsigned long internalOutOfView; + unsigned long internalOccluded; + unsigned long internalDirty; + unsigned long leaves; + unsigned long leavesOutOfView; + unsigned long leavesOccluded; + unsigned long leavesDirty; + + // scene network related data + unsigned int packets; + unsigned int bytes; + unsigned int passes; + + // features related items + bool wasFinished; + bool wasMoving; + bool hadDeltaView; + bool hadOcclusionCulling; +}; + +#endif /* defined(__hifi__VoxelSceneStats__) */ diff --git a/voxel-server/src/VoxelNodeData.h b/voxel-server/src/VoxelNodeData.h index 96b61db963..988fcb5330 100644 --- a/voxel-server/src/VoxelNodeData.h +++ b/voxel-server/src/VoxelNodeData.h @@ -58,6 +58,9 @@ public: void setLastTimeBagEmpty(uint64_t lastTimeBagEmpty) { _lastTimeBagEmpty = lastTimeBagEmpty; }; bool getCurrentPacketIsColor() const { return _currentPacketIsColor; }; + + VoxelSceneStats stats; + private: VoxelNodeData(const VoxelNodeData &); VoxelNodeData& operator= (const VoxelNodeData&); diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index 5b1ad57861..65b3f5c5c4 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -204,9 +204,13 @@ void deepestLevelVoxelDistributor(NodeList* nodeList, printf("ENTIRE SCENE SENT! nodeData->setLastTimeBagEmpty(now=[%lld])\n", now); } } - + + nodeData->stats.sceneCompleted(); + nodeData->stats.printDebugDetails(); + // This is the start of "resending" the scene. nodeData->nodeBag.insert(serverTree.rootNode); + nodeData->stats.sceneStarted(); } // If we have something in our nodeBag, then turn them into packets and send them out...