diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index cb2f0636b9..8ace26f2e2 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -767,6 +767,9 @@ void AvatarMixer::sendStatsPacket() { float averageOverBudgetAvatars = averageNodes ? aggregateStats.overBudgetAvatars / averageNodes : 0.0f; slavesAggregatObject["sent_3_averageOverBudgetAvatars"] = TIGHT_LOOP_STAT(averageOverBudgetAvatars); + slavesAggregatObject["sent_4_averageDataBytes"] = TIGHT_LOOP_STAT(aggregateStats.numDataBytesSent); + slavesAggregatObject["sent_5_averageAvatarEntityBytes"] = TIGHT_LOOP_STAT(aggregateStats.numTraitsBytesSent); + slavesAggregatObject["sent_4_averageIdentityBytes"] = TIGHT_LOOP_STAT(aggregateStats.numIdentityBytesSent); slavesAggregatObject["timing_1_processIncomingPackets"] = TIGHT_LOOP_STAT_UINT64(aggregateStats.processIncomingPacketsElapsedTime); slavesAggregatObject["timing_2_ignoreCalculation"] = TIGHT_LOOP_STAT_UINT64(aggregateStats.ignoreCalculationElapsedTime); @@ -775,7 +778,7 @@ void AvatarMixer::sendStatsPacket() { slavesAggregatObject["timing_5_packetSending"] = TIGHT_LOOP_STAT_UINT64(aggregateStats.packetSendingElapsedTime); slavesAggregatObject["timing_6_jobElapsedTime"] = TIGHT_LOOP_STAT_UINT64(aggregateStats.jobElapsedTime); - statsObject["slaves_aggregate"] = slavesAggregatObject; + statsObject["slaves_aggregate (per frame)"] = slavesAggregatObject; _handleViewFrustumPacketElapsedTime = 0; _handleAvatarIdentityPacketElapsedTime = 0; diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index cd9d164ef7..22a393a06c 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -73,7 +73,8 @@ int AvatarMixerSlave::sendIdentityPacket(NLPacketList& packetList, const AvatarM QByteArray individualData = nodeData->getConstAvatarData()->identityByteArray(); individualData.replace(0, NUM_BYTES_RFC4122_UUID, nodeData->getNodeID().toRfc4122()); // FIXME, this looks suspicious packetList.write(individualData); - _stats.numIdentityPackets++; + _stats.numIdentityPacketsSent++; + _stats.numIdentityBytesSent += individualData.size(); return individualData.size(); } else { return 0; @@ -109,7 +110,6 @@ qint64 AvatarMixerSlave::addChangedTraitsToBulkPacket(AvatarMixerClientData* lis while (simpleReceivedIt != lastReceivedVersions.simpleCEnd()) { auto traitType = static_cast(std::distance(lastReceivedVersions.simpleCBegin(), simpleReceivedIt)); - auto lastReceivedVersion = *simpleReceivedIt; auto& lastSentVersionRef = lastSentVersions[traitType]; @@ -191,7 +191,8 @@ int AvatarMixerSlave::sendReplicatedIdentityPacket(const Node& agentNode, const auto identityPacket = NLPacketList::create(PacketType::ReplicatedAvatarIdentity, QByteArray(), true, true); identityPacket->write(individualData); DependencyManager::get()->sendPacketList(std::move(identityPacket), destinationNode); - _stats.numIdentityPackets++; + _stats.numIdentityPacketsSent++; + _stats.numIdentityBytesSent += individualData.size(); return individualData.size(); } else { return 0; @@ -539,8 +540,8 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) ++numPacketsSent; } - _stats.numPacketsSent += numPacketsSent; - _stats.numBytesSent += numAvatarDataBytes; + _stats.numDataPacketsSent += numPacketsSent; + _stats.numDataBytesSent += numAvatarDataBytes; // record the bytes sent for other avatar data in the AvatarMixerClientData nodeData->recordSentAvatarData(numAvatarDataBytes); @@ -550,6 +551,8 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) if (traitsPacketList->getNumPackets() >= 1) { // send the traits packet list + _stats.numTraitsBytesSent += traitBytesSent; + _stats.numTraitsPacketsSent += (int) traitsPacketList->getNumPackets(); nodeList->sendPacketList(std::move(traitsPacketList), *destinationNode); } @@ -685,8 +688,8 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin // close the current packet so that we're always sending something avatarPacketList->closeCurrentPacket(true); - _stats.numPacketsSent += (int)avatarPacketList->getNumPackets(); - _stats.numBytesSent += numAvatarDataBytes; + _stats.numDataPacketsSent += (int)avatarPacketList->getNumPackets(); + _stats.numDataBytesSent += numAvatarDataBytes; // send the replicated bulk avatar data auto nodeList = DependencyManager::get(); diff --git a/assignment-client/src/avatars/AvatarMixerSlave.h b/assignment-client/src/avatars/AvatarMixerSlave.h index 2ef90af38e..5c38cda590 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.h +++ b/assignment-client/src/avatars/AvatarMixerSlave.h @@ -24,9 +24,12 @@ public: int nodesBroadcastedTo { 0 }; int downstreamMixersBroadcastedTo { 0 }; - int numPacketsSent { 0 }; - int numBytesSent { 0 }; - int numIdentityPackets { 0 }; + int numDataBytesSent { 0 }; + int numTraitsBytesSent { 0 }; + int numIdentityBytesSent { 0 }; + int numDataPacketsSent { 0 }; + int numTraitsPacketsSent { 0 }; + int numIdentityPacketsSent { 0 }; int numOthersIncluded { 0 }; int overBudgetAvatars { 0 }; @@ -45,9 +48,13 @@ public: // sending job stats nodesBroadcastedTo = 0; downstreamMixersBroadcastedTo = 0; - numPacketsSent = 0; - numBytesSent = 0; - numIdentityPackets = 0; + + numDataBytesSent = 0; + numTraitsBytesSent = 0; + numIdentityBytesSent = 0; + numDataPacketsSent = 0; + numTraitsPacketsSent = 0; + numIdentityPacketsSent = 0; numOthersIncluded = 0; overBudgetAvatars = 0; @@ -65,9 +72,12 @@ public: nodesBroadcastedTo += rhs.nodesBroadcastedTo; downstreamMixersBroadcastedTo += rhs.downstreamMixersBroadcastedTo; - numPacketsSent += rhs.numPacketsSent; - numBytesSent += rhs.numBytesSent; - numIdentityPackets += rhs.numIdentityPackets; + numDataBytesSent += rhs.numDataBytesSent; + numTraitsBytesSent += rhs.numTraitsBytesSent; + numIdentityBytesSent += rhs.numIdentityBytesSent; + numDataPacketsSent += rhs.numDataPacketsSent; + numTraitsPacketsSent += rhs.numTraitsPacketsSent; + numIdentityPacketsSent += rhs.numIdentityPacketsSent; numOthersIncluded += rhs.numOthersIncluded; overBudgetAvatars += rhs.overBudgetAvatars; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index e72fa3a6eb..2f1c8d3d82 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1987,9 +1987,9 @@ qint64 AvatarData::packTraitInstance(AvatarTraits::TraitType traitType, AvatarTr qint64 bytesWritten = 0; if (traitType == AvatarTraits::AvatarEntity) { - packAvatarEntityTraitInstance(traitType, traitInstanceID, destination, traitVersion); + bytesWritten += packAvatarEntityTraitInstance(traitType, traitInstanceID, destination, traitVersion); } else if (traitType == AvatarTraits::Grab) { - packGrabTraitInstance(traitType, traitInstanceID, destination, traitVersion); + bytesWritten += packGrabTraitInstance(traitType, traitInstanceID, destination, traitVersion); } return bytesWritten;