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

Commit dc5beb50 authored by Misha Wagner's avatar Misha Wagner Committed by Android (Google) Code Review
Browse files

Merge "Add KernelCpuThreadReader minimium CPU usage threshold"

parents 090779c8 648d2035
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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() {
+1 −0
Original line number Diff line number Diff line
@@ -14368,6 +14368,7 @@ public final class Settings {
         * <pre>
         *     num_buckets          (int)
         *     collected_uids       (string)
         *     minimum_total_cpu_usage_millis (int)
         * </pre>
         *
         * @hide
+32 −1
Original line number Diff line number Diff line
@@ -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
     */
@@ -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());
@@ -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}
@@ -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);
    }

+12 −1
Original line number Diff line number Diff line
@@ -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));
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -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