Loading media/libaudioclient/AudioRecord.cpp +10 −6 Original line number Diff line number Diff line Loading @@ -405,7 +405,7 @@ status_t AudioRecord::start(AudioSystem::sync_event_t event, audio_session_t tri ? AMEDIAMETRICS_PROP_CALLERNAME_VALUE_UNKNOWN : mCallerName.c_str()) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_START) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)status) .record(); }); Loading Loading @@ -481,7 +481,7 @@ void AudioRecord::stop() mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_STOP) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .record(); }); Loading Loading @@ -742,6 +742,8 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch, const String void *iMemPointer; audio_track_cblk_t* cblk; status_t status; std::string flagsAsString; std::string originalFlagsAsString; if (audioFlinger == 0) { ALOGE("%s(%d): Could not get audioflinger", __func__, mPortId); Loading Loading @@ -920,13 +922,15 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch, const String mDeathNotifier = new DeathNotifier(this); IInterface::asBinder(mAudioRecord)->linkToDeath(mDeathNotifier, this); InputFlagConverter::toString(mFlags, flagsAsString); InputFlagConverter::toString(mOrigFlags, originalFlagsAsString); mMetricsId = std::string(AMEDIAMETRICS_KEY_PREFIX_AUDIO_RECORD) + std::to_string(mPortId); mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) // the following are immutable (at least until restore) .set(AMEDIAMETRICS_PROP_FLAGS, (int32_t)mFlags) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, (int32_t)mOrigFlags) .set(AMEDIAMETRICS_PROP_FLAGS, flagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, originalFlagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_SESSIONID, (int32_t)mSessionId) .set(AMEDIAMETRICS_PROP_TRACKID, mPortId) .set(AMEDIAMETRICS_PROP_SOURCE, toString(mAttributes.source).c_str()) Loading Loading @@ -1387,7 +1391,7 @@ status_t AudioRecord::restoreRecord_l(const char *from) mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)result) .set(AMEDIAMETRICS_PROP_WHERE, from) Loading media/libaudioclient/AudioTrack.cpp +12 −8 Original line number Diff line number Diff line Loading @@ -650,7 +650,7 @@ status_t AudioTrack::start() ? AMEDIAMETRICS_PROP_CALLERNAME_VALUE_UNKNOWN : mCallerName.c_str()) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_START) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)status) .record(); }); Loading Loading @@ -783,7 +783,7 @@ void AudioTrack::stop() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_STOP) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); logBufferSizeUnderruns(); Loading Loading @@ -845,7 +845,7 @@ void AudioTrack::flush() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_FLUSH) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); }); Loading Loading @@ -886,7 +886,7 @@ void AudioTrack::pause() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); }); Loading Loading @@ -1715,15 +1715,19 @@ status_t AudioTrack::createTrack_l() // The creation of the audio track by AudioFlinger (in the code above) // is the first log of the AudioTrack and must be present before // any AudioTrack client logs will be accepted. std::string flagsAsString; OutputFlagConverter::toString(mFlags, flagsAsString); std::string originalFlagsAsString; OutputFlagConverter::toString(mOrigFlags, originalFlagsAsString); mMetricsId = std::string(AMEDIAMETRICS_KEY_PREFIX_AUDIO_TRACK) + std::to_string(mPortId); mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE) // the following are immutable .set(AMEDIAMETRICS_PROP_FLAGS, (int32_t)mFlags) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, (int32_t)mOrigFlags) .set(AMEDIAMETRICS_PROP_FLAGS, flagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, originalFlagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_SESSIONID, (int32_t)mSessionId) .set(AMEDIAMETRICS_PROP_TRACKID, mPortId) // dup from key .set(AMEDIAMETRICS_PROP_STREAMTYPE, toString(mStreamType).c_str()) .set(AMEDIAMETRICS_PROP_CONTENTTYPE, toString(mAttributes.content_type).c_str()) .set(AMEDIAMETRICS_PROP_USAGE, toString(mAttributes.usage).c_str()) .set(AMEDIAMETRICS_PROP_THREADID, (int32_t)output.outputId) Loading Loading @@ -2440,7 +2444,7 @@ status_t AudioTrack::restoreTrack_l(const char *from) mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)result) .set(AMEDIAMETRICS_PROP_WHERE, from) Loading media/libmediametrics/include/MediaMetricsConstants.h +4 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ // They must be appended with another value to make a key. #define AMEDIAMETRICS_KEY_PREFIX_AUDIO "audio." // Device related key prefix. #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_DEVICE AMEDIAMETRICS_KEY_PREFIX_AUDIO "device." // The AudioMmap key appends the "trackId" to the prefix. // This is the AudioFlinger equivalent of the AAudio Stream. // TODO: unify with AMEDIAMETRICS_KEY_PREFIX_AUDIO_STREAM Loading Loading @@ -113,6 +116,7 @@ #define AMEDIAMETRICS_PROP_DURATIONNS "durationNs" // int64 duration time span #define AMEDIAMETRICS_PROP_ENCODING "encoding" // string value of format #define AMEDIAMETRICS_PROP_EVENT "event#" // string value (often func name) #define AMEDIAMETRICS_PROP_EXECUTIONTIMENS "executionTimeNs" // time to execute the event // TODO: fix inconsistency in flags: AudioRecord / AudioTrack int32, AudioThread string #define AMEDIAMETRICS_PROP_FLAGS "flags" Loading services/audioflinger/Effects.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -2812,7 +2812,7 @@ bool AudioFlinger::EffectChain::EffectCallback::isOffloadOrMmap() const { if (t == nullptr) { return false; } return t->type() == ThreadBase::OFFLOAD || t->type() == ThreadBase::MMAP; return t->isOffloadOrMmap(); } uint32_t AudioFlinger::EffectChain::EffectCallback::sampleRate() const { Loading services/audioflinger/ThreadMetrics.h +22 −13 Original line number Diff line number Diff line Loading @@ -58,9 +58,11 @@ public: // 2) We come out of standby void logBeginInterval() { std::lock_guard l(mLock); if (mDevices != mCreatePatchDevices) { // The devices we look for change depend on whether the Thread is input or output. const std::string& patchDevices = mIsOut ? mCreatePatchOutDevices : mCreatePatchInDevices; if (mDevices != patchDevices) { deliverCumulativeMetrics(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP); mDevices = mCreatePatchDevices; // set after endAudioIntervalGroup mDevices = patchDevices; // set after endAudioIntervalGroup resetIntervalGroupMetrics(); deliverDeviceMetrics( AMEDIAMETRICS_PROP_EVENT_VALUE_BEGINAUDIOINTERVALGROUP, mDevices.c_str()); Loading @@ -80,12 +82,14 @@ public: .record(); } void logCreatePatch(const std::string& devices) { void logCreatePatch(const std::string& inDevices, const std::string& outDevices) { std::lock_guard l(mLock); mCreatePatchDevices = devices; mCreatePatchInDevices = inDevices; mCreatePatchOutDevices = outDevices; mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATEAUDIOPATCH) .set(AMEDIAMETRICS_PROP_OUTPUTDEVICES, devices) .set(AMEDIAMETRICS_PROP_INPUTDEVICES, inDevices) .set(AMEDIAMETRICS_PROP_OUTPUTDEVICES, outDevices) .record(); } Loading Loading @@ -115,11 +119,13 @@ public: mDeviceLatencyMs.add(latencyMs); } // TODO: further implement this. void logUnderrunFrames(size_t count, size_t frames) { void logUnderrunFrames(size_t frames) { std::lock_guard l(mLock); mUnderrunCount = count; mUnderrunFrames = frames; if (mLastUnderrun == false && frames > 0) { ++mUnderrunCount; // count non-continguous underrun sequences. } mLastUnderrun = (frames > 0); mUnderrunFrames += frames; } const std::string& getMetricsId() const { Loading Loading @@ -164,6 +170,7 @@ private: mDeviceLatencyMs.reset(); mLastUnderrun = false; mUnderrunCount = 0; mUnderrunFrames = 0; } Loading @@ -174,8 +181,9 @@ private: mutable std::mutex mLock; // Devices in the interval group. std::string mDevices GUARDED_BY(mLock); std::string mCreatePatchDevices GUARDED_BY(mLock); std::string mDevices GUARDED_BY(mLock); // last input or output devices based on mIsOut. std::string mCreatePatchInDevices GUARDED_BY(mLock); std::string mCreatePatchOutDevices GUARDED_BY(mLock); // Number of intervals and playing time int32_t mIntervalCount GUARDED_BY(mLock) = 0; Loading @@ -187,8 +195,9 @@ private: audio_utils::Statistics<double> mDeviceLatencyMs GUARDED_BY(mLock); // underrun count and frames int64_t mUnderrunCount GUARDED_BY(mLock) = 0; int64_t mUnderrunFrames GUARDED_BY(mLock) = 0; bool mLastUnderrun GUARDED_BY(mLock) = false; // checks consecutive underruns int64_t mUnderrunCount GUARDED_BY(mLock) = 0; // number of consecutive underruns int64_t mUnderrunFrames GUARDED_BY(mLock) = 0; // total estimated frames underrun }; } // namespace android Loading Loading
media/libaudioclient/AudioRecord.cpp +10 −6 Original line number Diff line number Diff line Loading @@ -405,7 +405,7 @@ status_t AudioRecord::start(AudioSystem::sync_event_t event, audio_session_t tri ? AMEDIAMETRICS_PROP_CALLERNAME_VALUE_UNKNOWN : mCallerName.c_str()) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_START) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)status) .record(); }); Loading Loading @@ -481,7 +481,7 @@ void AudioRecord::stop() mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_STOP) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .record(); }); Loading Loading @@ -742,6 +742,8 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch, const String void *iMemPointer; audio_track_cblk_t* cblk; status_t status; std::string flagsAsString; std::string originalFlagsAsString; if (audioFlinger == 0) { ALOGE("%s(%d): Could not get audioflinger", __func__, mPortId); Loading Loading @@ -920,13 +922,15 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch, const String mDeathNotifier = new DeathNotifier(this); IInterface::asBinder(mAudioRecord)->linkToDeath(mDeathNotifier, this); InputFlagConverter::toString(mFlags, flagsAsString); InputFlagConverter::toString(mOrigFlags, originalFlagsAsString); mMetricsId = std::string(AMEDIAMETRICS_KEY_PREFIX_AUDIO_RECORD) + std::to_string(mPortId); mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) // the following are immutable (at least until restore) .set(AMEDIAMETRICS_PROP_FLAGS, (int32_t)mFlags) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, (int32_t)mOrigFlags) .set(AMEDIAMETRICS_PROP_FLAGS, flagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, originalFlagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_SESSIONID, (int32_t)mSessionId) .set(AMEDIAMETRICS_PROP_TRACKID, mPortId) .set(AMEDIAMETRICS_PROP_SOURCE, toString(mAttributes.source).c_str()) Loading Loading @@ -1387,7 +1391,7 @@ status_t AudioRecord::restoreRecord_l(const char *from) mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mActive)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)result) .set(AMEDIAMETRICS_PROP_WHERE, from) Loading
media/libaudioclient/AudioTrack.cpp +12 −8 Original line number Diff line number Diff line Loading @@ -650,7 +650,7 @@ status_t AudioTrack::start() ? AMEDIAMETRICS_PROP_CALLERNAME_VALUE_UNKNOWN : mCallerName.c_str()) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_START) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)status) .record(); }); Loading Loading @@ -783,7 +783,7 @@ void AudioTrack::stop() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_STOP) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); logBufferSizeUnderruns(); Loading Loading @@ -845,7 +845,7 @@ void AudioTrack::flush() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_FLUSH) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); }); Loading Loading @@ -886,7 +886,7 @@ void AudioTrack::pause() mediametrics::Defer defer([&]() { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .record(); }); Loading Loading @@ -1715,15 +1715,19 @@ status_t AudioTrack::createTrack_l() // The creation of the audio track by AudioFlinger (in the code above) // is the first log of the AudioTrack and must be present before // any AudioTrack client logs will be accepted. std::string flagsAsString; OutputFlagConverter::toString(mFlags, flagsAsString); std::string originalFlagsAsString; OutputFlagConverter::toString(mOrigFlags, originalFlagsAsString); mMetricsId = std::string(AMEDIAMETRICS_KEY_PREFIX_AUDIO_TRACK) + std::to_string(mPortId); mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE) // the following are immutable .set(AMEDIAMETRICS_PROP_FLAGS, (int32_t)mFlags) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, (int32_t)mOrigFlags) .set(AMEDIAMETRICS_PROP_FLAGS, flagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, originalFlagsAsString.c_str()) .set(AMEDIAMETRICS_PROP_SESSIONID, (int32_t)mSessionId) .set(AMEDIAMETRICS_PROP_TRACKID, mPortId) // dup from key .set(AMEDIAMETRICS_PROP_STREAMTYPE, toString(mStreamType).c_str()) .set(AMEDIAMETRICS_PROP_CONTENTTYPE, toString(mAttributes.content_type).c_str()) .set(AMEDIAMETRICS_PROP_USAGE, toString(mAttributes.usage).c_str()) .set(AMEDIAMETRICS_PROP_THREADID, (int32_t)output.outputId) Loading Loading @@ -2440,7 +2444,7 @@ status_t AudioTrack::restoreTrack_l(const char *from) mediametrics::Defer defer([&] { mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE) .set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs)) .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState)) .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)result) .set(AMEDIAMETRICS_PROP_WHERE, from) Loading
media/libmediametrics/include/MediaMetricsConstants.h +4 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ // They must be appended with another value to make a key. #define AMEDIAMETRICS_KEY_PREFIX_AUDIO "audio." // Device related key prefix. #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_DEVICE AMEDIAMETRICS_KEY_PREFIX_AUDIO "device." // The AudioMmap key appends the "trackId" to the prefix. // This is the AudioFlinger equivalent of the AAudio Stream. // TODO: unify with AMEDIAMETRICS_KEY_PREFIX_AUDIO_STREAM Loading Loading @@ -113,6 +116,7 @@ #define AMEDIAMETRICS_PROP_DURATIONNS "durationNs" // int64 duration time span #define AMEDIAMETRICS_PROP_ENCODING "encoding" // string value of format #define AMEDIAMETRICS_PROP_EVENT "event#" // string value (often func name) #define AMEDIAMETRICS_PROP_EXECUTIONTIMENS "executionTimeNs" // time to execute the event // TODO: fix inconsistency in flags: AudioRecord / AudioTrack int32, AudioThread string #define AMEDIAMETRICS_PROP_FLAGS "flags" Loading
services/audioflinger/Effects.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -2812,7 +2812,7 @@ bool AudioFlinger::EffectChain::EffectCallback::isOffloadOrMmap() const { if (t == nullptr) { return false; } return t->type() == ThreadBase::OFFLOAD || t->type() == ThreadBase::MMAP; return t->isOffloadOrMmap(); } uint32_t AudioFlinger::EffectChain::EffectCallback::sampleRate() const { Loading
services/audioflinger/ThreadMetrics.h +22 −13 Original line number Diff line number Diff line Loading @@ -58,9 +58,11 @@ public: // 2) We come out of standby void logBeginInterval() { std::lock_guard l(mLock); if (mDevices != mCreatePatchDevices) { // The devices we look for change depend on whether the Thread is input or output. const std::string& patchDevices = mIsOut ? mCreatePatchOutDevices : mCreatePatchInDevices; if (mDevices != patchDevices) { deliverCumulativeMetrics(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP); mDevices = mCreatePatchDevices; // set after endAudioIntervalGroup mDevices = patchDevices; // set after endAudioIntervalGroup resetIntervalGroupMetrics(); deliverDeviceMetrics( AMEDIAMETRICS_PROP_EVENT_VALUE_BEGINAUDIOINTERVALGROUP, mDevices.c_str()); Loading @@ -80,12 +82,14 @@ public: .record(); } void logCreatePatch(const std::string& devices) { void logCreatePatch(const std::string& inDevices, const std::string& outDevices) { std::lock_guard l(mLock); mCreatePatchDevices = devices; mCreatePatchInDevices = inDevices; mCreatePatchOutDevices = outDevices; mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_CREATEAUDIOPATCH) .set(AMEDIAMETRICS_PROP_OUTPUTDEVICES, devices) .set(AMEDIAMETRICS_PROP_INPUTDEVICES, inDevices) .set(AMEDIAMETRICS_PROP_OUTPUTDEVICES, outDevices) .record(); } Loading Loading @@ -115,11 +119,13 @@ public: mDeviceLatencyMs.add(latencyMs); } // TODO: further implement this. void logUnderrunFrames(size_t count, size_t frames) { void logUnderrunFrames(size_t frames) { std::lock_guard l(mLock); mUnderrunCount = count; mUnderrunFrames = frames; if (mLastUnderrun == false && frames > 0) { ++mUnderrunCount; // count non-continguous underrun sequences. } mLastUnderrun = (frames > 0); mUnderrunFrames += frames; } const std::string& getMetricsId() const { Loading Loading @@ -164,6 +170,7 @@ private: mDeviceLatencyMs.reset(); mLastUnderrun = false; mUnderrunCount = 0; mUnderrunFrames = 0; } Loading @@ -174,8 +181,9 @@ private: mutable std::mutex mLock; // Devices in the interval group. std::string mDevices GUARDED_BY(mLock); std::string mCreatePatchDevices GUARDED_BY(mLock); std::string mDevices GUARDED_BY(mLock); // last input or output devices based on mIsOut. std::string mCreatePatchInDevices GUARDED_BY(mLock); std::string mCreatePatchOutDevices GUARDED_BY(mLock); // Number of intervals and playing time int32_t mIntervalCount GUARDED_BY(mLock) = 0; Loading @@ -187,8 +195,9 @@ private: audio_utils::Statistics<double> mDeviceLatencyMs GUARDED_BY(mLock); // underrun count and frames int64_t mUnderrunCount GUARDED_BY(mLock) = 0; int64_t mUnderrunFrames GUARDED_BY(mLock) = 0; bool mLastUnderrun GUARDED_BY(mLock) = false; // checks consecutive underruns int64_t mUnderrunCount GUARDED_BY(mLock) = 0; // number of consecutive underruns int64_t mUnderrunFrames GUARDED_BY(mLock) = 0; // total estimated frames underrun }; } // namespace android Loading