diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 143e246eb7..dd9f46224b 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -441,7 +441,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) uint64_t REBROADCAST_IDENTITY_TO_DOWNSTREAM_EVERY_US = 5 * 1000 * 1000; void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePointer& node) { - _stats.nodesBroadcastedTo++; + _stats.downstreamMixersBroadcastedTo++; AvatarMixerClientData* nodeData = reinterpret_cast(node->getLinkedData()); @@ -450,6 +450,9 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin int numAvatarDataBytes = 0; + // reset the number of sent avatars + nodeData->resetNumAvatarsSentLastFrame(); + std::for_each(_begin, _end, [&](const SharedNodePointer& agentNode) { // collect agents that we have avatar data for that we are supposed to replicate if (agentNode->getType() == NodeType::Agent && agentNode->getLinkedData() && agentNode->isReplicated()) { @@ -463,6 +466,7 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin // since we have no idea if they're online and receiving our packets // so we always send a full update for this avatar + quint64 start = usecTimestampNow(); AvatarDataPacket::HasFlags flagsOut; @@ -515,6 +519,9 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin nodeData->setLastBroadcastSequenceNumber(agentNode->getUUID(), agentNodeData->getLastReceivedSequenceNumber()); + // increment the number of avatars sent to this reciever + nodeData->incrementNumAvatarsSentLastFrame(); + // start a new segment in the packet list for this avatar avatarPacketList->startSegment(); @@ -549,6 +556,9 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin auto nodeList = DependencyManager::get(); nodeList->sendPacketList(std::move(avatarPacketList), node->getPublicSocket()); + // record the bytes sent for other avatar data in the AvatarMixerClientData + nodeData->recordSentAvatarData(numAvatarDataBytes); + quint64 endPacketSending = usecTimestampNow(); _stats.packetSendingElapsedTime += (endPacketSending - startPacketSending); } diff --git a/assignment-client/src/avatars/AvatarMixerSlave.h b/assignment-client/src/avatars/AvatarMixerSlave.h index 509a8ec94b..69c707bbf1 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.h +++ b/assignment-client/src/avatars/AvatarMixerSlave.h @@ -21,6 +21,7 @@ public: quint64 processIncomingPacketsElapsedTime { 0 }; int nodesBroadcastedTo { 0 }; + int downstreamMixersBroadcastedTo { 0 }; int numPacketsSent { 0 }; int numBytesSent { 0 }; int numIdentityPackets { 0 }; @@ -41,6 +42,7 @@ public: // sending job stats nodesBroadcastedTo = 0; + downstreamMixersBroadcastedTo = 0; numPacketsSent = 0; numBytesSent = 0; numIdentityPackets = 0; @@ -60,6 +62,7 @@ public: processIncomingPacketsElapsedTime += rhs.processIncomingPacketsElapsedTime; nodesBroadcastedTo += rhs.nodesBroadcastedTo; + downstreamMixersBroadcastedTo += rhs.downstreamMixersBroadcastedTo; numPacketsSent += rhs.numPacketsSent; numBytesSent += rhs.numBytesSent; numIdentityPackets += rhs.numIdentityPackets;