move loading of voxel file to the persist thread so that assignment client will load voxel server faster

This commit is contained in:
ZappoMan 2013-10-14 12:42:15 -07:00
parent 1513003ecd
commit f0fc973db1
3 changed files with 33 additions and 23 deletions

View file

@ -8,7 +8,9 @@
// Threaded or non-threaded voxel persistence // Threaded or non-threaded voxel persistence
// //
#include <QDebug>
#include <NodeList.h> #include <NodeList.h>
#include <PerfStat.h>
#include <SharedUtil.h> #include <SharedUtil.h>
#include "VoxelPersistThread.h" #include "VoxelPersistThread.h"
@ -17,20 +19,43 @@
VoxelPersistThread::VoxelPersistThread(VoxelTree* tree, const char* filename, int persistInterval) : VoxelPersistThread::VoxelPersistThread(VoxelTree* tree, const char* filename, int persistInterval) :
_tree(tree), _tree(tree),
_filename(filename), _filename(filename),
_persistInterval(persistInterval) { _persistInterval(persistInterval),
_initialLoad(false) {
} }
bool VoxelPersistThread::process() { bool VoxelPersistThread::process() {
if (!_initialLoad) {
_initialLoad = true;
qDebug("loading voxels from file: %s...\n", _filename);
bool persistantFileRead = _tree->readFromSVOFile(_filename);
if (persistantFileRead) {
PerformanceWarning warn(true, "reaverageVoxelColors()", true);
// after done inserting all these voxels, then reaverage colors
_tree->reaverageVoxelColors(_tree->rootNode);
qDebug("Voxels reAveraged\n");
}
_tree->clearDirtyBit(); // the tree is clean since we just loaded it
qDebug("DONE loading voxels from file... fileRead=%s\n", debug::valueOf(persistantFileRead));
unsigned long nodeCount = _tree->rootNode->getSubTreeNodeCount();
unsigned long internalNodeCount = _tree->rootNode->getSubTreeInternalNodeCount();
unsigned long leafNodeCount = _tree->rootNode->getSubTreeLeafNodeCount();
qDebug("Nodes after loading scene %lu nodes %lu internal %lu leaves\n", nodeCount, internalNodeCount, leafNodeCount);
}
uint64_t MSECS_TO_USECS = 1000; uint64_t MSECS_TO_USECS = 1000;
usleep(_persistInterval * MSECS_TO_USECS); usleep(_persistInterval * MSECS_TO_USECS);
// check the dirty bit and persist here... // check the dirty bit and persist here...
if (_tree->isDirty()) { if (_tree->isDirty()) {
printf("saving voxels to file %s...\n",_filename); qDebug("saving voxels to file %s...\n",_filename);
_tree->writeToSVOFile(_filename); _tree->writeToSVOFile(_filename);
_tree->clearDirtyBit(); // tree is clean after saving _tree->clearDirtyBit(); // tree is clean after saving
printf("DONE saving voxels to file...\n"); qDebug("DONE saving voxels to file...\n");
} }
return isStillRunning(); // keep running till they terminate us return isStillRunning(); // keep running till they terminate us

View file

@ -28,6 +28,7 @@ private:
VoxelTree* _tree; VoxelTree* _tree;
const char* _filename; const char* _filename;
int _persistInterval; int _persistInterval;
bool _initialLoad;
}; };
#endif // __voxel_server__VoxelPersistThread__ #endif // __voxel_server__VoxelPersistThread__

View file

@ -300,8 +300,7 @@ void VoxelServer::run() {
} }
qDebug("wantVoxelPersist=%s\n", debug::valueOf(_wantVoxelPersist)); qDebug("wantVoxelPersist=%s\n", debug::valueOf(_wantVoxelPersist));
// if we want Voxel Persistence, load the local file now... // if we want Voxel Persistence, set up the local file and persist thread
bool persistantFileRead = false;
if (_wantVoxelPersist) { if (_wantVoxelPersist) {
// Check to see if the user passed in a command line option for setting packet send rate // Check to see if the user passed in a command line option for setting packet send rate
@ -314,25 +313,8 @@ void VoxelServer::run() {
strcpy(_voxelPersistFilename, LOCAL_VOXELS_PERSIST_FILE); strcpy(_voxelPersistFilename, LOCAL_VOXELS_PERSIST_FILE);
} }
qDebug("loading voxels from file: %s...\n", _voxelPersistFilename); qDebug("voxelPersistFilename=%s\n", _voxelPersistFilename);
persistantFileRead = _serverTree.readFromSVOFile(_voxelPersistFilename);
if (persistantFileRead) {
PerformanceWarning warn(_shouldShowAnimationDebug,
"persistVoxelsWhenDirty() - reaverageVoxelColors()", _shouldShowAnimationDebug);
// after done inserting all these voxels, then reaverage colors
_serverTree.reaverageVoxelColors(_serverTree.rootNode);
qDebug("Voxels reAveraged\n");
}
_serverTree.clearDirtyBit(); // the tree is clean since we just loaded it
qDebug("DONE loading voxels from file... fileRead=%s\n", debug::valueOf(persistantFileRead));
unsigned long nodeCount = _serverTree.rootNode->getSubTreeNodeCount();
unsigned long internalNodeCount = _serverTree.rootNode->getSubTreeInternalNodeCount();
unsigned long leafNodeCount = _serverTree.rootNode->getSubTreeLeafNodeCount();
qDebug("Nodes after loading scene %lu nodes %lu internal %lu leaves\n", nodeCount, internalNodeCount, leafNodeCount);
// now set up VoxelPersistThread // now set up VoxelPersistThread
_voxelPersistThread = new VoxelPersistThread(&_serverTree, _voxelPersistFilename); _voxelPersistThread = new VoxelPersistThread(&_serverTree, _voxelPersistFilename);
if (_voxelPersistThread) { if (_voxelPersistThread) {
@ -377,6 +359,8 @@ void VoxelServer::run() {
if (_voxelServerPacketProcessor) { if (_voxelServerPacketProcessor) {
_voxelServerPacketProcessor->initialize(true); _voxelServerPacketProcessor->initialize(true);
} }
qDebug("Now running...\n");
// loop to send to nodes requesting data // loop to send to nodes requesting data
while (true) { while (true) {