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

Commit 7117e8d8 authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "VolumeShaper: Log to mediametrics" into main

parents c7f6ae45 23f8162d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -289,7 +289,7 @@ public:

    std::string toString() const {
        std::stringstream ss;
        ss << "Interpolator{mInterpolatorType=" << static_cast<int32_t>(mInterpolatorType);
        ss << "Interpolator{mInterpolatorType=" << media::toString(mInterpolatorType);
        ss << ", mFirstSlope=" << mFirstSlope;
        ss << ", mLastSlope=" << mLastSlope;
        ss << ", {";
+48 −3
Original line number Diff line number Diff line
@@ -116,6 +116,16 @@ public:
            TYPE_SCALE,
        };

        static std::string toString(Type type) {
            switch (type) {
                case TYPE_ID: return "TYPE_ID";
                case TYPE_SCALE: return "TYPE_SCALE";
                default:
                    return std::string("Unknown Type: ")
                            .append(std::to_string(static_cast<int>(type)));
            }
        }

        // Must match with VolumeShaper.java in frameworks/base.
        enum OptionFlag : int32_t {
            OPTION_FLAG_NONE           = 0,
@@ -125,6 +135,22 @@ public:
            OPTION_FLAG_ALL            = (OPTION_FLAG_VOLUME_IN_DBFS | OPTION_FLAG_CLOCK_TIME),
        };

        static std::string toString(OptionFlag flag) {
            std::string s;
            for (const auto& flagPair : std::initializer_list<std::pair<OptionFlag, const char*>>{
                    {OPTION_FLAG_VOLUME_IN_DBFS, "OPTION_FLAG_VOLUME_IN_DBFS"},
                    {OPTION_FLAG_CLOCK_TIME, "OPTION_FLAG_CLOCK_TIME"},
                }) {
                if (flag & flagPair.first) {
                    if (!s.empty()) {
                        s.append("|");
                    }
                    s.append(flagPair.second);
                }
            }
            return s;
        }

        // Bring from base class; must match with VolumeShaper.java in frameworks/base.
        using InterpolatorType = Interpolator<S, T>::InterpolatorType;

@@ -329,10 +355,10 @@ public:
        // Returns a string for debug printing.
        std::string toString() const {
            std::stringstream ss;
            ss << "VolumeShaper::Configuration{mType=" << static_cast<int32_t>(mType);
            ss << "VolumeShaper::Configuration{mType=" << toString(mType);
            ss << ", mId=" << mId;
            if (mType != TYPE_ID) {
                ss << ", mOptionFlags=" << static_cast<int32_t>(mOptionFlags);
                ss << ", mOptionFlags=" << toString(mOptionFlags);
                ss << ", mDurationMs=" << mDurationMs;
                ss << ", " << Interpolator<S, T>::toString().c_str();
            }
@@ -414,6 +440,25 @@ public:
                            | FLAG_CREATE_IF_NECESSARY),
        };

        static std::string toString(Flag flag) {
            std::string s;
            for (const auto& flagPair : std::initializer_list<std::pair<Flag, const char*>>{
                    {FLAG_REVERSE, "FLAG_REVERSE"},
                    {FLAG_TERMINATE, "FLAG_TERMINATE"},
                    {FLAG_JOIN, "FLAG_JOIN"},
                    {FLAG_DELAY, "FLAG_DELAY"},
                    {FLAG_CREATE_IF_NECESSARY, "FLAG_CREATE_IF_NECESSARY"},
                }) {
                if (flag & flagPair.first) {
                    if (!s.empty()) {
                        s.append("|");
                    }
                    s.append(flagPair.second);
                }
            }
            return s;
        }

        Operation()
            : Operation(FLAG_NONE, -1 /* replaceId */) {
        }
@@ -508,7 +553,7 @@ public:

        std::string toString() const {
            std::stringstream ss;
            ss << "VolumeShaper::Operation{mFlags=" << static_cast<int32_t>(mFlags) ;
            ss << "VolumeShaper::Operation{mFlags=" << toString(mFlags);
            ss << ", mReplaceId=" << mReplaceId;
            ss << ", mXOffset=" << mXOffset;
            ss << "}";
+13 −0
Original line number Diff line number Diff line
@@ -3035,6 +3035,7 @@ VolumeShaper::Status AudioTrack::applyVolumeShaper(
        const sp<VolumeShaper::Configuration>& configuration,
        const sp<VolumeShaper::Operation>& operation)
{
    const int64_t beginNs = systemTime();
    AutoMutex lock(mLock);
    mVolumeHandler->setIdIfNecessary(configuration);
    media::VolumeShaperConfiguration config;
@@ -3042,6 +3043,18 @@ VolumeShaper::Status AudioTrack::applyVolumeShaper(
    media::VolumeShaperOperation op;
    operation->writeToParcelable(&op);
    VolumeShaper::Status status;

    mediametrics::Defer defer([&] {
        mediametrics::LogItem(mMetricsId)
                .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_APPLYVOLUMESHAPER)
                .set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs))
                .set(AMEDIAMETRICS_PROP_STATE, stateToString(mState))
                .set(AMEDIAMETRICS_PROP_STATUS, (int32_t)status)
                .set(AMEDIAMETRICS_PROP_TOSTRING, configuration->toString()
                                 .append(" ")
                                 .append(operation->toString()))
                .record(); });

    mAudioTrack->applyVolumeShaper(config, op, &status);

    if (status == DEAD_OBJECT) {
+2 −0
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@
                                                             // format to transport packets.
                                                             // Raw byte streams are used if this
                                                             // is false.
#define AMEDIAMETRICS_PROP_TOSTRING "toString"             // string
#define AMEDIAMETRICS_PROP_TOTALINPUTBYTES "totalInputBytes" // int32 (MIDI)
#define AMEDIAMETRICS_PROP_TOTALOUTPUTBYTES "totalOutputBytes" // int32 (MIDI)
#define AMEDIAMETRICS_PROP_THREADID       "threadId"       // int32 value io handle
@@ -243,6 +244,7 @@
// Values are strings accepted for a given property.

// An event is a general description, which often is a function name.
#define AMEDIAMETRICS_PROP_EVENT_VALUE_APPLYVOLUMESHAPER "applyVolumeShaper"
#define AMEDIAMETRICS_PROP_EVENT_VALUE_BEGINAUDIOINTERVALGROUP "beginAudioIntervalGroup"
#define AMEDIAMETRICS_PROP_EVENT_VALUE_CLOSE      "close"
#define AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE     "create"