mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 11:35:20 +02:00
add check in AvatarMixer for next adjustment
This commit is contained in:
parent
3e842d7e34
commit
5b55a52a04
4 changed files with 25 additions and 16 deletions
|
@ -30,7 +30,8 @@
|
||||||
|
|
||||||
const QString AVATAR_MIXER_LOGGING_NAME = "avatar-mixer";
|
const QString AVATAR_MIXER_LOGGING_NAME = "avatar-mixer";
|
||||||
|
|
||||||
const unsigned int AVATAR_DATA_SEND_INTERVAL_MSECS = (1.0f / 60.0f) * 1000;
|
const int AVATAR_MIXER_BROADCAST_FRAMES_PER_SECOND = 60;
|
||||||
|
const unsigned int AVATAR_DATA_SEND_INTERVAL_MSECS = (1.0f / (float) AVATAR_MIXER_BROADCAST_FRAMES_PER_SECOND) * 1000;
|
||||||
|
|
||||||
AvatarMixer::AvatarMixer(const QByteArray& packet) :
|
AvatarMixer::AvatarMixer(const QByteArray& packet) :
|
||||||
ThreadedAssignment(packet),
|
ThreadedAssignment(packet),
|
||||||
|
@ -54,6 +55,8 @@ AvatarMixer::~AvatarMixer() {
|
||||||
|
|
||||||
void attachAvatarDataToNode(Node* newNode) {
|
void attachAvatarDataToNode(Node* newNode) {
|
||||||
if (!newNode->getLinkedData()) {
|
if (!newNode->getLinkedData()) {
|
||||||
|
// setup the client linked data - default the number of frames since adjustment
|
||||||
|
// to our number of frames per second
|
||||||
newNode->setLinkedData(new AvatarMixerClientData());
|
newNode->setLinkedData(new AvatarMixerClientData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -166,6 +169,17 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
// reset the number of sent avatars
|
// reset the number of sent avatars
|
||||||
nodeData->resetNumAvatarsSentLastFrame();
|
nodeData->resetNumAvatarsSentLastFrame();
|
||||||
|
|
||||||
|
// Check if it is time to adjust what we send this client based on the observed
|
||||||
|
// bandwidth to this node. We do this once a second, which is also the window for
|
||||||
|
// the bandwidth reported by node->getOutboundBandwidth();
|
||||||
|
if (nodeData->getNumFramesSinceAdjustment() > AVATAR_MIXER_BROADCAST_FRAMES_PER_SECOND) {
|
||||||
|
qDebug() << "Consider adjustment for avatar whose current send rate is" << node->getOutboundBandwidth();
|
||||||
|
|
||||||
|
nodeData->resetNumFramesSinceAdjustment();
|
||||||
|
} else {
|
||||||
|
nodeData->increaseNumFramesSinceAdjustment();
|
||||||
|
}
|
||||||
|
|
||||||
// this is an AGENT we have received head data from
|
// this is an AGENT we have received head data from
|
||||||
// send back a packet with other active node data to this node
|
// send back a packet with other active node data to this node
|
||||||
nodeList->eachMatchingNode(
|
nodeList->eachMatchingNode(
|
||||||
|
@ -185,6 +199,7 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
if (!lock.isLocked()) {
|
if (!lock.isLocked()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarData& otherAvatar = otherNodeData->getAvatar();
|
AvatarData& otherAvatar = otherNodeData->getAvatar();
|
||||||
// Decide whether to send this avatar's data based on it's distance from us
|
// Decide whether to send this avatar's data based on it's distance from us
|
||||||
|
|
||||||
|
|
|
@ -13,15 +13,6 @@
|
||||||
|
|
||||||
#include "AvatarMixerClientData.h"
|
#include "AvatarMixerClientData.h"
|
||||||
|
|
||||||
AvatarMixerClientData::AvatarMixerClientData() :
|
|
||||||
NodeData(),
|
|
||||||
_hasReceivedFirstPackets(false),
|
|
||||||
_billboardChangeTimestamp(0),
|
|
||||||
_identityChangeTimestamp(0)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int AvatarMixerClientData::parseData(const QByteArray& packet) {
|
int AvatarMixerClientData::parseData(const QByteArray& packet) {
|
||||||
// compute the offset to the data payload
|
// compute the offset to the data payload
|
||||||
int offset = numBytesForPacketHeader(packet);
|
int offset = numBytesForPacketHeader(packet);
|
||||||
|
|
|
@ -24,8 +24,6 @@
|
||||||
class AvatarMixerClientData : public NodeData {
|
class AvatarMixerClientData : public NodeData {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AvatarMixerClientData();
|
|
||||||
|
|
||||||
int parseData(const QByteArray& packet);
|
int parseData(const QByteArray& packet);
|
||||||
AvatarData& getAvatar() { return _avatar; }
|
AvatarData& getAvatar() { return _avatar; }
|
||||||
|
|
||||||
|
@ -44,15 +42,20 @@ public:
|
||||||
void increaseNumAvatarsSentLastFrame() { ++_numAvatarsSentLastFrame; }
|
void increaseNumAvatarsSentLastFrame() { ++_numAvatarsSentLastFrame; }
|
||||||
int getNumAvatarsSentLastFrame() const { return _numAvatarsSentLastFrame; }
|
int getNumAvatarsSentLastFrame() const { return _numAvatarsSentLastFrame; }
|
||||||
|
|
||||||
|
int getNumFramesSinceAdjustment() const { return _numFramesSinceAdjustment; }
|
||||||
|
void increaseNumFramesSinceAdjustment() { ++_numFramesSinceAdjustment; }
|
||||||
|
void resetNumFramesSinceAdjustment() { _numFramesSinceAdjustment = 0; }
|
||||||
|
|
||||||
void loadJSONStats(QJsonObject& jsonObject) const;
|
void loadJSONStats(QJsonObject& jsonObject) const;
|
||||||
private:
|
private:
|
||||||
AvatarData _avatar;
|
AvatarData _avatar;
|
||||||
bool _hasReceivedFirstPackets;
|
bool _hasReceivedFirstPackets = false;
|
||||||
quint64 _billboardChangeTimestamp;
|
quint64 _billboardChangeTimestamp = 0;
|
||||||
quint64 _identityChangeTimestamp;
|
quint64 _identityChangeTimestamp = 0;
|
||||||
float _fullRateDistance = FLT_MAX;
|
float _fullRateDistance = FLT_MAX;
|
||||||
float _maxFullRateDistance = FLT_MAX;
|
float _maxFullRateDistance = FLT_MAX;
|
||||||
int _numAvatarsSentLastFrame = 0;
|
int _numAvatarsSentLastFrame = 0;
|
||||||
|
int _numFramesSinceAdjustment = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AvatarMixerClientData_h
|
#endif // hifi_AvatarMixerClientData_h
|
||||||
|
|
|
@ -154,7 +154,7 @@ QVariantMap JSONBreakableMarshal::fromStringList(const QStringList& stringList)
|
||||||
QString keypath = marshalString.left(equalityIndex);
|
QString keypath = marshalString.left(equalityIndex);
|
||||||
|
|
||||||
// setup for array index checking
|
// setup for array index checking
|
||||||
const QString ARRAY_INDEX_REGEX_STRING = "^[\\d+]";
|
const QString ARRAY_INDEX_REGEX_STRING = "^\[\\d+\\]";
|
||||||
QRegExp arrayRegex(ARRAY_INDEX_REGEX_STRING);
|
QRegExp arrayRegex(ARRAY_INDEX_REGEX_STRING);
|
||||||
|
|
||||||
// as long as we have a keypath we need to recurse downwards
|
// as long as we have a keypath we need to recurse downwards
|
||||||
|
|
Loading…
Reference in a new issue