diff options
| author | Misha Wagner <mishaw@google.com> | 2019-02-13 10:31:15 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-02-13 10:31:15 +0000 |
| commit | dc5beb50c828bd3af2033a733ad64586596331c3 (patch) | |
| tree | 430201af0118d03e37ad3dc055079558afeb9c13 /core/java | |
| parent | 090779c8a7549d37eec1625ae847054eb5a31210 (diff) | |
| parent | 648d20359ffc42ce50ebf6f772451fb7a8d5ab39 (diff) | |
Merge "Add KernelCpuThreadReader minimium CPU usage threshold"
Diffstat (limited to 'core/java')
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)); } /** |
