Loading services/core/java/com/android/server/audio/AudioSystemAdapter.java +40 −22 Original line number Diff line number Diff line Loading @@ -37,8 +37,12 @@ import android.util.Pair; import com.android.internal.annotations.GuardedBy; import java.io.PrintWriter; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; Loading Loading @@ -68,11 +72,14 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, private String[] mMethodNames = {"getDevicesForAttributes"}; private static final boolean USE_CACHE_FOR_GETDEVICES = true; private static final Object sDeviceCacheLock = new Object(); private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> mLastDevicesForAttr = new ConcurrentHashMap<>(); @GuardedBy("sDeviceCacheLock") private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> mDevicesForAttrCache; private final Object mDeviceCacheLock = new Object(); @GuardedBy("sDeviceCacheLock") private long mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis(); private int[] mMethodCacheHit; /** * Map that stores all attributes + forVolume pairs that are registered for Loading Loading @@ -249,10 +256,12 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, AudioSystem.setRoutingCallback(sSingletonDefaultAdapter); AudioSystem.setVolumeRangeInitRequestCallback(sSingletonDefaultAdapter); if (USE_CACHE_FOR_GETDEVICES) { synchronized (sDeviceCacheLock) { sSingletonDefaultAdapter.mDevicesForAttrCache = new ConcurrentHashMap<>(AudioSystem.getNumStreamTypes()); sSingletonDefaultAdapter.mMethodCacheHit = new int[NB_MEASUREMENTS]; } } if (ENABLE_GETDEVICES_STATS) { sSingletonDefaultAdapter.mMethodCallCounter = new int[NB_MEASUREMENTS]; sSingletonDefaultAdapter.mMethodTimeNs = new long[NB_MEASUREMENTS]; Loading @@ -265,8 +274,9 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, if (DEBUG_CACHE) { Log.d(TAG, "---- clearing cache ----------"); } synchronized (mDeviceCacheLock) { synchronized (sDeviceCacheLock) { if (mDevicesForAttrCache != null) { mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis(); // Save latest cache to determine routing updates mLastDevicesForAttr.putAll(mDevicesForAttrCache); Loading Loading @@ -298,7 +308,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, if (USE_CACHE_FOR_GETDEVICES) { ArrayList<AudioDeviceAttributes> res; final Pair<AudioAttributes, Boolean> key = new Pair(attributes, forVolume); synchronized (mDeviceCacheLock) { synchronized (sDeviceCacheLock) { res = mDevicesForAttrCache.get(key); if (res == null) { res = AudioSystem.getDevicesForAttributes(attributes, forVolume); Loading Loading @@ -656,6 +666,13 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, */ public void dump(PrintWriter pw) { 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:"); if (mDevicesForAttrCache != null) { for (Map.Entry<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> Loading @@ -676,6 +693,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, } } } } if (!ENABLE_GETDEVICES_STATS) { // only stats in the rest of this dump Loading Loading
services/core/java/com/android/server/audio/AudioSystemAdapter.java +40 −22 Original line number Diff line number Diff line Loading @@ -37,8 +37,12 @@ import android.util.Pair; import com.android.internal.annotations.GuardedBy; import java.io.PrintWriter; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; Loading Loading @@ -68,11 +72,14 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, private String[] mMethodNames = {"getDevicesForAttributes"}; private static final boolean USE_CACHE_FOR_GETDEVICES = true; private static final Object sDeviceCacheLock = new Object(); private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> mLastDevicesForAttr = new ConcurrentHashMap<>(); @GuardedBy("sDeviceCacheLock") private ConcurrentHashMap<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> mDevicesForAttrCache; private final Object mDeviceCacheLock = new Object(); @GuardedBy("sDeviceCacheLock") private long mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis(); private int[] mMethodCacheHit; /** * Map that stores all attributes + forVolume pairs that are registered for Loading Loading @@ -249,10 +256,12 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, AudioSystem.setRoutingCallback(sSingletonDefaultAdapter); AudioSystem.setVolumeRangeInitRequestCallback(sSingletonDefaultAdapter); if (USE_CACHE_FOR_GETDEVICES) { synchronized (sDeviceCacheLock) { sSingletonDefaultAdapter.mDevicesForAttrCache = new ConcurrentHashMap<>(AudioSystem.getNumStreamTypes()); sSingletonDefaultAdapter.mMethodCacheHit = new int[NB_MEASUREMENTS]; } } if (ENABLE_GETDEVICES_STATS) { sSingletonDefaultAdapter.mMethodCallCounter = new int[NB_MEASUREMENTS]; sSingletonDefaultAdapter.mMethodTimeNs = new long[NB_MEASUREMENTS]; Loading @@ -265,8 +274,9 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, if (DEBUG_CACHE) { Log.d(TAG, "---- clearing cache ----------"); } synchronized (mDeviceCacheLock) { synchronized (sDeviceCacheLock) { if (mDevicesForAttrCache != null) { mDevicesForAttributesCacheClearTimeMs = System.currentTimeMillis(); // Save latest cache to determine routing updates mLastDevicesForAttr.putAll(mDevicesForAttrCache); Loading Loading @@ -298,7 +308,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, if (USE_CACHE_FOR_GETDEVICES) { ArrayList<AudioDeviceAttributes> res; final Pair<AudioAttributes, Boolean> key = new Pair(attributes, forVolume); synchronized (mDeviceCacheLock) { synchronized (sDeviceCacheLock) { res = mDevicesForAttrCache.get(key); if (res == null) { res = AudioSystem.getDevicesForAttributes(attributes, forVolume); Loading Loading @@ -656,6 +666,13 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, */ public void dump(PrintWriter pw) { 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:"); if (mDevicesForAttrCache != null) { for (Map.Entry<Pair<AudioAttributes, Boolean>, ArrayList<AudioDeviceAttributes>> Loading @@ -676,6 +693,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, } } } } if (!ENABLE_GETDEVICES_STATS) { // only stats in the rest of this dump Loading