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

Commit 2c799a10 authored by Raj Goparaju's avatar Raj Goparaju
Browse files

Update fade event logging to clarify the event type

Unifying fade event logging has the unwanted impact of
stripping out the exact event type information. This
makes reading of logged events harder and may require
additional parsing.

Revert back to using dedicated events for fade out and
fade in. Update them to also log volume shaper information.

Bug: 307354764
Bug: 316634896
Test: atest -c FadeOutManager FadeConfigurations
Change-Id: I53c129395197f1574c2206ffafdd48748d72a0d5
parent a02a495c
Loading
Loading
Loading
Loading
+32 −9
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Slog;
import android.util.SparseArray;

import com.android.internal.annotations.GuardedBy;
import com.android.server.utils.EventLogger;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -345,7 +346,8 @@ public final class FadeOutManager {
            }
            if (apc.getPlayerProxy() != null) {
                applyVolumeShaperInternal(apc, piid, volShaper,
                        skipRamp ? PLAY_SKIP_RAMP : PLAY_CREATE_IF_NEEDED);
                        skipRamp ? PLAY_SKIP_RAMP : PLAY_CREATE_IF_NEEDED, skipRamp,
                        PlaybackActivityMonitor.EVENT_TYPE_FADE_OUT);
                mFadedPlayers.put(piid, volShaper);
            } else {
                if (DEBUG) {
@@ -361,7 +363,8 @@ public final class FadeOutManager {
                final AudioPlaybackConfiguration apc = players.get(piid);
                if ((apc != null) && (apc.getPlayerProxy() != null)) {
                    applyVolumeShaperInternal(apc, piid, /* volShaperConfig= */ null,
                            VolumeShaper.Operation.REVERSE);
                            VolumeShaper.Operation.REVERSE, /* skipRamp= */ false,
                            PlaybackActivityMonitor.EVENT_TYPE_FADE_IN);
                } else {
                    // this piid was in the list of faded players, but wasn't found
                    if (DEBUG) {
@@ -395,7 +398,8 @@ public final class FadeOutManager {
            }
            mFadedPlayers.remove(piid);
            if (apc.getPlayerProxy() != null) {
                applyVolumeShaperInternal(apc, piid, config, operation);
                applyVolumeShaperInternal(apc, piid, config, operation, /* skipRamp= */ false,
                        PlaybackActivityMonitor.EVENT_TYPE_FADE_IN);
            } else {
                if (DEBUG) {
                    Slog.v(TAG, "Error fading in player piid:" + piid
@@ -421,21 +425,40 @@ public final class FadeOutManager {
        }

        private void applyVolumeShaperInternal(AudioPlaybackConfiguration apc, int piid,
                VolumeShaper.Configuration volShaperConfig, VolumeShaper.Operation operation) {
                VolumeShaper.Configuration volShaperConfig, VolumeShaper.Operation operation,
                boolean skipRamp, String eventType) {
            VolumeShaper.Configuration config = volShaperConfig;
            // when operation is reverse, use the fade out volume shaper config instead
            if (operation.equals(VolumeShaper.Operation.REVERSE)) {
                config = mFadedPlayers.get(piid);
            }
            try {
                PlaybackActivityMonitor.sEventLogger.enqueue(
                        (new PlaybackActivityMonitor.FadeEvent(apc, config, operation))
                                .printLog(TAG));
                logFadeEvent(apc, piid, volShaperConfig, operation, skipRamp, eventType);
                apc.getPlayerProxy().applyVolumeShaper(config, operation);
            } catch (Exception e) {
                Slog.e(TAG, "Error fading player piid:" + piid + " uid:" + mUid
                        + " operation:" + operation, e);
                Slog.e(TAG, "Error " + eventType + " piid:" + piid + " uid:" + mUid, e);
            }
        }

        private void logFadeEvent(AudioPlaybackConfiguration apc, int piid,
                VolumeShaper.Configuration config, VolumeShaper.Operation operation,
                boolean skipRamp, String eventType) {
            if (eventType.equals(PlaybackActivityMonitor.EVENT_TYPE_FADE_OUT)) {
                PlaybackActivityMonitor.sEventLogger.enqueue(
                        (new PlaybackActivityMonitor.FadeOutEvent(apc, skipRamp, config, operation))
                                .printLog(TAG));
                return;
            }

            if (eventType.equals(PlaybackActivityMonitor.EVENT_TYPE_FADE_IN)) {
                PlaybackActivityMonitor.sEventLogger.enqueue(
                        (new PlaybackActivityMonitor.FadeInEvent(apc, skipRamp, config, operation))
                                .printLog(TAG));
                return;
            }

            PlaybackActivityMonitor.sEventLogger.enqueue(
                    (new EventLogger.StringEvent(eventType + " piid:" + piid)).printLog(TAG));
        }
    }
}
+45 −44
Original line number Diff line number Diff line
@@ -84,6 +84,8 @@ public final class PlaybackActivityMonitor
    /*package*/ static final int VOLUME_SHAPER_SYSTEM_FADEOUT_ID = 2;
    /*package*/ static final int VOLUME_SHAPER_SYSTEM_MUTE_AWAIT_CONNECTION_ID = 3;
    /*package*/ static final int VOLUME_SHAPER_SYSTEM_STRONG_DUCK_ID = 4;
    /*package*/ static final String EVENT_TYPE_FADE_OUT = "fading out";
    /*package*/ static final String EVENT_TYPE_FADE_IN = "fading in";

    // ducking settings for a "normal duck" at -14dB
    private static final VolumeShaper.Configuration DUCK_VSHAPE =
@@ -1204,11 +1206,13 @@ public final class PlaybackActivityMonitor
                    return;
                }
                try {
                    sEventLogger.enqueue((new DuckEvent(apc, skipRamp, mUseStrongDuck))
                            .printLog(TAG));
                    apc.getPlayerProxy().applyVolumeShaper(
                            mUseStrongDuck ? STRONG_DUCK_VSHAPE : DUCK_VSHAPE,
                            skipRamp ? PLAY_SKIP_RAMP : PLAY_CREATE_IF_NEEDED);
                    VolumeShaper.Configuration config =
                            mUseStrongDuck ? STRONG_DUCK_VSHAPE : DUCK_VSHAPE;
                    VolumeShaper.Operation operation =
                            skipRamp ? PLAY_SKIP_RAMP : PLAY_CREATE_IF_NEEDED;
                    sEventLogger.enqueue((new DuckEvent(apc, skipRamp, mUseStrongDuck, config,
                            operation)).printLog(TAG));
                    apc.getPlayerProxy().applyVolumeShaper(config, operation);
                    mDuckedPlayers.add(piid);
                } catch (Exception e) {
                    Log.e(TAG, "Error ducking player piid:" + piid + " uid:" + mUid, e);
@@ -1363,58 +1367,41 @@ public final class PlaybackActivityMonitor
        }
    }

    static final class FadeEvent extends EventLogger.Event {
    private abstract static class VolumeShaperEvent extends EventLogger.Event {
        private final int mPlayerIId;
        private final int mPlayerType;
        private final boolean mSkipRamp;
        private final int mClientUid;
        private final int mClientPid;
        private final int mPlayerType;
        private final AudioAttributes mPlayerAttr;
        private final VolumeShaper.Configuration mVShaper;
        private final VolumeShaper.Operation mVOperation;
        private final VolumeShaper.Configuration mConfig;
        private final VolumeShaper.Operation mOperation;

        FadeEvent(AudioPlaybackConfiguration apc, VolumeShaper.Configuration vShaper,
                VolumeShaper.Operation vOperation) {
        abstract String getVSAction();

        VolumeShaperEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp,
                VolumeShaper.Configuration config, VolumeShaper.Operation operation) {
            mPlayerIId = apc.getPlayerInterfaceId();
            mSkipRamp = skipRamp;
            mClientUid = apc.getClientUid();
            mClientPid = apc.getClientPid();
            mPlayerAttr = apc.getAudioAttributes();
            mPlayerType = apc.getPlayerType();
            mVShaper = vShaper;
            mVOperation = vOperation;
            mConfig = config;
            mOperation = operation;
        }

        @Override
        public String eventToString() {
            return "Fade Event:" + " player piid:" + mPlayerIId
            return getVSAction()
                    + " player piid:" + mPlayerIId
                    + " uid/pid:" + mClientUid + "/" + mClientPid
                    + " skip ramp:" + mSkipRamp
                    + " player type:"
                    + AudioPlaybackConfiguration.toLogFriendlyPlayerType(mPlayerType)
                    + " attr:" + mPlayerAttr
                    + " volume shaper:" + mVShaper
                    + " volume operation:" + mVOperation;
        }
    }

    private abstract static class VolumeShaperEvent extends EventLogger.Event {
        private final int mPlayerIId;
        private final boolean mSkipRamp;
        private final int mClientUid;
        private final int mClientPid;

        abstract String getVSAction();

        VolumeShaperEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp) {
            mPlayerIId = apc.getPlayerInterfaceId();
            mSkipRamp = skipRamp;
            mClientUid = apc.getClientUid();
            mClientPid = apc.getClientPid();
        }

        @Override
        public String eventToString() {
            return new StringBuilder(getVSAction()).append(" player piid:").append(mPlayerIId)
                    .append(" uid/pid:").append(mClientUid).append("/").append(mClientPid)
                    .append(" skip ramp:").append(mSkipRamp).toString();
                    + " config:" + mConfig
                    + " operation:" + mOperation;
        }
    }

@@ -1426,9 +1413,10 @@ public final class PlaybackActivityMonitor
            return mUseStrongDuck ? "ducking (strong)" : "ducking";
        }

        DuckEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp, boolean useStrongDuck)
        DuckEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp, boolean useStrongDuck,
                VolumeShaper.Configuration config, VolumeShaper.Operation operation)
        {
            super(apc, skipRamp);
            super(apc, skipRamp, config, operation);
            mUseStrongDuck = useStrongDuck;
        }
    }
@@ -1436,11 +1424,24 @@ public final class PlaybackActivityMonitor
    static final class FadeOutEvent extends VolumeShaperEvent {
        @Override
        String getVSAction() {
            return "fading out";
            return EVENT_TYPE_FADE_OUT;
        }

        FadeOutEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp,
                VolumeShaper.Configuration config, VolumeShaper.Operation operation) {
            super(apc, skipRamp, config, operation);
        }
    }

    static final class FadeInEvent extends VolumeShaperEvent {
        @Override
        String getVSAction() {
            return EVENT_TYPE_FADE_IN;
        }

        FadeOutEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp) {
            super(apc, skipRamp);
        FadeInEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp,
                VolumeShaper.Configuration config, VolumeShaper.Operation operation) {
            super(apc, skipRamp, config, operation);
        }
    }