From aabb81ecb58208e7c9151bea6ebc19f6060e7515 Mon Sep 17 00:00:00 2001 From: Lakshman Annadorai Date: Tue, 31 Jan 2023 17:01:27 -0800 Subject: [PATCH 1/4] Update CpuInfoReader to compute normalized available CPU frequency. - Guard against reading CpuInfos too frequently. - Implement dump logic in CpuInfoReader. - Guard against zero time value in the time_in_state file. Test: atest CpuInfoReaderTest Bug: 242722241 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:67bc88121775785907a3aebd87db7c4bdef5fff9) Merged-In: I9fc109c43fe0bd5f1d16135ad3167325ae502e15 Change-Id: I9fc109c43fe0bd5f1d16135ad3167325ae502e15 --- .../com/android/server/cpu/CpuInfoReader.java | 159 ++++++++++++++++-- .../android/server/cpu/CpuInfoReaderTest.java | 79 +++++---- 2 files changed, 190 insertions(+), 48 deletions(-) diff --git a/services/core/java/com/android/server/cpu/CpuInfoReader.java b/services/core/java/com/android/server/cpu/CpuInfoReader.java index ca97a9847b39b..ce68edbb9fa1f 100644 --- a/services/core/java/com/android/server/cpu/CpuInfoReader.java +++ b/services/core/java/com/android/server/cpu/CpuInfoReader.java @@ -21,8 +21,10 @@ import static com.android.server.cpu.CpuMonitorService.TAG; import android.annotation.IntDef; import android.annotation.Nullable; +import android.os.SystemClock; import android.system.Os; import android.system.OsConstants; +import android.util.IndentingPrintWriter; import android.util.IntArray; import android.util.LongSparseLongArray; import android.util.SparseArray; @@ -50,6 +52,9 @@ public final class CpuInfoReader { private static final String POLICY_DIR_PREFIX = "policy"; private static final String RELATED_CPUS_FILE = "related_cpus"; private static final String AFFECTED_CPUS_FILE = "affected_cpus"; + // TODO(b/263154344): Avoid reading from cpuinfo_cur_freq because non-root users don't have + // read permission for this file. The file permissions are set by the Kernel. Instead, read + // the current frequency only from scaling_cur_freq. private static final String CUR_CPUFREQ_FILE = "cpuinfo_cur_freq"; private static final String MAX_CPUFREQ_FILE = "cpuinfo_max_freq"; private static final String CUR_SCALING_FREQ_FILE = "scaling_cur_freq"; @@ -70,16 +75,18 @@ public final class CpuInfoReader { private static final Pattern TIME_IN_STATE_PATTERN = Pattern.compile("(?[0-9]+)\\s(?