Loading apct-tests/perftests/core/src/android/os/KernelCpuThreadReaderPerfTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ public class KernelCpuThreadReaderPerfTest { public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); private final KernelCpuThreadReader mKernelCpuThreadReader = KernelCpuThreadReader.create(8, uid -> 1000 <= uid && uid < 2000); KernelCpuThreadReader.create(8, uid -> 1000 <= uid && uid < 2000, 0); @Test public void timeReadCurrentProcessCpuUsage() { Loading core/java/android/provider/Settings.java +1 −0 Original line number Diff line number Diff line Loading @@ -14368,6 +14368,7 @@ public final class Settings { * <pre> * num_buckets (int) * collected_uids (string) * minimum_total_cpu_usage_millis (int) * </pre> * * @hide core/java/com/android/internal/os/KernelCpuThreadReader.java +32 −1 Original line number Diff line number Diff line Loading @@ -108,6 +108,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 */ Loading Loading @@ -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; Loading @@ -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()); Loading Loading @@ -307,6 +317,18 @@ public class KernelCpuThreadReader { mUidPredicate = uidPredicate; } /** * 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} Loading Loading @@ -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); } Loading core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java +12 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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)); } /** Loading core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderEndToEndTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ public class KernelCpuThreadReaderEndToEndTest { // Get thread data from KernelCpuThreadReader final KernelCpuThreadReader kernelCpuThreadReader = KernelCpuThreadReader.create(8, uid -> uid == Process.myUid()); KernelCpuThreadReader.create(8, uid -> uid == Process.myUid(), 0); assertNotNull(kernelCpuThreadReader); final ProcessCpuUsage currentProcessCpuUsage = kernelCpuThreadReader.getCurrentProcessCpuUsage(); Loading Loading
apct-tests/perftests/core/src/android/os/KernelCpuThreadReaderPerfTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ public class KernelCpuThreadReaderPerfTest { public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); private final KernelCpuThreadReader mKernelCpuThreadReader = KernelCpuThreadReader.create(8, uid -> 1000 <= uid && uid < 2000); KernelCpuThreadReader.create(8, uid -> 1000 <= uid && uid < 2000, 0); @Test public void timeReadCurrentProcessCpuUsage() { Loading
core/java/android/provider/Settings.java +1 −0 Original line number Diff line number Diff line Loading @@ -14368,6 +14368,7 @@ public final class Settings { * <pre> * num_buckets (int) * collected_uids (string) * minimum_total_cpu_usage_millis (int) * </pre> * * @hide
core/java/com/android/internal/os/KernelCpuThreadReader.java +32 −1 Original line number Diff line number Diff line Loading @@ -108,6 +108,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 */ Loading Loading @@ -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; Loading @@ -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()); Loading Loading @@ -307,6 +317,18 @@ public class KernelCpuThreadReader { mUidPredicate = uidPredicate; } /** * 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} Loading Loading @@ -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); } Loading
core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java +12 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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)); } /** Loading
core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderEndToEndTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ public class KernelCpuThreadReaderEndToEndTest { // Get thread data from KernelCpuThreadReader final KernelCpuThreadReader kernelCpuThreadReader = KernelCpuThreadReader.create(8, uid -> uid == Process.myUid()); KernelCpuThreadReader.create(8, uid -> uid == Process.myUid(), 0); assertNotNull(kernelCpuThreadReader); final ProcessCpuUsage currentProcessCpuUsage = kernelCpuThreadReader.getCurrentProcessCpuUsage(); Loading