use only AD rate for FRD adjustment

This commit is contained in:
Stephen Birarda 2015-05-01 10:38:32 -07:00
parent 94739cf8d3
commit 67efa7796f
3 changed files with 15 additions and 5 deletions

View file

@ -178,7 +178,7 @@ void AvatarMixer::broadcastAvatarData() {
int numAvatarDataBytes = 0; int numAvatarDataBytes = 0;
// use the data rate specifically for avatar data for FRD adjustment checks // use the data rate specifically for avatar data for FRD adjustment checks
float avatarDataRateLastSecond = node->getOutboundBandwidth(); float avatarDataRateLastSecond = nodeData->getOutboundAvatarDataKbps();
// Check if it is time to adjust what we send this client based on the observed // 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 // bandwidth to this node. We do this once a second, which is also the window for
@ -187,7 +187,7 @@ void AvatarMixer::broadcastAvatarData() {
const float FRD_ADJUSTMENT_ACCEPTABLE_RATIO = 0.8f; const float FRD_ADJUSTMENT_ACCEPTABLE_RATIO = 0.8f;
qDebug() << "current node outbound bandwidth is" << avatarDataRateLastSecond; // qDebug() << "current node outbound bandwidth is" << avatarDataRateLastSecond;
if (avatarDataRateLastSecond > _maxKbpsPerNode) { if (avatarDataRateLastSecond > _maxKbpsPerNode) {
@ -438,10 +438,18 @@ void AvatarMixer::sendStatsPacket() {
// add stats for each listerner // add stats for each listerner
nodeList->eachNode([&](const SharedNodePointer& node) { nodeList->eachNode([&](const SharedNodePointer& node) {
QJsonObject avatarStats; QJsonObject avatarStats;
avatarStats["kbps"] = node->getOutboundBandwidth();
const QString NODE_OUTBOUND_KBPS_STAT_KEY = "outbound_kbps";
avatarStats[NODE_OUTBOUND_KBPS_STAT_KEY] = node->getOutboundBandwidth();
AvatarMixerClientData* clientData = static_cast<AvatarMixerClientData*>(node->getLinkedData()); AvatarMixerClientData* clientData = static_cast<AvatarMixerClientData*>(node->getLinkedData());
if (clientData) { if (clientData) {
clientData->loadJSONStats(avatarStats); clientData->loadJSONStats(avatarStats);
// add the diff between the full outbound bandwidth and the measured bandwidth for AvatarData send only
avatarStats["delta_full_vs_avatar_data_kbps"] =
avatarStats[NODE_OUTBOUND_KBPS_STAT_KEY].toDouble() - avatarStats[OUTBOUND_AVATAR_DATA_STATS_KEY].toDouble();
} }
avatarsObject[uuidStringWithoutCurlyBraces(node->getUUID())] = avatarStats; avatarsObject[uuidStringWithoutCurlyBraces(node->getUUID())] = avatarStats;

View file

@ -31,5 +31,5 @@ void AvatarMixerClientData::loadJSONStats(QJsonObject& jsonObject) const {
jsonObject["max_full_rate_distance"] = _maxFullRateDistance; jsonObject["max_full_rate_distance"] = _maxFullRateDistance;
jsonObject["num_avatars_sent_last_frame"] = _numAvatarsSentLastFrame; jsonObject["num_avatars_sent_last_frame"] = _numAvatarsSentLastFrame;
jsonObject["other_avatar_data_kbps"] = getSentAvatarDataKbps(); jsonObject[OUTBOUND_AVATAR_DATA_STATS_KEY] = getOutboundAvatarDataKbps();
} }

View file

@ -23,6 +23,8 @@
#include <NumericalConstants.h> #include <NumericalConstants.h>
#include <SimpleMovingAverage.h> #include <SimpleMovingAverage.h>
const QString OUTBOUND_AVATAR_DATA_STATS_KEY = "outbound_av_data_kbps";
class AvatarMixerClientData : public NodeData { class AvatarMixerClientData : public NodeData {
Q_OBJECT Q_OBJECT
public: public:
@ -53,7 +55,7 @@ public:
void recordSentAvatarData(int numBytes) { _avgOtherAvatarDataRate.updateAverage((float) numBytes); } void recordSentAvatarData(int numBytes) { _avgOtherAvatarDataRate.updateAverage((float) numBytes); }
float getSentAvatarDataKbps() const float getOutboundAvatarDataKbps() const
{ return _avgOtherAvatarDataRate.getAverageSampleValuePerSecond() / (float) BYTES_PER_KILOBIT; } { return _avgOtherAvatarDataRate.getAverageSampleValuePerSecond() / (float) BYTES_PER_KILOBIT; }
void loadJSONStats(QJsonObject& jsonObject) const; void loadJSONStats(QJsonObject& jsonObject) const;