Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6a55488 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "AudioService: log routing cache clear time, cache sync"

parents 12788aac 58c310ed
Loading
Loading
Loading
Loading
+40 −22
Original line number Diff line number Diff line
@@ -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;

@@ -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
@@ -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];
@@ -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);

@@ -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);
@@ -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>>
@@ -676,6 +693,7 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback,
                    }
                }
            }
        }

        if (!ENABLE_GETDEVICES_STATS) {
            // only stats in the rest of this dump