mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-10 05:13:02 +02:00
Move sending of completion packet up to EntityTreeSendThread
I hadn't appreciated the continuous nature of the scene traversal. Looks good now. Also changed some identifier names.
This commit is contained in:
parent
8f02834447
commit
2c06487df0
6 changed files with 28 additions and 24 deletions
|
@ -18,7 +18,7 @@
|
|||
#include "EntityServer.h"
|
||||
|
||||
// Initially just send all items within this distance.
|
||||
const float EntityTreeSendThread::INITIAL_RADIUS = 50.0f;
|
||||
const float EntityTreeSendThread::INITIAL_RADIUS = 10.0f;
|
||||
|
||||
EntityTreeSendThread::EntityTreeSendThread(OctreeServer* myServer, const SharedNodePointer& node) :
|
||||
OctreeSendThread(myServer, node)
|
||||
|
@ -102,7 +102,7 @@ void EntityTreeSendThread::preDistributionProcessing() {
|
|||
}
|
||||
}
|
||||
|
||||
void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
bool EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
bool viewFrustumChanged, bool isFullScene) {
|
||||
if (viewFrustumChanged || _traversal.finished()) {
|
||||
EntityTreeElementPointer root = std::dynamic_pointer_cast<EntityTreeElement>(_myServer->getOctree()->getRoot());
|
||||
|
@ -114,7 +114,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
|
|||
int32_t lodLevelOffset = nodeData->getBoundaryLevelAdjust() + (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST);
|
||||
newView.lodScaleFactor = powf(2.0f, lodLevelOffset);
|
||||
|
||||
if (nodeData->wantReportInitialResult() && !newView.viewFrustums.empty()) {
|
||||
if (nodeData->wantReportInitialCompletion() && !newView.viewFrustums.empty()) {
|
||||
auto& mainView = newView.viewFrustums[0];
|
||||
// Force acceptance within INITIAL_RADIUS.
|
||||
mainView.setSimpleRadius(INITIAL_RADIUS);
|
||||
|
@ -165,7 +165,20 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
|
|||
OctreeServer::trackTreeTraverseTime((float)(usecTimestampNow() - startTime));
|
||||
}
|
||||
|
||||
OctreeSendThread::traverseTreeAndSendContents(node, nodeData, viewFrustumChanged, isFullScene);
|
||||
bool sendComplete = OctreeSendThread::traverseTreeAndSendContents(node, nodeData, viewFrustumChanged, isFullScene);
|
||||
|
||||
if (sendComplete && nodeData->wantReportInitialCompletion() && _traversal.finished()) {
|
||||
// Dealt with all nearby entities.
|
||||
nodeData->setReportInitialCompletion(false);
|
||||
|
||||
// Send EntityQueryInitialResultsComplete reliable packet ...
|
||||
auto initialCompletion = NLPacket::create(PacketType::EntityQueryInitialResultsComplete, -1, true);
|
||||
QDataStream initialCompletionStream(initialCompletion.get());
|
||||
initialCompletionStream << _lastSequenceNumber;
|
||||
DependencyManager::get<NodeList>()->sendPacket(std::move(initialCompletion), *node.data());
|
||||
}
|
||||
|
||||
return sendComplete;
|
||||
}
|
||||
|
||||
bool EntityTreeSendThread::addAncestorsToExtraFlaggedEntities(const QUuid& filteredEntityID,
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
EntityTreeSendThread(OctreeServer* myServer, const SharedNodePointer& node);
|
||||
|
||||
protected:
|
||||
void traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
bool traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
bool viewFrustumChanged, bool isFullScene) override;
|
||||
|
||||
private slots:
|
||||
|
|
|
@ -433,7 +433,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode*
|
|||
return _truePacketsSent;
|
||||
}
|
||||
|
||||
void OctreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged, bool isFullScene) {
|
||||
bool OctreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged, bool isFullScene) {
|
||||
// calculate max number of packets that can be sent during this interval
|
||||
int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxQueryPacketsPerSecond() / INTERVALS_PER_SECOND));
|
||||
int maxPacketsPerInterval = std::min(clientMaxPacketsPerInterval, _myServer->getPacketsPerClientPerInterval());
|
||||
|
@ -511,20 +511,11 @@ void OctreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, Octre
|
|||
OctreeServer::trackInsideTime((float)(usecTimestampNow() - startInside));
|
||||
}
|
||||
|
||||
if (params.stopReason == EncodeBitstreamParams::FINISHED && nodeData->wantReportInitialResult()) {
|
||||
// Dealt with nearby entities.
|
||||
nodeData->setReportInitialResult(false);
|
||||
|
||||
// send EntityQueryInitialResultsComplete reliable packet ...
|
||||
auto initialCompletion = NLPacket::create(PacketType::EntityQueryInitialResultsComplete, -1, true);
|
||||
QDataStream initialCompletionStream(initialCompletion.get());
|
||||
initialCompletionStream << _lastSequenceNumber;
|
||||
DependencyManager::get<NodeList>()->sendPacket(std::move(initialCompletion), *node.data());
|
||||
}
|
||||
|
||||
if (somethingToSend && _myServer->wantsVerboseDebug()) {
|
||||
qCDebug(octree) << "Hit PPS Limit, packetsSentThisInterval =" << _packetsSentThisInterval
|
||||
<< " maxPacketsPerInterval = " << maxPacketsPerInterval
|
||||
<< " clientMaxPacketsPerInterval = " << clientMaxPacketsPerInterval;
|
||||
}
|
||||
|
||||
return params.stopReason == EncodeBitstreamParams::FINISHED;
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ protected:
|
|||
/// Implements generic processing behavior for this thread.
|
||||
virtual bool process() override;
|
||||
|
||||
virtual void traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
virtual bool traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
||||
bool viewFrustumChanged, bool isFullScene);
|
||||
virtual bool traverseTreeAndBuildNextPacketPayload(EncodeBitstreamParams& params, const QJsonObject& jsonFilters) = 0;
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ int OctreeQuery::getBroadcastData(unsigned char* destinationBuffer) {
|
|||
}
|
||||
|
||||
OctreeQueryFlags queryFlags { NoFlags };
|
||||
queryFlags |= (_reportInitialResult ? OctreeQuery::WantInitialResult : 0);
|
||||
queryFlags |= (_reportInitialCompletion ? OctreeQuery::WantInitialCompletion : 0);
|
||||
memcpy(destinationBuffer, &queryFlags, sizeof(queryFlags));
|
||||
destinationBuffer += sizeof(queryFlags);
|
||||
|
||||
|
@ -164,7 +164,7 @@ int OctreeQuery::parseData(ReceivedMessage& message) {
|
|||
memcpy(&queryFlags, sourceBuffer, sizeof(queryFlags));
|
||||
sourceBuffer += sizeof(queryFlags);
|
||||
|
||||
_reportInitialResult = bool(queryFlags & OctreeQueryFlags::WantInitialResult);
|
||||
_reportInitialCompletion = bool(queryFlags & OctreeQueryFlags::WantInitialCompletion);
|
||||
|
||||
return sourceBuffer - startPosition;
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@ public:
|
|||
bool hasReceivedFirstQuery() const { return _hasReceivedFirstQuery; }
|
||||
|
||||
// Want a report when the initial query is complete.
|
||||
bool wantReportInitialResult() const { return _reportInitialResult; }
|
||||
void setReportInitialResult(bool reportInitialResult) { _reportInitialResult = reportInitialResult; }
|
||||
bool wantReportInitialCompletion() const { return _reportInitialCompletion; }
|
||||
void setReportInitialCompletion(bool reportInitialCompletion) { _reportInitialCompletion = reportInitialCompletion; }
|
||||
|
||||
signals:
|
||||
void incomingConnectionIDChanged();
|
||||
|
@ -78,11 +78,11 @@ protected:
|
|||
QJsonObject _jsonParameters;
|
||||
QReadWriteLock _jsonParametersLock;
|
||||
|
||||
enum OctreeQueryFlags : uint16_t { NoFlags = 0x0, WantInitialResult = 0x1 };
|
||||
enum OctreeQueryFlags : uint16_t { NoFlags = 0x0, WantInitialCompletion = 0x1 };
|
||||
friend const OctreeQuery::OctreeQueryFlags operator|=(OctreeQuery::OctreeQueryFlags& lhs, const int rhs);
|
||||
|
||||
bool _hasReceivedFirstQuery { false };
|
||||
bool _reportInitialResult { false };
|
||||
bool _reportInitialCompletion { false };
|
||||
};
|
||||
|
||||
#endif // hifi_OctreeQuery_h
|
||||
|
|
Loading…
Reference in a new issue