time audio mixing frames

This commit is contained in:
Zach Pomerantz 2016-11-30 18:18:36 -05:00
parent 8a6dcdeb68
commit 2c42bb0aa8
2 changed files with 22 additions and 0 deletions

View file

@ -267,6 +267,15 @@ void AudioMixer::sendStatsPacket() {
statsObject["avg_streams_per_frame"] = (float)_stats.sumStreams / (float)_numStatFrames;
statsObject["avg_listeners_per_frame"] = (float)_stats.sumListeners / (float)_numStatFrames;
_sumMixTimesIndex = (_sumMixTimesIndex + 1) % MIX_TIMES_TRAILING_SECONDS;
_sumMixTimesTrailing -= _sumMixTimesHistory[_sumMixTimesIndex];
_sumMixTimesHistory[_sumMixTimesIndex] = _sumMixTimes.count();
_sumMixTimesTrailing += _sumMixTimesHistory[_sumMixTimesIndex];
statsObject["avg_us_per_frame"] = (qint64)(_sumMixTimes.count() / _numStatFrames);
statsObject["avg_us_per_frames_trailing"] =
(qint64)((_sumMixTimesTrailing / MIX_TIMES_TRAILING_SECONDS) / _numStatFrames);
QJsonObject mixStats;
mixStats["%_hrtf_mixes"] = percentageForMixStats(_stats.hrtfRenders);
mixStats["%_hrtf_silent_mixes"] = percentageForMixStats(_stats.hrtfSilentRenders);
@ -280,6 +289,7 @@ void AudioMixer::sendStatsPacket() {
statsObject["mix_stats"] = mixStats;
_numStatFrames = 0;
_sumMixTimes = std::chrono::microseconds(0);
_stats.reset();
// add stats for each listerner
@ -356,6 +366,9 @@ void AudioMixer::start() {
while (!_isFinished) {
manageLoad(frameTimestamp, framesSinceManagement);
// start timing the frame
auto startTime = p_high_resolution_clock::now();
// aquire the read-lock in a single thread, to avoid canonical rwlock undefined behaviors
// node removal will acquire a write lock;
// read locks (in slave threads) while a write lock is pending have undefined order in pthread
@ -375,6 +388,9 @@ void AudioMixer::start() {
slave.stats.reset();
});
// stop timing the frame
_sumMixTimes += std::chrono::duration_cast<std::chrono::microseconds>(p_high_resolution_clock::now() - startTime);
++frame;
++_numStatFrames;

View file

@ -90,6 +90,12 @@ private:
AudioMixerSlavePool _slavePool;
static const int MIX_TIMES_TRAILING_SECONDS = 10;
std::chrono::microseconds _sumMixTimes { 0 };
uint64_t _sumMixTimesTrailing { 0 };
uint64_t _sumMixTimesHistory[MIX_TIMES_TRAILING_SECONDS] { 0 };
int _sumMixTimesIndex { 0 };
static int _numStaticJitterFrames; // -1 denotes dynamic jitter buffering
static float _noiseMutingThreshold;
static float _attenuationPerDoublingInDistance;