Merge "AudioService: log routing cache clear time, cache sync" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8e013de073
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user