Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47760c77 authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Merge "MediaMetrics: Implement audio power usage metrics" into rvc-dev am:...

Merge "MediaMetrics: Implement audio power usage metrics" into rvc-dev am: 2464cd70 am: b5865bba am: f7e4f52d am: c526510b

Change-Id: I3a07016cad7f936fadbba93900ef110d4451a1c9
parents a14a285a c526510b
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
@@ -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
+8 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}


@@ -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;
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -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",
@@ -55,6 +56,7 @@ cc_library_shared {


    shared_libs: [
    shared_libs: [
        "libbinder",
        "libbinder",
        "libcutils",
        "liblog",
        "liblog",
        "libmediametrics",
        "libmediametrics",
        "libmediautils",
        "libmediautils",
+49 −0
Original line number Original line Diff line number Diff line
@@ -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()
@@ -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 };
}
}


+9 −0
Original line number Original line Diff line number Diff line
@@ -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"


@@ -26,6 +27,9 @@ namespace android::mediametrics {


class AudioAnalytics
class AudioAnalytics
{
{
    // AudioAnalytics action / state helper classes
    friend AudioPowerUsage;

public:
public:
    AudioAnalytics();
    AudioAnalytics();
    ~AudioAnalytics();
    ~AudioAnalytics();
@@ -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:
@@ -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