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

Commit cf0702af authored by Collin Fijalkovich's avatar Collin Fijalkovich Committed by Automerger Merge Worker
Browse files

Merge "Add performance counters to cacheinfo dumps." into rvc-dev am:...

Merge "Add performance counters to cacheinfo dumps." into rvc-dev am: 4edffac7 am: 23e5f201 am: 959b44ba

Change-Id: Ie19567b510ec47ecc4fdec0ec4412beadbbc2502
parents bc48b312 959b44ba
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -188,6 +188,17 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
    private static final boolean DEBUG = false;
    private static final boolean VERIFY = false;

    // Per-Cache performance counters. As some cache instances are declared static,
    @GuardedBy("mLock")
    private long mHits = 0;

    @GuardedBy("mLock")
    private long mMisses = 0;

    // Most invalidation is done in a static context, so the counters need to be accessible.
    @GuardedBy("sCorkLock")
    private static final HashMap<String, Long> sInvalidates = new HashMap<>();

    /**
     * If sEnabled is false then all cache operations are stubbed out.  Set
     * it to false inside test processes.
@@ -265,6 +276,7 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
            };
        synchronized (sCorkLock) {
            sCaches.put(this, null);
            sInvalidates.put(propertyName, (long) 0);
        }
    }

@@ -365,6 +377,8 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
            synchronized (mLock) {
                if (currentNonce == mLastSeenNonce) {
                    cachedResult = mCache.get(query);

                    if (cachedResult != null) mHits++;
                } else {
                    if (DEBUG) {
                        Log.d(TAG,
@@ -428,6 +442,7 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
                if (mLastSeenNonce == currentNonce && result != null) {
                    mCache.put(query, result);
                }
                mMisses++;
            }
            return maybeCheckConsistency(query, result);
        }
@@ -531,6 +546,8 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
                            newValueString));
        }
        SystemProperties.set(name, newValueString);
        long invalidateCount = sInvalidates.getOrDefault(name, (long) 0);
        sInvalidates.put(name, ++invalidateCount);
    }

    /**
@@ -758,8 +775,16 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
    }

    private void dumpContents(PrintWriter pw, String[] args) {
        long invalidateCount;

        synchronized (sCorkLock) {
            invalidateCount = sInvalidates.getOrDefault(mPropertyName, (long) 0);
        }

        synchronized (mLock) {
            pw.println(String.format("  Cache Property Name: %s", cacheName()));
            pw.println(String.format("    Hits: %d, Misses: %d, Invalidates: %d",
                    mHits, mMisses, invalidateCount));
            pw.println(String.format("    Last Observed Nonce: %d", mLastSeenNonce));
            pw.println(String.format("    Current Size: %d, Max Size: %d",
                    mCache.entrySet().size(), mMaxEntries));