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

Commit 3d5d9aef authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Add logging for unusually long read times

Tracking occasional lock contention in ActivityManagerService
that might be due to battery stats locking while reading proc files.

Bug: 63287747
Test: manual
Change-Id: Idfde8c960507930df4dc7e1337a89535d2ca932e
parent 5c5f1f64
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
package com.android.internal.os;

import android.os.StrictMode;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.LongSparseLongArray;
import android.util.Slog;
@@ -37,6 +38,8 @@ public class KernelMemoryBandwidthStats {
            return;
        }

        final long startTime = SystemClock.uptimeMillis();

        StrictMode.ThreadPolicy policy = StrictMode.allowThreadDiskReads();
        try (BufferedReader reader = new BufferedReader(new FileReader(mSysfsFile))) {
            parseStats(reader);
@@ -50,6 +53,11 @@ public class KernelMemoryBandwidthStats {
        } finally {
            StrictMode.setThreadPolicy(policy);
        }

        final long readTime = SystemClock.uptimeMillis() - startTime;
        if (DEBUG || readTime > 100) {
            Slog.w(TAG, "Reading memory bandwidth file took " + readTime + "ms");
        }
    }

    @VisibleForTesting
+7 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.internal.os;

import android.os.Process;
import android.os.SystemClock;
import android.util.Slog;

import com.android.internal.annotations.VisibleForTesting;
@@ -66,6 +67,7 @@ public class KernelWakelockReader {
        byte[] buffer = new byte[32*1024];
        int len;
        boolean wakeup_sources;
        final long startTime = SystemClock.uptimeMillis();

        try {
            FileInputStream is;
@@ -90,6 +92,11 @@ public class KernelWakelockReader {
            return null;
        }

        final long readTime = SystemClock.uptimeMillis() - startTime;
        if (readTime > 100) {
            Slog.w(TAG, "Reading wakelock stats took " + readTime + "ms");
        }

        if (len > 0) {
            if (len >= buffer.length) {
                Slog.wtf(TAG, "Kernel wake locks exceeded buffer size " + buffer.length);