From 076bc115456ba43e585ea8cf2a81dd14386318ba Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 23 Jun 2014 15:19:13 -0700 Subject: [PATCH] added server side audio mixer jitter stats --- assignment-client/src/audio/AudioMixer.cpp | 13 +++++++++++ .../src/audio/AudioMixerClientData.cpp | 23 +++++++++++++++++++ .../src/audio/AudioMixerClientData.h | 3 +++ .../audio/src/PositionalAudioRingBuffer.h | 3 +++ 4 files changed, 42 insertions(+) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 42be1aea5a..15b51ae7d5 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -424,6 +424,19 @@ void AudioMixer::sendStatsPacket() { } else { statsObject["average_mixes_per_listener"] = 0.0; } + + // add stats for each listerner + NodeList* nodeList = NodeList::getInstance(); + int clientNumber = 0; + foreach (const SharedNodePointer& node, nodeList->getNodeHash()) { + clientNumber++; + AudioMixerClientData* clientData = static_cast(node->getLinkedData()); + if (clientData) { + QString property = "jitterStats." + QString::number(clientNumber); + statsObject[qPrintable(property)] = clientData->getJitterBufferStats(); + } + } + ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject); diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 0c41cc70f9..1c0f68d5a3 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -138,3 +138,26 @@ void AudioMixerClientData::pushBuffersAfterFrameSend() { i++; } } + +QString AudioMixerClientData::getJitterBufferStats() const { + QString result; + AvatarAudioRingBuffer* avatarRingBuffer = getAvatarAudioRingBuffer(); + if (avatarRingBuffer) { + int desiredJitterBuffer = avatarRingBuffer->getDesiredJitterBufferFrames(); + int currentJitterBuffer = avatarRingBuffer->getCurrentJitterBufferFrames(); + result += "mic.desired:" + QString::number(desiredJitterBuffer) + " current:" + QString::number(currentJitterBuffer); + } else { + result = "mic unknown"; + } + + for (int i = 0; i < _ringBuffers.size(); i++) { + if (_ringBuffers[i]->getType() == PositionalAudioRingBuffer::Injector) { + int desiredJitterBuffer = _ringBuffers[i]->getDesiredJitterBufferFrames(); + int currentJitterBuffer = _ringBuffers[i]->getCurrentJitterBufferFrames(); + result += "| injected["+QString::number(i)+"].desired:" + + QString::number(desiredJitterBuffer) + " current:" + QString::number(currentJitterBuffer); + } + } + + return result; +} diff --git a/assignment-client/src/audio/AudioMixerClientData.h b/assignment-client/src/audio/AudioMixerClientData.h index 3c4ddd3459..1760b96f5d 100644 --- a/assignment-client/src/audio/AudioMixerClientData.h +++ b/assignment-client/src/audio/AudioMixerClientData.h @@ -29,6 +29,9 @@ public: int parseData(const QByteArray& packet); void checkBuffersBeforeFrameSend(AABox* checkSourceZone = NULL, AABox* listenerZone = NULL); void pushBuffersAfterFrameSend(); + + QString getJitterBufferStats() const; + private: QList _ringBuffers; }; diff --git a/libraries/audio/src/PositionalAudioRingBuffer.h b/libraries/audio/src/PositionalAudioRingBuffer.h index 8c2122f29e..4c7148abbe 100644 --- a/libraries/audio/src/PositionalAudioRingBuffer.h +++ b/libraries/audio/src/PositionalAudioRingBuffer.h @@ -77,6 +77,9 @@ public: int getSamplesPerFrame() const { return _isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL; } + int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; } + int getCurrentJitterBufferFrames() const { return _currentJitterBufferFrames; } + protected: // disallow copying of PositionalAudioRingBuffer objects PositionalAudioRingBuffer(const PositionalAudioRingBuffer&);