Loading services/core/java/com/android/server/audio/AudioService.java +48 −2 Original line number Diff line number Diff line Loading @@ -256,6 +256,7 @@ import com.android.internal.os.BackgroundThread; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; import com.android.internal.util.Preconditions; import com.android.modules.expresslog.Counter; import com.android.server.EventLogTags; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; Loading Loading @@ -838,9 +839,49 @@ public class AudioService extends IAudioService.Stub new AudioServiceUserRestrictionsListener(); private final IAudioManagerNative mNativeShim = new IAudioManagerNative.Stub() { static final String METRIC_COUNTERS_PLAYBACK_PARTIAL = "media_audio.value_audio_playback_hardening_partial_restriction"; static final String METRIC_COUNTERS_PLAYBACK_STRICT = "media_audio.value_audio_playback_hardening_strict_would_restrict"; String getPackNameForUid(int uid) { final long token = Binder.clearCallingIdentity(); try { final String[] names = AudioService.this.mContext. getPackageManager().getPackagesForUid(uid); if (names == null || names.length == 0 || TextUtils.isEmpty(names[0])) { return "[" + uid + "]"; } return names[0]; } finally { Binder.restoreCallingIdentity(token); } } // oneway @Override public void playbackHardeningEvent(int uid, byte type, boolean bypassed) { if (Binder.getCallingUid() != Process.AUDIOSERVER_UID) { return; } if (type == HardeningType.PARTIAL) { Counter.logIncrementWithUid(METRIC_COUNTERS_PLAYBACK_PARTIAL, uid); } else if (type == HardeningType.FULL) { Counter.logIncrementWithUid(METRIC_COUNTERS_PLAYBACK_STRICT, uid); } else { Slog.wtf(TAG, "Unexpected hardening type" + type); return; } String msg = "AudioHardening background playback " + (bypassed ? "would be " : "") + "muted for " + getPackNameForUid(uid) + " (" + uid + "), " + "level: " + (type == HardeningType.PARTIAL ? "partial" : "full"); AudioService.this.mHardeningLogger.enqueueAndSlog(msg, bypassed ? EventLogger.Event.ALOGI : EventLogger.Event.ALOGW, TAG); } @Override Loading Loading @@ -1544,7 +1585,8 @@ public class AudioService extends IAudioService.Stub mMusicFxHelper = new MusicFxHelper(mContext, mAudioHandler); mHardeningEnforcer = new HardeningEnforcer(mContext, isPlatformAutomotive(), mAppOps, context.getPackageManager()); context.getPackageManager(), mHardeningLogger); } private void initVolumeStreamStates() { Loading Loading @@ -12691,6 +12733,7 @@ public class AudioService extends IAudioService.Stub static final int LOG_NB_EVENTS_DYN_POLICY = 10; static final int LOG_NB_EVENTS_SPATIAL = 30; static final int LOG_NB_EVENTS_SOUND_DOSE = 50; static final int LOG_NB_EVENTS_HARDENING = 50; static final int LOG_NB_EVENTS_LOUDNESS_CODEC = 30; Loading Loading @@ -12729,6 +12772,9 @@ public class AudioService extends IAudioService.Stub mDynPolicyLogger = new EventLogger(LOG_NB_EVENTS_DYN_POLICY, "dynamic policy events (logged when command received by AudioService)"); private final EventLogger mHardeningLogger = new EventLogger( LOG_NB_EVENTS_HARDENING, "Hardening enforcement"); private static final String[] RINGER_MODE_NAMES = new String[] { "SILENT", "VIBRATE", Loading Loading @@ -12803,7 +12849,7 @@ public class AudioService extends IAudioService.Stub pw.println("\nMessage handler is null"); } dumpFlags(pw); mHardeningEnforcer.dump(pw); mHardeningLogger.dump(pw); mMediaFocusControl.dump(pw); dumpStreamStates(pw); dumpVolumeGroups(pw); services/core/java/com/android/server/audio/HardeningEnforcer.java +3 −8 Original line number Diff line number Diff line Loading @@ -54,8 +54,7 @@ public class HardeningEnforcer { final ActivityManager mActivityManager; final PackageManager mPackageManager; final EventLogger mEventLogger = new EventLogger(LOG_NB_EVENTS, "Hardening enforcement"); final EventLogger mEventLogger; // capacity = 4 for each of the focus request types static final SparseArray<String> METRIC_COUNTERS_FOCUS_DENIAL = new SparseArray<>(4); Loading Loading @@ -108,17 +107,13 @@ public class HardeningEnforcer { public static final int METHOD_AUDIO_MANAGER_REQUEST_AUDIO_FOCUS = 300; public HardeningEnforcer(Context ctxt, boolean isAutomotive, AppOpsManager appOps, PackageManager pm) { PackageManager pm, EventLogger logger) { mContext = ctxt; mIsAutomotive = isAutomotive; mAppOps = appOps; mActivityManager = ctxt.getSystemService(ActivityManager.class); mPackageManager = pm; } protected void dump(PrintWriter pw) { // log mEventLogger.dump(pw); mEventLogger = logger; } /** Loading services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +0 −1 Original line number Diff line number Diff line Loading @@ -1745,7 +1745,6 @@ public final class PlaybackActivityMonitor eventValues[0] = eventValue; sEventLogger.enqueue( new PlayerEvent(piid, PLAYER_UPDATE_MUTED, eventValues)); final AudioPlaybackConfiguration apc = mPlayers.get(piid); if (apc == null || !apc.handleMutedEvent(eventValue)) { break; // do not dispatch Loading Loading
services/core/java/com/android/server/audio/AudioService.java +48 −2 Original line number Diff line number Diff line Loading @@ -256,6 +256,7 @@ import com.android.internal.os.BackgroundThread; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; import com.android.internal.util.Preconditions; import com.android.modules.expresslog.Counter; import com.android.server.EventLogTags; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; Loading Loading @@ -838,9 +839,49 @@ public class AudioService extends IAudioService.Stub new AudioServiceUserRestrictionsListener(); private final IAudioManagerNative mNativeShim = new IAudioManagerNative.Stub() { static final String METRIC_COUNTERS_PLAYBACK_PARTIAL = "media_audio.value_audio_playback_hardening_partial_restriction"; static final String METRIC_COUNTERS_PLAYBACK_STRICT = "media_audio.value_audio_playback_hardening_strict_would_restrict"; String getPackNameForUid(int uid) { final long token = Binder.clearCallingIdentity(); try { final String[] names = AudioService.this.mContext. getPackageManager().getPackagesForUid(uid); if (names == null || names.length == 0 || TextUtils.isEmpty(names[0])) { return "[" + uid + "]"; } return names[0]; } finally { Binder.restoreCallingIdentity(token); } } // oneway @Override public void playbackHardeningEvent(int uid, byte type, boolean bypassed) { if (Binder.getCallingUid() != Process.AUDIOSERVER_UID) { return; } if (type == HardeningType.PARTIAL) { Counter.logIncrementWithUid(METRIC_COUNTERS_PLAYBACK_PARTIAL, uid); } else if (type == HardeningType.FULL) { Counter.logIncrementWithUid(METRIC_COUNTERS_PLAYBACK_STRICT, uid); } else { Slog.wtf(TAG, "Unexpected hardening type" + type); return; } String msg = "AudioHardening background playback " + (bypassed ? "would be " : "") + "muted for " + getPackNameForUid(uid) + " (" + uid + "), " + "level: " + (type == HardeningType.PARTIAL ? "partial" : "full"); AudioService.this.mHardeningLogger.enqueueAndSlog(msg, bypassed ? EventLogger.Event.ALOGI : EventLogger.Event.ALOGW, TAG); } @Override Loading Loading @@ -1544,7 +1585,8 @@ public class AudioService extends IAudioService.Stub mMusicFxHelper = new MusicFxHelper(mContext, mAudioHandler); mHardeningEnforcer = new HardeningEnforcer(mContext, isPlatformAutomotive(), mAppOps, context.getPackageManager()); context.getPackageManager(), mHardeningLogger); } private void initVolumeStreamStates() { Loading Loading @@ -12691,6 +12733,7 @@ public class AudioService extends IAudioService.Stub static final int LOG_NB_EVENTS_DYN_POLICY = 10; static final int LOG_NB_EVENTS_SPATIAL = 30; static final int LOG_NB_EVENTS_SOUND_DOSE = 50; static final int LOG_NB_EVENTS_HARDENING = 50; static final int LOG_NB_EVENTS_LOUDNESS_CODEC = 30; Loading Loading @@ -12729,6 +12772,9 @@ public class AudioService extends IAudioService.Stub mDynPolicyLogger = new EventLogger(LOG_NB_EVENTS_DYN_POLICY, "dynamic policy events (logged when command received by AudioService)"); private final EventLogger mHardeningLogger = new EventLogger( LOG_NB_EVENTS_HARDENING, "Hardening enforcement"); private static final String[] RINGER_MODE_NAMES = new String[] { "SILENT", "VIBRATE", Loading Loading @@ -12803,7 +12849,7 @@ public class AudioService extends IAudioService.Stub pw.println("\nMessage handler is null"); } dumpFlags(pw); mHardeningEnforcer.dump(pw); mHardeningLogger.dump(pw); mMediaFocusControl.dump(pw); dumpStreamStates(pw); dumpVolumeGroups(pw);
services/core/java/com/android/server/audio/HardeningEnforcer.java +3 −8 Original line number Diff line number Diff line Loading @@ -54,8 +54,7 @@ public class HardeningEnforcer { final ActivityManager mActivityManager; final PackageManager mPackageManager; final EventLogger mEventLogger = new EventLogger(LOG_NB_EVENTS, "Hardening enforcement"); final EventLogger mEventLogger; // capacity = 4 for each of the focus request types static final SparseArray<String> METRIC_COUNTERS_FOCUS_DENIAL = new SparseArray<>(4); Loading Loading @@ -108,17 +107,13 @@ public class HardeningEnforcer { public static final int METHOD_AUDIO_MANAGER_REQUEST_AUDIO_FOCUS = 300; public HardeningEnforcer(Context ctxt, boolean isAutomotive, AppOpsManager appOps, PackageManager pm) { PackageManager pm, EventLogger logger) { mContext = ctxt; mIsAutomotive = isAutomotive; mAppOps = appOps; mActivityManager = ctxt.getSystemService(ActivityManager.class); mPackageManager = pm; } protected void dump(PrintWriter pw) { // log mEventLogger.dump(pw); mEventLogger = logger; } /** Loading
services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +0 −1 Original line number Diff line number Diff line Loading @@ -1745,7 +1745,6 @@ public final class PlaybackActivityMonitor eventValues[0] = eventValue; sEventLogger.enqueue( new PlayerEvent(piid, PLAYER_UPDATE_MUTED, eventValues)); final AudioPlaybackConfiguration apc = mPlayers.get(piid); if (apc == null || !apc.handleMutedEvent(eventValue)) { break; // do not dispatch Loading