mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
Only sort an estimated number of avatars
This commit is contained in:
parent
81a69c7769
commit
6a1c76d14d
2 changed files with 17 additions and 3 deletions
|
@ -244,6 +244,9 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
// reset the internal state for correct random number distribution
|
// reset the internal state for correct random number distribution
|
||||||
distribution.reset();
|
distribution.reset();
|
||||||
|
|
||||||
|
// Base number to sort on number previously sent.
|
||||||
|
const int numToSendEst = std::max(nodeData->getNumAvatarsSentLastFrame() * 2, 20);
|
||||||
|
|
||||||
// reset the number of sent avatars
|
// reset the number of sent avatars
|
||||||
nodeData->resetNumAvatarsSentLastFrame();
|
nodeData->resetNumAvatarsSentLastFrame();
|
||||||
|
|
||||||
|
@ -399,7 +402,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
int remainingAvatars = (int)sortedAvatars.size();
|
int remainingAvatars = (int)sortedAvatars.size();
|
||||||
auto traitsPacketList = NLPacketList::create(PacketType::BulkAvatarTraits, QByteArray(), true, true);
|
auto traitsPacketList = NLPacketList::create(PacketType::BulkAvatarTraits, QByteArray(), true, true);
|
||||||
|
|
||||||
const auto& sortedAvatarVector = sortedAvatars.getSortedVector();
|
const auto& sortedAvatarVector = sortedAvatars.getSortedVector(numToSendEst);
|
||||||
for (const auto& sortedAvatar : sortedAvatarVector) {
|
for (const auto& sortedAvatar : sortedAvatarVector) {
|
||||||
const Node* otherNode = sortedAvatar.getNode();
|
const Node* otherNode = sortedAvatar.getNode();
|
||||||
auto lastEncodeForOther = sortedAvatar.getTimestamp();
|
auto lastEncodeForOther = sortedAvatar.getTimestamp();
|
||||||
|
@ -524,6 +527,11 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
remainingAvatars--;
|
remainingAvatars--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nodeData->getNumAvatarsSentLastFrame() > numToSendEst) {
|
||||||
|
qCWarning(avatars) << "More avatars sent than upper estimate" << nodeData->getNumAvatarsSentLastFrame()
|
||||||
|
<< " / " << numToSendEst;
|
||||||
|
}
|
||||||
|
|
||||||
quint64 startPacketSending = usecTimestampNow();
|
quint64 startPacketSending = usecTimestampNow();
|
||||||
|
|
||||||
// close the current packet so that we're always sending something
|
// close the current packet so that we're always sending something
|
||||||
|
|
|
@ -66,8 +66,14 @@ namespace PrioritySortUtil {
|
||||||
void reserve(size_t num) {
|
void reserve(size_t num) {
|
||||||
_vector.reserve(num);
|
_vector.reserve(num);
|
||||||
}
|
}
|
||||||
const std::vector<T>& getSortedVector() {
|
const std::vector<T>& getSortedVector(int numToSort = 0) {
|
||||||
std::sort(_vector.begin(), _vector.end(), [](const T& left, const T& right) { return left.getPriority() > right.getPriority(); });
|
if (numToSort == 0 || numToSort >= (int)_vector.size()) {
|
||||||
|
std::sort(_vector.begin(), _vector.end(),
|
||||||
|
[](const T& left, const T& right) { return left.getPriority() > right.getPriority(); });
|
||||||
|
} else {
|
||||||
|
std::partial_sort(_vector.begin(), _vector.begin() + numToSort, _vector.end(),
|
||||||
|
[](const T& left, const T& right) { return left.getPriority() > right.getPriority(); });
|
||||||
|
}
|
||||||
return _vector;
|
return _vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue