From f0fc973db12030aee369b2c985047b7e7b08224d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 14 Oct 2013 12:42:15 -0700 Subject: [PATCH] move loading of voxel file to the persist thread so that assignment client will load voxel server faster --- .../src/VoxelPersistThread.cpp | 31 +++++++++++++++++-- .../src/VoxelPersistThread.h | 1 + .../voxel-server-library/src/VoxelServer.cpp | 24 +++----------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/libraries/voxel-server-library/src/VoxelPersistThread.cpp b/libraries/voxel-server-library/src/VoxelPersistThread.cpp index ca40316d28..8ad2bfaa4d 100644 --- a/libraries/voxel-server-library/src/VoxelPersistThread.cpp +++ b/libraries/voxel-server-library/src/VoxelPersistThread.cpp @@ -8,7 +8,9 @@ // Threaded or non-threaded voxel persistence // +#include #include +#include #include #include "VoxelPersistThread.h" @@ -17,20 +19,43 @@ VoxelPersistThread::VoxelPersistThread(VoxelTree* tree, const char* filename, int persistInterval) : _tree(tree), _filename(filename), - _persistInterval(persistInterval) { + _persistInterval(persistInterval), + _initialLoad(false) { } 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; usleep(_persistInterval * MSECS_TO_USECS); // check the dirty bit and persist here... if (_tree->isDirty()) { - printf("saving voxels to file %s...\n",_filename); + qDebug("saving voxels to file %s...\n",_filename); _tree->writeToSVOFile(_filename); _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 diff --git a/libraries/voxel-server-library/src/VoxelPersistThread.h b/libraries/voxel-server-library/src/VoxelPersistThread.h index 68487da182..3219633702 100644 --- a/libraries/voxel-server-library/src/VoxelPersistThread.h +++ b/libraries/voxel-server-library/src/VoxelPersistThread.h @@ -28,6 +28,7 @@ private: VoxelTree* _tree; const char* _filename; int _persistInterval; + bool _initialLoad; }; #endif // __voxel_server__VoxelPersistThread__ diff --git a/libraries/voxel-server-library/src/VoxelServer.cpp b/libraries/voxel-server-library/src/VoxelServer.cpp index 8aa88420d2..e4517672a0 100644 --- a/libraries/voxel-server-library/src/VoxelServer.cpp +++ b/libraries/voxel-server-library/src/VoxelServer.cpp @@ -300,8 +300,7 @@ void VoxelServer::run() { } qDebug("wantVoxelPersist=%s\n", debug::valueOf(_wantVoxelPersist)); - // if we want Voxel Persistence, load the local file now... - bool persistantFileRead = false; + // if we want Voxel Persistence, set up the local file and persist thread if (_wantVoxelPersist) { // 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); } - 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 _voxelPersistThread = new VoxelPersistThread(&_serverTree, _voxelPersistFilename); if (_voxelPersistThread) { @@ -377,6 +359,8 @@ void VoxelServer::run() { if (_voxelServerPacketProcessor) { _voxelServerPacketProcessor->initialize(true); } + + qDebug("Now running...\n"); // loop to send to nodes requesting data while (true) {