Merge "AudioService: do not log sound effects in audio dumpsys"
This commit is contained in:
committed by
Android (Google) Code Review
commit
bdb3330e58
@@ -257,6 +257,9 @@ public class AudioService extends IAudioService.Stub
|
||||
/** Debug communication route */
|
||||
protected static final boolean DEBUG_COMM_RTE = false;
|
||||
|
||||
/** Debug log sound fx (touchsounds...) in dumpsys */
|
||||
protected static final boolean DEBUG_LOG_SOUND_FX = false;
|
||||
|
||||
/** How long to delay before persisting a change in volume/ringer mode. */
|
||||
private static final int PERSIST_DELAY = 500;
|
||||
|
||||
@@ -378,6 +381,7 @@ public class AudioService extends IAudioService.Stub
|
||||
private static final int MSG_ROTATION_UPDATE = 48;
|
||||
private static final int MSG_FOLD_UPDATE = 49;
|
||||
private static final int MSG_RESET_SPATIALIZER = 50;
|
||||
private static final int MSG_NO_LOG_FOR_PLAYER_I = 51;
|
||||
|
||||
// start of messages handled under wakelock
|
||||
// these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(),
|
||||
@@ -1016,7 +1020,7 @@ public class AudioService extends IAudioService.Stub
|
||||
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
||||
mAudioEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleAudioEvent");
|
||||
|
||||
mSfxHelper = new SoundEffectsHelper(mContext);
|
||||
mSfxHelper = new SoundEffectsHelper(mContext, playerBase -> ignorePlayerLogs(playerBase));
|
||||
|
||||
final boolean headTrackingDefault = mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_spatial_audio_head_tracking_enabled_default);
|
||||
@@ -1499,6 +1503,18 @@ public class AudioService extends IAudioService.Stub
|
||||
/*obj*/ foldParameter, /*delay*/ 0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// Communicate to PlayackActivityMonitor whether to log or not
|
||||
// the sound FX activity (useful for removing touch sounds in the activity logs)
|
||||
void ignorePlayerLogs(@NonNull PlayerBase playerToIgnore) {
|
||||
if (DEBUG_LOG_SOUND_FX) {
|
||||
return;
|
||||
}
|
||||
sendMsg(mAudioHandler, MSG_NO_LOG_FOR_PLAYER_I, SENDMSG_REPLACE,
|
||||
/*arg1, piid of the player*/ playerToIgnore.getPlayerIId(),
|
||||
/*arg2 ignored*/ 0, /*obj ignored*/ null, /*delay*/ 0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// monitoring requests for volume range initialization
|
||||
@Override // AudioSystemAdapter.OnVolRangeInitRequestListener
|
||||
@@ -8721,6 +8737,10 @@ public class AudioService extends IAudioService.Stub
|
||||
// fold parameter format: "device_folded=x" where x is one of on, off
|
||||
mAudioSystem.setParameters((String) msg.obj);
|
||||
break;
|
||||
|
||||
case MSG_NO_LOG_FOR_PLAYER_I:
|
||||
mPlaybackMonitor.ignorePlayerIId(msg.arg1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,18 @@ public final class PlaybackActivityMonitor
|
||||
return toBan;
|
||||
}
|
||||
|
||||
//=================================================================
|
||||
// Player to ignore (only handling single player, designed for ignoring
|
||||
// in the logs one specific player such as the touch sounds player)
|
||||
@GuardedBy("mPlayerLock")
|
||||
private ArrayList<Integer> mDoNotLogPiidList = new ArrayList<>();
|
||||
|
||||
/*package*/ void ignorePlayerIId(int doNotLogPiid) {
|
||||
synchronized (mPlayerLock) {
|
||||
mDoNotLogPiidList.add(doNotLogPiid);
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================
|
||||
// Track players and their states
|
||||
// methods playerAttributes, playerEvent, releasePlayer are all oneway calls
|
||||
@@ -315,14 +327,18 @@ public final class PlaybackActivityMonitor
|
||||
Log.v(TAG, TextUtils.formatSimple("playerEvent(piid=%d, event=%s, eventValue=%d)",
|
||||
piid, AudioPlaybackConfiguration.playerStateToString(event), eventValue));
|
||||
}
|
||||
|
||||
final boolean change;
|
||||
boolean change;
|
||||
synchronized(mPlayerLock) {
|
||||
final AudioPlaybackConfiguration apc = mPlayers.get(new Integer(piid));
|
||||
if (apc == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean doNotLog = mDoNotLogPiidList.contains(piid);
|
||||
if (doNotLog && event != AudioPlaybackConfiguration.PLAYER_STATE_RELEASED) {
|
||||
// do not log nor dispatch events for "ignored" players other than the release
|
||||
return;
|
||||
}
|
||||
sEventLogger.enqueue(new PlayerEvent(piid, event, eventValue));
|
||||
|
||||
if (event == AudioPlaybackConfiguration.PLAYER_UPDATE_PORT_ID) {
|
||||
@@ -339,7 +355,8 @@ public final class PlaybackActivityMonitor
|
||||
}
|
||||
}
|
||||
}
|
||||
if (apc.getPlayerType() == AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL) {
|
||||
if (apc.getPlayerType() == AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL
|
||||
&& event != AudioPlaybackConfiguration.PLAYER_STATE_RELEASED) {
|
||||
// FIXME SoundPool not ready for state reporting
|
||||
return;
|
||||
}
|
||||
@@ -351,9 +368,15 @@ public final class PlaybackActivityMonitor
|
||||
Log.e(TAG, "Error handling event " + event);
|
||||
change = false;
|
||||
}
|
||||
if (change && event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
|
||||
mDuckingManager.checkDuck(apc);
|
||||
mFadingManager.checkFade(apc);
|
||||
if (change) {
|
||||
if (event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
|
||||
mDuckingManager.checkDuck(apc);
|
||||
mFadingManager.checkFade(apc);
|
||||
}
|
||||
if (doNotLog) {
|
||||
// do not dispatch events for "ignored" players
|
||||
change = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (change) {
|
||||
@@ -436,6 +459,10 @@ public final class PlaybackActivityMonitor
|
||||
mEventHandler.sendMessage(
|
||||
mEventHandler.obtainMessage(MSG_L_CLEAR_PORTS_FOR_PIID, piid, /*arg2=*/0));
|
||||
|
||||
if (change && mDoNotLogPiidList.contains(piid)) {
|
||||
// do not dispatch a change for a "do not log" player
|
||||
change = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (change) {
|
||||
@@ -581,6 +608,9 @@ public final class PlaybackActivityMonitor
|
||||
for (Integer piidInt : piidIntList) {
|
||||
final AudioPlaybackConfiguration apc = mPlayers.get(piidInt);
|
||||
if (apc != null) {
|
||||
if (mDoNotLogPiidList.contains(apc.getPlayerInterfaceId())) {
|
||||
pw.print("(not logged)");
|
||||
}
|
||||
apc.dump(pw);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.media.AudioSystem;
|
||||
import android.media.MediaPlayer;
|
||||
import android.media.MediaPlayer.OnCompletionListener;
|
||||
import android.media.MediaPlayer.OnErrorListener;
|
||||
import android.media.PlayerBase;
|
||||
import android.media.SoundPool;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
@@ -47,6 +48,7 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* A helper class for managing sound effects loading / unloading
|
||||
@@ -109,11 +111,14 @@ class SoundEffectsHelper {
|
||||
private final int[] mEffects = new int[AudioManager.NUM_SOUND_EFFECTS]; // indexes in mResources
|
||||
private SoundPool mSoundPool;
|
||||
private SoundPoolLoader mSoundPoolLoader;
|
||||
/** callback to provide handle to the player of the sound effects */
|
||||
private final Consumer<PlayerBase> mPlayerAvailableCb;
|
||||
|
||||
SoundEffectsHelper(Context context) {
|
||||
SoundEffectsHelper(Context context, Consumer<PlayerBase> playerAvailableCb) {
|
||||
mContext = context;
|
||||
mSfxAttenuationDb = mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_soundEffectVolumeDb);
|
||||
mPlayerAvailableCb = playerAvailableCb;
|
||||
startWorker();
|
||||
}
|
||||
|
||||
@@ -189,6 +194,7 @@ class SoundEffectsHelper {
|
||||
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
||||
.build())
|
||||
.build();
|
||||
mPlayerAvailableCb.accept(mSoundPool);
|
||||
loadSoundAssets();
|
||||
|
||||
mSoundPoolLoader = new SoundPoolLoader();
|
||||
|
||||
Reference in New Issue
Block a user