Merge "AudioService: log routing cache clear time, cache sync" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2023-01-30 21:30:27 +00:00
committed by Android (Google) Code Review

View File

@@ -29,8 +29,12 @@ import android.util.Pair;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -60,8 +64,12 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
private String[] mMethodNames = {"getDevicesForAttributes"}; private String[] mMethodNames = {"getDevicesForAttributes"};
private static final boolean USE_CACHE_FOR_GETDEVICES = true; private static final boolean USE_CACHE_FOR_GETDEVICES = true;
private static final Object sDeviceCacheLock = new Object();
@GuardedBy("sDeviceCacheLock")
private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>>
mDevicesForAttrCache; mDevicesForAttrCache;
@GuardedBy("sDeviceCacheLock")
private long mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis();
private int[] mMethodCacheHit; private int[] mMethodCacheHit;
private static final Object sRoutingListenerLock = new Object(); private static final Object sRoutingListenerLock = new Object();
@GuardedBy("sRoutingListenerLock") @GuardedBy("sRoutingListenerLock")
@@ -147,10 +155,12 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
AudioSystem.setRoutingCallback(sSingletonDefaultAdapter); AudioSystem.setRoutingCallback(sSingletonDefaultAdapter);
AudioSystem.setVolumeRangeInitRequestCallback(sSingletonDefaultAdapter); AudioSystem.setVolumeRangeInitRequestCallback(sSingletonDefaultAdapter);
if (USE_CACHE_FOR_GETDEVICES) { if (USE_CACHE_FOR_GETDEVICES) {
synchronized (sDeviceCacheLock) {
sSingletonDefaultAdapter.mDevicesForAttrCache = sSingletonDefaultAdapter.mDevicesForAttrCache =
new ConcurrentHashMap<>(AudioSystem.getNumStreamTypes()); new ConcurrentHashMap<>(AudioSystem.getNumStreamTypes());
sSingletonDefaultAdapter.mMethodCacheHit = new int[NB_MEASUREMENTS]; sSingletonDefaultAdapter.mMethodCacheHit = new int[NB_MEASUREMENTS];
} }
}
if (ENABLE_GETDEVICES_STATS) { if (ENABLE_GETDEVICES_STATS) {
sSingletonDefaultAdapter.mMethodCallCounter = new int[NB_MEASUREMENTS]; sSingletonDefaultAdapter.mMethodCallCounter = new int[NB_MEASUREMENTS];
sSingletonDefaultAdapter.mMethodTimeNs = new long[NB_MEASUREMENTS]; sSingletonDefaultAdapter.mMethodTimeNs = new long[NB_MEASUREMENTS];
@@ -163,8 +173,9 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
if (DEBUG_CACHE) { if (DEBUG_CACHE) {
Log.d(TAG, "---- clearing cache ----------"); Log.d(TAG, "---- clearing cache ----------");
} }
synchronized (sDeviceCacheLock) {
if (mDevicesForAttrCache != null) { if (mDevicesForAttrCache != null) {
synchronized (mDevicesForAttrCache) { mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis();
mDevicesForAttrCache.clear(); mDevicesForAttrCache.clear();
} }
} }
@@ -193,7 +204,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
if (USE_CACHE_FOR_GETDEVICES) { if (USE_CACHE_FOR_GETDEVICES) {
ArrayList<AudioDeviceAttributes> res; ArrayList<AudioDeviceAttributes> res;
final Pair<AudioAttributes, Boolean> key = new Pair(attributes, forVolume); final Pair<AudioAttributes, Boolean> key = new Pair(attributes, forVolume);
synchronized (mDevicesForAttrCache) { synchronized (sDeviceCacheLock) {
res = mDevicesForAttrCache.get(key); res = mDevicesForAttrCache.get(key);
if (res == null) { if (res == null) {
// result from AudioSystem guaranteed non-null, but could be invalid // result from AudioSystem guaranteed non-null, but could be invalid
@@ -508,6 +519,13 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
*/ */
public void dump(PrintWriter pw) { public void dump(PrintWriter pw) {
pw.println("\nAudioSystemAdapter:"); pw.println("\nAudioSystemAdapter:");
final DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("MM-dd HH:mm:ss:SSS")
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
synchronized (sDeviceCacheLock) {
pw.println(" last cache clear time: " + formatter.format(
Instant.ofEpochMilli(mDevicesForAttributesCacheClearTimeMs)));
pw.println(" mDevicesForAttrCache:"); pw.println(" mDevicesForAttrCache:");
if (mDevicesForAttrCache != null) { if (mDevicesForAttrCache != null) {
for (Map.Entry<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> for (Map.Entry<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>>
@@ -528,6 +546,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
} }
} }
} }
}
if (!ENABLE_GETDEVICES_STATS) { if (!ENABLE_GETDEVICES_STATS) {
// only stats in the rest of this dump // only stats in the rest of this dump