Loading media/libmediametrics/include/MediaMetricsConstants.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -92,6 +92,7 @@ #define AMEDIAMETRICS_PROP_SUFFIX_CHAR_DUPLICATES_ALLOWED '#' #define AMEDIAMETRICS_PROP_SUFFIX_CHAR_DUPLICATES_ALLOWED '#' #define AMEDIAMETRICS_PROP_ALLOWUID "_allowUid" // int32_t, allow client uid to post #define AMEDIAMETRICS_PROP_ALLOWUID "_allowUid" // int32_t, allow client uid to post #define AMEDIAMETRICS_PROP_AUDIOMODE "audioMode" // string (audio.flinger) #define AMEDIAMETRICS_PROP_AUXEFFECTID "auxEffectId" // int32 (AudioTrack) #define AMEDIAMETRICS_PROP_AUXEFFECTID "auxEffectId" // int32 (AudioTrack) #define AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES "bufferSizeFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES "bufferSizeFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERCAPACITYFRAMES "bufferCapacityFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERCAPACITYFRAMES "bufferCapacityFrames" // int32 Loading Loading @@ -146,6 +147,7 @@ #define AMEDIAMETRICS_PROP_UNDERRUN "underrun" // int32 #define AMEDIAMETRICS_PROP_UNDERRUN "underrun" // int32 #define AMEDIAMETRICS_PROP_UNDERRUNFRAMES "underrunFrames" // int64_t from Thread #define AMEDIAMETRICS_PROP_UNDERRUNFRAMES "underrunFrames" // int64_t from Thread #define AMEDIAMETRICS_PROP_USAGE "usage" // string attributes (ATrack) #define AMEDIAMETRICS_PROP_USAGE "usage" // string attributes (ATrack) #define AMEDIAMETRICS_PROP_VOICEVOLUME "voiceVolume" // double (audio.flinger) #define AMEDIAMETRICS_PROP_VOLUME_LEFT "volume.left" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_LEFT "volume.left" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_RIGHT "volume.right" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_RIGHT "volume.right" // double (AudioTrack) #define AMEDIAMETRICS_PROP_WHERE "where" // string value #define AMEDIAMETRICS_PROP_WHERE "where" // string value Loading @@ -170,7 +172,9 @@ #define AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE "pause" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE "pause" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_READPARAMETERS "readParameters" // Thread #define AMEDIAMETRICS_PROP_EVENT_VALUE_READPARAMETERS "readParameters" // Thread #define AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE "restore" #define AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE "restore" #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE "setMode" // AudioFlinger #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETPLAYBACKPARAM "setPlaybackParam" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETPLAYBACKPARAM "setPlaybackParam" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME "setVoiceVolume" // AudioFlinger #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOLUME "setVolume" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOLUME "setVolume" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_START "start" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_START "start" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_STOP "stop" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_STOP "stop" // AudioTrack, AudioRecord Loading services/audioflinger/AudioFlinger.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -1176,6 +1176,10 @@ status_t AudioFlinger::setMode(audio_mode_t mode) mPlaybackThreads.valueAt(i)->setMode(mode); mPlaybackThreads.valueAt(i)->setMode(mode); } } mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE) .set(AMEDIAMETRICS_PROP_AUDIOMODE, toString(mode)) .record(); return ret; return ret; } } Loading Loading @@ -1741,6 +1745,10 @@ status_t AudioFlinger::setVoiceVolume(float value) ret = dev->setVoiceVolume(value); ret = dev->setVoiceVolume(value); mHardwareStatus = AUDIO_HW_IDLE; mHardwareStatus = AUDIO_HW_IDLE; mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME) .set(AMEDIAMETRICS_PROP_VOICEVOLUME, (double)value) .record(); return ret; return ret; } } Loading services/mediametrics/Android.bp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,7 @@ cc_library_shared { srcs: [ srcs: [ "AudioAnalytics.cpp", "AudioAnalytics.cpp", "AudioPowerUsage.cpp", "iface_statsd.cpp", "iface_statsd.cpp", "MediaMetricsService.cpp", "MediaMetricsService.cpp", "statsd_audiopolicy.cpp", "statsd_audiopolicy.cpp", Loading @@ -55,6 +56,7 @@ cc_library_shared { shared_libs: [ shared_libs: [ "libbinder", "libbinder", "libcutils", "liblog", "liblog", "libmediametrics", "libmediametrics", "libmediautils", "libmediautils", Loading services/mediametrics/AudioAnalytics.cpp +49 −0 Original line number Original line Diff line number Diff line Loading @@ -132,6 +132,49 @@ AudioAnalytics::AudioAnalytics() [this](const std::shared_ptr<const android::mediametrics::Item> &item){ [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mDeviceConnection.createPatch(item); mDeviceConnection.createPatch(item); })); })); // Handle power usage mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_TRACK "*." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkTrackRecord(item, true /* isTrack */); })); mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_RECORD "*." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkTrackRecord(item, false /* isTrack */); })); mActions.addAction( AMEDIAMETRICS_KEY_AUDIO_FLINGER "." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ // ALOGD("(key=%s) Audioflinger setMode", item->getKey().c_str()); mAudioPowerUsage.checkMode(item); })); mActions.addAction( AMEDIAMETRICS_KEY_AUDIO_FLINGER "." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ // ALOGD("(key=%s) Audioflinger setVoiceVolume", item->getKey().c_str()); mAudioPowerUsage.checkVoiceVolume(item); })); mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_THREAD "*." AMEDIAMETRICS_PROP_EVENT, std::string("createAudioPatch"), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkCreatePatch(item); })); } } AudioAnalytics::~AudioAnalytics() AudioAnalytics::~AudioAnalytics() Loading Loading @@ -173,6 +216,12 @@ std::pair<std::string, int32_t> AudioAnalytics::dump( ss << s; ss << s; ll -= l; ll -= l; } } if (ll > 0 && prefix == nullptr) { auto [s, l] = mAudioPowerUsage.dump(ll); ss << s; ll -= l; } return { ss.str(), lines - ll }; return { ss.str(), lines - ll }; } } Loading services/mediametrics/AudioAnalytics.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <android-base/thread_annotations.h> #include <android-base/thread_annotations.h> #include "AnalyticsActions.h" #include "AnalyticsActions.h" #include "AnalyticsState.h" #include "AnalyticsState.h" #include "AudioPowerUsage.h" #include "TimedAction.h" #include "TimedAction.h" #include "Wrap.h" #include "Wrap.h" Loading @@ -26,6 +27,9 @@ namespace android::mediametrics { class AudioAnalytics class AudioAnalytics { { // AudioAnalytics action / state helper classes friend AudioPowerUsage; public: public: AudioAnalytics(); AudioAnalytics(); ~AudioAnalytics(); ~AudioAnalytics(); Loading Loading @@ -72,6 +76,9 @@ public: // underlying state is locked. // underlying state is locked. mPreviousAnalyticsState->clear(); mPreviousAnalyticsState->clear(); mAnalyticsState->clear(); mAnalyticsState->clear(); // Clear power usage state. mAudioPowerUsage.clear(); } } private: private: Loading Loading @@ -149,6 +156,8 @@ private: int32_t mA2dpConnectedSuccesses GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedSuccesses GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedFailures GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedFailures GUARDED_BY(mLock) = 0; } mDeviceConnection{*this}; } mDeviceConnection{*this}; AudioPowerUsage mAudioPowerUsage{this}; }; }; } // namespace android::mediametrics } // namespace android::mediametrics Loading
media/libmediametrics/include/MediaMetricsConstants.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -92,6 +92,7 @@ #define AMEDIAMETRICS_PROP_SUFFIX_CHAR_DUPLICATES_ALLOWED '#' #define AMEDIAMETRICS_PROP_SUFFIX_CHAR_DUPLICATES_ALLOWED '#' #define AMEDIAMETRICS_PROP_ALLOWUID "_allowUid" // int32_t, allow client uid to post #define AMEDIAMETRICS_PROP_ALLOWUID "_allowUid" // int32_t, allow client uid to post #define AMEDIAMETRICS_PROP_AUDIOMODE "audioMode" // string (audio.flinger) #define AMEDIAMETRICS_PROP_AUXEFFECTID "auxEffectId" // int32 (AudioTrack) #define AMEDIAMETRICS_PROP_AUXEFFECTID "auxEffectId" // int32 (AudioTrack) #define AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES "bufferSizeFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES "bufferSizeFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERCAPACITYFRAMES "bufferCapacityFrames" // int32 #define AMEDIAMETRICS_PROP_BUFFERCAPACITYFRAMES "bufferCapacityFrames" // int32 Loading Loading @@ -146,6 +147,7 @@ #define AMEDIAMETRICS_PROP_UNDERRUN "underrun" // int32 #define AMEDIAMETRICS_PROP_UNDERRUN "underrun" // int32 #define AMEDIAMETRICS_PROP_UNDERRUNFRAMES "underrunFrames" // int64_t from Thread #define AMEDIAMETRICS_PROP_UNDERRUNFRAMES "underrunFrames" // int64_t from Thread #define AMEDIAMETRICS_PROP_USAGE "usage" // string attributes (ATrack) #define AMEDIAMETRICS_PROP_USAGE "usage" // string attributes (ATrack) #define AMEDIAMETRICS_PROP_VOICEVOLUME "voiceVolume" // double (audio.flinger) #define AMEDIAMETRICS_PROP_VOLUME_LEFT "volume.left" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_LEFT "volume.left" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_RIGHT "volume.right" // double (AudioTrack) #define AMEDIAMETRICS_PROP_VOLUME_RIGHT "volume.right" // double (AudioTrack) #define AMEDIAMETRICS_PROP_WHERE "where" // string value #define AMEDIAMETRICS_PROP_WHERE "where" // string value Loading @@ -170,7 +172,9 @@ #define AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE "pause" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE "pause" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_READPARAMETERS "readParameters" // Thread #define AMEDIAMETRICS_PROP_EVENT_VALUE_READPARAMETERS "readParameters" // Thread #define AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE "restore" #define AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE "restore" #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE "setMode" // AudioFlinger #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETPLAYBACKPARAM "setPlaybackParam" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETPLAYBACKPARAM "setPlaybackParam" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME "setVoiceVolume" // AudioFlinger #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOLUME "setVolume" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOLUME "setVolume" // AudioTrack #define AMEDIAMETRICS_PROP_EVENT_VALUE_START "start" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_START "start" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_STOP "stop" // AudioTrack, AudioRecord #define AMEDIAMETRICS_PROP_EVENT_VALUE_STOP "stop" // AudioTrack, AudioRecord Loading
services/audioflinger/AudioFlinger.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -1176,6 +1176,10 @@ status_t AudioFlinger::setMode(audio_mode_t mode) mPlaybackThreads.valueAt(i)->setMode(mode); mPlaybackThreads.valueAt(i)->setMode(mode); } } mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE) .set(AMEDIAMETRICS_PROP_AUDIOMODE, toString(mode)) .record(); return ret; return ret; } } Loading Loading @@ -1741,6 +1745,10 @@ status_t AudioFlinger::setVoiceVolume(float value) ret = dev->setVoiceVolume(value); ret = dev->setVoiceVolume(value); mHardwareStatus = AUDIO_HW_IDLE; mHardwareStatus = AUDIO_HW_IDLE; mediametrics::LogItem(mMetricsId) .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME) .set(AMEDIAMETRICS_PROP_VOICEVOLUME, (double)value) .record(); return ret; return ret; } } Loading
services/mediametrics/Android.bp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,7 @@ cc_library_shared { srcs: [ srcs: [ "AudioAnalytics.cpp", "AudioAnalytics.cpp", "AudioPowerUsage.cpp", "iface_statsd.cpp", "iface_statsd.cpp", "MediaMetricsService.cpp", "MediaMetricsService.cpp", "statsd_audiopolicy.cpp", "statsd_audiopolicy.cpp", Loading @@ -55,6 +56,7 @@ cc_library_shared { shared_libs: [ shared_libs: [ "libbinder", "libbinder", "libcutils", "liblog", "liblog", "libmediametrics", "libmediametrics", "libmediautils", "libmediautils", Loading
services/mediametrics/AudioAnalytics.cpp +49 −0 Original line number Original line Diff line number Diff line Loading @@ -132,6 +132,49 @@ AudioAnalytics::AudioAnalytics() [this](const std::shared_ptr<const android::mediametrics::Item> &item){ [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mDeviceConnection.createPatch(item); mDeviceConnection.createPatch(item); })); })); // Handle power usage mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_TRACK "*." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkTrackRecord(item, true /* isTrack */); })); mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_RECORD "*." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkTrackRecord(item, false /* isTrack */); })); mActions.addAction( AMEDIAMETRICS_KEY_AUDIO_FLINGER "." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ // ALOGD("(key=%s) Audioflinger setMode", item->getKey().c_str()); mAudioPowerUsage.checkMode(item); })); mActions.addAction( AMEDIAMETRICS_KEY_AUDIO_FLINGER "." AMEDIAMETRICS_PROP_EVENT, std::string(AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ // ALOGD("(key=%s) Audioflinger setVoiceVolume", item->getKey().c_str()); mAudioPowerUsage.checkVoiceVolume(item); })); mActions.addAction( AMEDIAMETRICS_KEY_PREFIX_AUDIO_THREAD "*." AMEDIAMETRICS_PROP_EVENT, std::string("createAudioPatch"), std::make_shared<AnalyticsActions::Function>( [this](const std::shared_ptr<const android::mediametrics::Item> &item){ mAudioPowerUsage.checkCreatePatch(item); })); } } AudioAnalytics::~AudioAnalytics() AudioAnalytics::~AudioAnalytics() Loading Loading @@ -173,6 +216,12 @@ std::pair<std::string, int32_t> AudioAnalytics::dump( ss << s; ss << s; ll -= l; ll -= l; } } if (ll > 0 && prefix == nullptr) { auto [s, l] = mAudioPowerUsage.dump(ll); ss << s; ll -= l; } return { ss.str(), lines - ll }; return { ss.str(), lines - ll }; } } Loading
services/mediametrics/AudioAnalytics.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <android-base/thread_annotations.h> #include <android-base/thread_annotations.h> #include "AnalyticsActions.h" #include "AnalyticsActions.h" #include "AnalyticsState.h" #include "AnalyticsState.h" #include "AudioPowerUsage.h" #include "TimedAction.h" #include "TimedAction.h" #include "Wrap.h" #include "Wrap.h" Loading @@ -26,6 +27,9 @@ namespace android::mediametrics { class AudioAnalytics class AudioAnalytics { { // AudioAnalytics action / state helper classes friend AudioPowerUsage; public: public: AudioAnalytics(); AudioAnalytics(); ~AudioAnalytics(); ~AudioAnalytics(); Loading Loading @@ -72,6 +76,9 @@ public: // underlying state is locked. // underlying state is locked. mPreviousAnalyticsState->clear(); mPreviousAnalyticsState->clear(); mAnalyticsState->clear(); mAnalyticsState->clear(); // Clear power usage state. mAudioPowerUsage.clear(); } } private: private: Loading Loading @@ -149,6 +156,8 @@ private: int32_t mA2dpConnectedSuccesses GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedSuccesses GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedFailures GUARDED_BY(mLock) = 0; int32_t mA2dpConnectedFailures GUARDED_BY(mLock) = 0; } mDeviceConnection{*this}; } mDeviceConnection{*this}; AudioPowerUsage mAudioPowerUsage{this}; }; }; } // namespace android::mediametrics } // namespace android::mediametrics