From 83748096efc79b858e6f52cec344770aba54811b Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 11 May 2015 11:37:53 -0700 Subject: [PATCH] max pps for an octree-query is a per-query thing, not an application-wide thing. move the settings-related max-octree-pps stuff into the entity tree --- .../src/octree/OctreeSendThread.cpp | 2 +- interface/src/Application.cpp | 8 ++++---- interface/src/Application.h | 1 + interface/src/ui/PreferencesDialog.cpp | 4 ++-- libraries/octree/src/Octree.cpp | 16 +++++++++++++++- libraries/octree/src/Octree.h | 5 +++++ libraries/octree/src/OctreeHeadlessViewer.cpp | 6 +++--- libraries/octree/src/OctreeQuery.cpp | 19 +++++++------------ libraries/octree/src/OctreeQuery.h | 6 +++--- 9 files changed, 41 insertions(+), 26 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 4e61793910..cb2d2931ef 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -290,7 +290,7 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus } // calculate max number of packets that can be sent during this interval - int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxOctreePacketsPerSecond() / INTERVALS_PER_SECOND)); + int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxQueryPacketsPerSecond() / INTERVALS_PER_SECOND)); int maxPacketsPerInterval = std::min(clientMaxPacketsPerInterval, _myServer->getPacketsPerClientPerInterval()); int truePacketsSent = 0; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 05dc2baf84..14742e18f6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2683,7 +2683,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType, Node int perServerPPS = 0; const int SMALL_BUDGET = 10; int perUnknownServer = SMALL_BUDGET; - int totalPPS = _octreeQuery.getMaxOctreePacketsPerSecond(); + int totalPPS = getEntityTree()->getMaxOctreePacketsPerSecond(); // determine PPS based on number of servers if (inViewServers >= 1) { @@ -2746,7 +2746,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType, Node } if (inView) { - _octreeQuery.setMaxOctreePacketsPerSecond(perServerPPS); + _octreeQuery.setMaxQueryPacketsPerSecond(perServerPPS); } else if (unknownView) { if (wantExtraDebugging) { qCDebug(interfaceapp) << "no known jurisdiction for node " << *node << ", give it budget of " @@ -2770,9 +2770,9 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType, Node qCDebug(interfaceapp) << "Using regular camera position for node" << *node; } } - _octreeQuery.setMaxOctreePacketsPerSecond(perUnknownServer); + _octreeQuery.setMaxQueryPacketsPerSecond(perUnknownServer); } else { - _octreeQuery.setMaxOctreePacketsPerSecond(0); + _octreeQuery.setMaxQueryPacketsPerSecond(0); } // set up the packet for sending... unsigned char* endOfQueryPacket = queryPacket; diff --git a/interface/src/Application.h b/interface/src/Application.h index 5a3756e768..a86512ec17 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -208,6 +208,7 @@ public: ViewFrustum* getShadowViewFrustum() { return &_shadowViewFrustum; } const OctreePacketProcessor& getOctreePacketProcessor() const { return _octreeProcessor; } EntityTreeRenderer* getEntities() { return &_entities; } + EntityTree* getEntityTree() { return _entities.getTree(); } Environment* getEnvironment() { return &_environment; } QUndoStack* getUndoStack() { return &_undoStack; } MainWindow* getWindow() { return _window; } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index ac436cbb10..96b8bd8056 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -168,7 +168,7 @@ void PreferencesDialog::loadPreferences() { ui.avatarScaleSpin->setValue(myAvatar->getScale()); - ui.maxOctreePPSSpin->setValue(qApp->getOctreeQuery().getMaxOctreePacketsPerSecond()); + ui.maxOctreePPSSpin->setValue(qApp->getEntityTree()->getMaxOctreePacketsPerSecond()); ui.oculusUIAngularSizeSpin->setValue(qApp->getApplicationOverlay().getHmdUIAngularSize()); @@ -228,7 +228,7 @@ void PreferencesDialog::savePreferences() { faceshift->setHostname(ui.faceshiftHostnameEdit->text()); - qApp->getOctreeQuery().setMaxOctreePacketsPerSecond(ui.maxOctreePPSSpin->value()); + qApp->getEntityTree()->setMaxOctreePacketsPerSecond(ui.maxOctreePPSSpin->value()); qApp->getApplicationOverlay().setHmdUIAngularSize(ui.oculusUIAngularSizeSpin->value()); diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index d53d29e444..77f5be4805 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include "CoverageMap.h" #include "OctreeConstants.h" @@ -50,6 +51,7 @@ QVector PERSIST_EXTENSIONS = {"svo", "json"}; +Setting::Handle maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS); float boundaryDistanceForRenderLevel(unsigned int renderLevel, float voxelSizeScale) { return voxelSizeScale / powf(2, renderLevel); @@ -62,7 +64,8 @@ Octree::Octree(bool shouldReaverage) : _stopImport(false), _lock(QReadWriteLock::Recursive), _isViewing(false), - _isServer(false) + _isServer(false), + _maxOctreePPS(maxOctreePacketsPerSecond.get()) { } @@ -2201,3 +2204,14 @@ void Octree::cancelImport() { _stopImport = true; } +void Octree::setMaxOctreePacketsPerSecond(int maxOctreePPS) { + if (maxOctreePPS != _maxOctreePPS) { + _maxOctreePPS = maxOctreePPS; + maxOctreePacketsPerSecond.set(_maxOctreePPS); + } +} + +int Octree::getMaxOctreePacketsPerSecond() { + return _maxOctreePPS; +} + diff --git a/libraries/octree/src/Octree.h b/libraries/octree/src/Octree.h index d7fc58699f..408271dc36 100644 --- a/libraries/octree/src/Octree.h +++ b/libraries/octree/src/Octree.h @@ -370,6 +370,9 @@ public: virtual void dumpTree() { }; virtual void pruneTree() { }; + void setMaxOctreePacketsPerSecond(int maxOctreePPS); + int getMaxOctreePacketsPerSecond(); + signals: void importSize(float x, float y, float z); void importProgress(int progress); @@ -403,6 +406,8 @@ protected: bool _isViewing; bool _isServer; + + int _maxOctreePPS = DEFAULT_MAX_OCTREE_PPS; }; float boundaryDistanceForRenderLevel(unsigned int renderLevel, float voxelSizeScale); diff --git a/libraries/octree/src/OctreeHeadlessViewer.cpp b/libraries/octree/src/OctreeHeadlessViewer.cpp index 63cd6d39a2..0da694833a 100644 --- a/libraries/octree/src/OctreeHeadlessViewer.cpp +++ b/libraries/octree/src/OctreeHeadlessViewer.cpp @@ -186,7 +186,7 @@ void OctreeHeadlessViewer::queryOctree() { } if (inView) { - _octreeQuery.setMaxOctreePacketsPerSecond(perServerPPS); + _octreeQuery.setMaxQueryPacketsPerSecond(perServerPPS); if (wantExtraDebugging) { qCDebug(octree) << "inView for node " << *node << ", give it budget of " << perServerPPS; } @@ -213,9 +213,9 @@ void OctreeHeadlessViewer::queryOctree() { qCDebug(octree) << "Using regular camera position for node" << *node; } } - _octreeQuery.setMaxOctreePacketsPerSecond(perUnknownServer); + _octreeQuery.setMaxQueryPacketsPerSecond(perUnknownServer); } else { - _octreeQuery.setMaxOctreePacketsPerSecond(0); + _octreeQuery.setMaxQueryPacketsPerSecond(0); } // set up the packet for sending... unsigned char* endOfQueryPacket = queryPacket; diff --git a/libraries/octree/src/OctreeQuery.cpp b/libraries/octree/src/OctreeQuery.cpp index 6ca55fc4cc..cac063213c 100644 --- a/libraries/octree/src/OctreeQuery.cpp +++ b/libraries/octree/src/OctreeQuery.cpp @@ -11,22 +11,17 @@ #include #include -#include #include "OctreeConstants.h" #include "OctreeQuery.h" -Setting::Handle maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS); OctreeQuery::OctreeQuery() { - _maxOctreePPS = maxOctreePacketsPerSecond.get(); + _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS; } -void OctreeQuery::setMaxOctreePacketsPerSecond(int maxOctreePPS) { - if (maxOctreePPS != _maxOctreePPS) { - _maxOctreePPS = maxOctreePPS; - maxOctreePacketsPerSecond.set(_maxOctreePPS); - } +void OctreeQuery::setMaxQueryPacketsPerSecond(int maxQueryPPS) { + _maxQueryPPS = maxQueryPPS; } @@ -59,8 +54,8 @@ int OctreeQuery::getBroadcastData(unsigned char* destinationBuffer) { *destinationBuffer++ = bitItems; // desired Max Octree PPS - memcpy(destinationBuffer, &_maxOctreePPS, sizeof(_maxOctreePPS)); - destinationBuffer += sizeof(_maxOctreePPS); + memcpy(destinationBuffer, &_maxQueryPPS, sizeof(_maxQueryPPS)); + destinationBuffer += sizeof(_maxQueryPPS); // desired voxelSizeScale memcpy(destinationBuffer, &_octreeElementSizeScale, sizeof(_octreeElementSizeScale)); @@ -103,8 +98,8 @@ int OctreeQuery::parseData(const QByteArray& packet) { _wantCompression = oneAtBit(bitItems, WANT_COMPRESSION); // desired Max Octree PPS - memcpy(&_maxOctreePPS, sourceBuffer, sizeof(_maxOctreePPS)); - sourceBuffer += sizeof(_maxOctreePPS); + memcpy(&_maxQueryPPS, sourceBuffer, sizeof(_maxQueryPPS)); + sourceBuffer += sizeof(_maxQueryPPS); // desired _octreeElementSizeScale memcpy(&_octreeElementSizeScale, sourceBuffer, sizeof(_octreeElementSizeScale)); diff --git a/libraries/octree/src/OctreeQuery.h b/libraries/octree/src/OctreeQuery.h index 1fefabdf68..c3f0971a85 100644 --- a/libraries/octree/src/OctreeQuery.h +++ b/libraries/octree/src/OctreeQuery.h @@ -76,7 +76,7 @@ public: bool getWantLowResMoving() const { return _wantLowResMoving; } bool getWantOcclusionCulling() const { return _wantOcclusionCulling; } bool getWantCompression() const { return _wantCompression; } - int getMaxOctreePacketsPerSecond() const { return _maxOctreePPS; } + int getMaxQueryPacketsPerSecond() const { return _maxQueryPPS; } float getOctreeSizeScale() const { return _octreeElementSizeScale; } int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; } @@ -86,7 +86,7 @@ public slots: void setWantDelta(bool wantDelta) { _wantDelta = wantDelta; } void setWantOcclusionCulling(bool wantOcclusionCulling) { _wantOcclusionCulling = wantOcclusionCulling; } void setWantCompression(bool wantCompression) { _wantCompression = wantCompression; } - void setMaxOctreePacketsPerSecond(int maxOctreePPS); + void setMaxQueryPacketsPerSecond(int maxQueryPPS); void setOctreeSizeScale(float octreeSizeScale) { _octreeElementSizeScale = octreeSizeScale; } void setBoundaryLevelAdjust(int boundaryLevelAdjust) { _boundaryLevelAdjust = boundaryLevelAdjust; } @@ -106,7 +106,7 @@ protected: bool _wantLowResMoving = true; bool _wantOcclusionCulling = false; bool _wantCompression = false; - int _maxOctreePPS = DEFAULT_MAX_OCTREE_PPS; + int _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS; float _octreeElementSizeScale = DEFAULT_OCTREE_SIZE_SCALE; /// used for LOD calculations int _boundaryLevelAdjust = 0; /// used for LOD calculations