summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorMisha Wagner <mishaw@google.com>2019-02-13 10:31:15 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-02-13 10:31:15 +0000
commitdc5beb50c828bd3af2033a733ad64586596331c3 (patch)
tree430201af0118d03e37ad3dc055079558afeb9c13 /core/java
parent090779c8a7549d37eec1625ae847054eb5a31210 (diff)
parent648d20359ffc42ce50ebf6f772451fb7a8d5ab39 (diff)
Merge "Add KernelCpuThreadReader minimium CPU usage threshold"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/provider/Settings.java1
-rw-r--r--core/java/com/android/internal/os/KernelCpuThreadReader.java33
-rw-r--r--core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java13
3 files changed, 45 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 2b638f6e283f..d75c5e28e3f6 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -14368,6 +14368,7 @@ public final class Settings {
* <pre>
* num_buckets (int)
* collected_uids (string)
+ * minimum_total_cpu_usage_millis (int)
* </pre>
*
* @hide
diff --git a/core/java/com/android/internal/os/KernelCpuThreadReader.java b/core/java/com/android/internal/os/KernelCpuThreadReader.java
index b1328e862273..6bbfc2b1277a 100644
--- a/core/java/com/android/internal/os/KernelCpuThreadReader.java
+++ b/core/java/com/android/internal/os/KernelCpuThreadReader.java
@@ -109,6 +109,12 @@ public class KernelCpuThreadReader {
private Predicate<Integer> mUidPredicate;
/**
+ * If a thread has strictly less than {@code minimumTotalCpuUsageMillis} total CPU usage, it
+ * will not be reported
+ */
+ private int mMinimumTotalCpuUsageMillis;
+
+ /**
* Where the proc filesystem is mounted
*/
private final Path mProcPath;
@@ -142,10 +148,12 @@ public class KernelCpuThreadReader {
public KernelCpuThreadReader(
int numBuckets,
Predicate<Integer> uidPredicate,
+ int minimumTotalCpuUsageMillis,
Path procPath,
Path initialTimeInStatePath,
Injector injector) throws IOException {
mUidPredicate = uidPredicate;
+ mMinimumTotalCpuUsageMillis = minimumTotalCpuUsageMillis;
mProcPath = procPath;
mProcTimeInStateReader = new ProcTimeInStateReader(initialTimeInStatePath);
mInjector = injector;
@@ -158,11 +166,13 @@ public class KernelCpuThreadReader {
* @return the reader, null if an exception was thrown during creation
*/
@Nullable
- public static KernelCpuThreadReader create(int numBuckets, Predicate<Integer> uidPredicate) {
+ public static KernelCpuThreadReader create(
+ int numBuckets, Predicate<Integer> uidPredicate, int minimumTotalCpuUsageMillis) {
try {
return new KernelCpuThreadReader(
numBuckets,
uidPredicate,
+ minimumTotalCpuUsageMillis,
DEFAULT_PROC_PATH,
DEFAULT_INITIAL_TIME_IN_STATE_PATH,
new Injector());
@@ -308,6 +318,18 @@ public class KernelCpuThreadReader {
}
/**
+ * If a thread has strictly less than {@code minimumTotalCpuUsageMillis} total CPU usage, it
+ * will not be reported
+ */
+ void setMinimumTotalCpuUsageMillis(int minimumTotalCpuUsageMillis) {
+ if (minimumTotalCpuUsageMillis < 0) {
+ Slog.w(TAG, "Negative minimumTotalCpuUsageMillis: " + minimumTotalCpuUsageMillis);
+ return;
+ }
+ mMinimumTotalCpuUsageMillis = minimumTotalCpuUsageMillis;
+ }
+
+ /**
* Get the CPU frequencies that correspond to the times reported in
* {@link ThreadCpuUsage#usageTimesMillis}
*/
@@ -346,6 +368,15 @@ public class KernelCpuThreadReader {
}
int[] cpuUsages = mFrequencyBucketCreator.getBucketedValues(cpuUsagesLong);
+ // Check if the total CPU usage below the threshold
+ int totalCpuUsage = 0;
+ for (int i = 0; i < cpuUsages.length; i++) {
+ totalCpuUsage += cpuUsages[i];
+ }
+ if (totalCpuUsage < mMinimumTotalCpuUsageMillis) {
+ return null;
+ }
+
return new ThreadCpuUsage(threadId, threadName, cpuUsages);
}
diff --git a/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java b/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java
index 77f6a17acdc9..718bcb43bd9a 100644
--- a/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java
+++ b/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java
@@ -59,6 +59,13 @@ public class KernelCpuThreadReaderSettingsObserver extends ContentObserver {
private static final String COLLECTED_UIDS_SETTINGS_KEY = "collected_uids";
private static final String COLLECTED_UIDS_DEFAULT = "1000-1000";
+ /**
+ * Minimum total CPU usage to report
+ */
+ private static final String MINIMUM_TOTAL_CPU_USAGE_MILLIS_SETTINGS_KEY =
+ "minimum_total_cpu_usage_millis";
+ private static final int MINIMUM_TOTAL_CPU_USAGE_MILLIS_DEFAULT = 0;
+
private final Context mContext;
@Nullable
@@ -87,7 +94,8 @@ public class KernelCpuThreadReaderSettingsObserver extends ContentObserver {
mContext = context;
mKernelCpuThreadReader = KernelCpuThreadReader.create(
NUM_BUCKETS_DEFAULT,
- UidPredicate.fromString(COLLECTED_UIDS_DEFAULT));
+ UidPredicate.fromString(COLLECTED_UIDS_DEFAULT),
+ MINIMUM_TOTAL_CPU_USAGE_MILLIS_DEFAULT);
}
@Override
@@ -124,6 +132,9 @@ public class KernelCpuThreadReaderSettingsObserver extends ContentObserver {
mKernelCpuThreadReader.setNumBuckets(
parser.getInt(NUM_BUCKETS_SETTINGS_KEY, NUM_BUCKETS_DEFAULT));
mKernelCpuThreadReader.setUidPredicate(uidPredicate);
+ mKernelCpuThreadReader.setMinimumTotalCpuUsageMillis(parser.getInt(
+ MINIMUM_TOTAL_CPU_USAGE_MILLIS_SETTINGS_KEY,
+ MINIMUM_TOTAL_CPU_USAGE_MILLIS_DEFAULT));
}
/**