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

Commit f219c5bd authored by Ethan Lee's avatar Ethan Lee Committed by Android (Google) Code Review
Browse files

Merge "Dynamically read scaling_max_freq for each CPU frequency policy." into udc-qpr-dev

parents 41b3a67c d00bcae6
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -203,15 +203,15 @@ public final class CpuInfoReader {
                continue;
            }
            if (dynamicPolicyInfo.curCpuFreqKHz == CpuInfo.MISSING_FREQUENCY
                    || staticPolicyInfo.maxCpuFreqKHz == CpuInfo.MISSING_FREQUENCY) {
                    || dynamicPolicyInfo.maxCpuFreqKHz == CpuInfo.MISSING_FREQUENCY) {
                Slogf.w(TAG, "Current and maximum CPU frequency information mismatch/missing for"
                        + " policy ID %d", policyId);
                continue;
            }
            if (dynamicPolicyInfo.curCpuFreqKHz > staticPolicyInfo.maxCpuFreqKHz) {
            if (dynamicPolicyInfo.curCpuFreqKHz > dynamicPolicyInfo.maxCpuFreqKHz) {
                Slogf.w(TAG, "Current CPU frequency (%d) is greater than maximum CPU frequency"
                        + " (%d) for policy ID (%d). Skipping CPU frequency policy",
                        dynamicPolicyInfo.curCpuFreqKHz,  staticPolicyInfo.maxCpuFreqKHz, policyId);
                        dynamicPolicyInfo.curCpuFreqKHz, dynamicPolicyInfo.maxCpuFreqKHz, policyId);
                continue;
            }
            for (int coreIdx = 0; coreIdx < staticPolicyInfo.relatedCpuCores.size(); coreIdx++) {
@@ -234,7 +234,8 @@ public final class CpuInfoReader {
                if (dynamicPolicyInfo.affectedCpuCores.indexOf(relatedCpuCore) < 0) {
                    cpuInfoByCpus.append(relatedCpuCore, new CpuInfo(relatedCpuCore,
                            cpusetCategories, /* isOnline= */false, CpuInfo.MISSING_FREQUENCY,
                            staticPolicyInfo.maxCpuFreqKHz, CpuInfo.MISSING_FREQUENCY, usageStats));
                            dynamicPolicyInfo.maxCpuFreqKHz, CpuInfo.MISSING_FREQUENCY,
                            usageStats));
                    continue;
                }
                // If a CPU core is online, it must have the usage stats. When the usage stats is
@@ -245,7 +246,7 @@ public final class CpuInfoReader {
                    continue;
                }
                CpuInfo cpuInfo = new CpuInfo(relatedCpuCore, cpusetCategories, /* isOnline= */true,
                        dynamicPolicyInfo.curCpuFreqKHz, staticPolicyInfo.maxCpuFreqKHz,
                        dynamicPolicyInfo.curCpuFreqKHz, dynamicPolicyInfo.maxCpuFreqKHz,
                        dynamicPolicyInfo.avgTimeInStateCpuFreqKHz, usageStats);
                cpuInfoByCpus.append(relatedCpuCore, cpuInfo);
                if (DEBUG) {
@@ -423,12 +424,6 @@ public final class CpuInfoReader {
        for (int i = 0; i < mCpuFreqPolicyDirsById.size(); i++) {
            int policyId = mCpuFreqPolicyDirsById.keyAt(i);
            File policyDir = mCpuFreqPolicyDirsById.valueAt(i);
            long maxCpuFreqKHz = readCpuFreqKHz(new File(policyDir, MAX_SCALING_FREQ_FILE));
            if (maxCpuFreqKHz == CpuInfo.MISSING_FREQUENCY) {
                Slogf.w(TAG, "Missing max CPU frequency information at %s",
                        policyDir.getAbsolutePath());
                continue;
            }
            File cpuCoresFile = new File(policyDir, RELATED_CPUS_FILE);
            IntArray relatedCpuCores = readCpuCores(cpuCoresFile);
            if (relatedCpuCores == null || relatedCpuCores.size() == 0) {
@@ -436,8 +431,7 @@ public final class CpuInfoReader {
                        cpuCoresFile.getAbsolutePath());
                continue;
            }
            StaticPolicyInfo staticPolicyInfo = new StaticPolicyInfo(maxCpuFreqKHz,
                    relatedCpuCores);
            StaticPolicyInfo staticPolicyInfo = new StaticPolicyInfo(relatedCpuCores);
            mStaticPolicyInfoById.append(policyId, staticPolicyInfo);
            if (DEBUG) {
                Slogf.d(TAG, "Added static policy info %s for policy id %d", staticPolicyInfo,
@@ -464,8 +458,14 @@ public final class CpuInfoReader {
                Slogf.e(TAG, "Failed to read CPU cores from %s", cpuCoresFile.getAbsolutePath());
                continue;
            }
            long maxCpuFreqKHz = readCpuFreqKHz(new File(policyDir, MAX_SCALING_FREQ_FILE));
            if (maxCpuFreqKHz == CpuInfo.MISSING_FREQUENCY) {
                Slogf.w(TAG, "Missing max CPU frequency information at %s",
                        policyDir.getAbsolutePath());
                continue;
            }
            DynamicPolicyInfo dynamicPolicyInfo = new DynamicPolicyInfo(curCpuFreqKHz,
                    avgTimeInStateCpuFreqKHz, affectedCpuCores);
                    maxCpuFreqKHz, avgTimeInStateCpuFreqKHz, affectedCpuCores);
            dynamicPolicyInfoById.append(policyId, dynamicPolicyInfo);
            if (DEBUG) {
                Slogf.d(TAG, "Read dynamic policy info %s for policy id %d", dynamicPolicyInfo,
@@ -889,29 +889,28 @@ public final class CpuInfoReader {
    }

    private static final class StaticPolicyInfo {
        public final long maxCpuFreqKHz;
        public final IntArray relatedCpuCores;

        StaticPolicyInfo(long maxCpuFreqKHz, IntArray relatedCpuCores) {
            this.maxCpuFreqKHz = maxCpuFreqKHz;
        StaticPolicyInfo(IntArray relatedCpuCores) {
            this.relatedCpuCores = relatedCpuCores;
        }

        @Override
        public String toString() {
            return "StaticPolicyInfo{maxCpuFreqKHz = " + maxCpuFreqKHz + ", relatedCpuCores = "
                    + relatedCpuCores + '}';
            return "StaticPolicyInfo{relatedCpuCores = " + relatedCpuCores + '}';
        }
    }

    private static final class DynamicPolicyInfo {
        public final long curCpuFreqKHz;
        public final long maxCpuFreqKHz;
        public final long avgTimeInStateCpuFreqKHz;
        public final IntArray affectedCpuCores;

        DynamicPolicyInfo(long curCpuFreqKHz, long avgTimeInStateCpuFreqKHz,
        DynamicPolicyInfo(long curCpuFreqKHz, long maxCpuFreqKHz, long avgTimeInStateCpuFreqKHz,
                IntArray affectedCpuCores) {
            this.curCpuFreqKHz = curCpuFreqKHz;
            this.maxCpuFreqKHz = maxCpuFreqKHz;
            this.avgTimeInStateCpuFreqKHz = avgTimeInStateCpuFreqKHz;
            this.affectedCpuCores = affectedCpuCores;
        }
@@ -919,6 +918,7 @@ public final class CpuInfoReader {
        @Override
        public String toString() {
            return "DynamicPolicyInfo{curCpuFreqKHz = " + curCpuFreqKHz
                    + ", maxCpuFreqKHz = " + maxCpuFreqKHz
                    + ", avgTimeInStateCpuFreqKHz = " + avgTimeInStateCpuFreqKHz
                    + ", affectedCpuCores = " + affectedCpuCores + '}';
        }
+1 −1
Original line number Diff line number Diff line
2500000
2600000
+1 −1
Original line number Diff line number Diff line
2800000
2900000
+1 −1
Original line number Diff line number Diff line
2000000
2100000
+7 −7
Original line number Diff line number Diff line
@@ -142,8 +142,8 @@ public final class CpuInfoReaderTest extends ExpectableTestCase {
        expectedCpuInfos.clear();
        expectedCpuInfos.append(0, new CpuInfoReader.CpuInfo(/* cpuCore= */ 0,
                FLAG_CPUSET_CATEGORY_TOP_APP, /* isOnline= */ true, /* curCpuFreqKHz= */ 1_000_000,
                /* maxCpuFreqKHz= */ 2_500_000, /* avgTimeInStateCpuFreqKHz= */ 419_354,
                /* normalizedAvailableCpuFreqKHz= */ 2_425_919,
                /* maxCpuFreqKHz= */ 2_600_000, /* avgTimeInStateCpuFreqKHz= */ 419_354,
                /* normalizedAvailableCpuFreqKHz= */ 2_525_919,
                new CpuInfoReader.CpuUsageStats(/* userTimeMillis= */ 10_000_000,
                        /* niceTimeMillis= */ 1_000_000, /* systemTimeMillis= */ 10_000_000,
                        /* idleTimeMillis= */ 110_000_000, /* iowaitTimeMillis= */ 1_100_000,
@@ -152,8 +152,8 @@ public final class CpuInfoReaderTest extends ExpectableTestCase {
                        /* guestNiceTimeMillis= */ 0)));
        expectedCpuInfos.append(1, new CpuInfoReader.CpuInfo(/* cpuCore= */ 1,
                FLAG_CPUSET_CATEGORY_TOP_APP, /* isOnline= */ true, /* curCpuFreqKHz= */ 2_800_000,
                /* maxCpuFreqKHz= */ 2_800_000, /* avgTimeInStateCpuFreqKHz= */ 429_032,
                /* normalizedAvailableCpuFreqKHz= */ 2_403_009,
                /* maxCpuFreqKHz= */ 2_900_000, /* avgTimeInStateCpuFreqKHz= */ 429_032,
                /* normalizedAvailableCpuFreqKHz= */ 2_503_009,
                new CpuInfoReader.CpuUsageStats(/* userTimeMillis= */ 900_000,
                        /* niceTimeMillis= */ 1_000_000, /* systemTimeMillis= */ 10_000_000,
                        /* idleTimeMillis= */ 1_000_000, /* iowaitTimeMillis= */ 90_000,
@@ -163,8 +163,8 @@ public final class CpuInfoReaderTest extends ExpectableTestCase {
        expectedCpuInfos.append(2, new CpuInfoReader.CpuInfo(/* cpuCore= */ 2,
                FLAG_CPUSET_CATEGORY_TOP_APP | FLAG_CPUSET_CATEGORY_BACKGROUND,
                /* isOnline= */ true, /* curCpuFreqKHz= */ 2_000_000,
                /* maxCpuFreqKHz= */ 2_000_000, /* avgTimeInStateCpuFreqKHz= */ 403_225,
                /* normalizedAvailableCpuFreqKHz= */ 1_688_209,
                /* maxCpuFreqKHz= */ 2_100_000, /* avgTimeInStateCpuFreqKHz= */ 403_225,
                /* normalizedAvailableCpuFreqKHz= */ 1_788_209,
                new CpuInfoReader.CpuUsageStats(/* userTimeMillis= */ 10_000_000,
                        /* niceTimeMillis= */ 2_000_000, /* systemTimeMillis= */ 0,
                        /* idleTimeMillis= */ 10_000_000, /* iowaitTimeMillis= */ 1_000_000,
@@ -174,7 +174,7 @@ public final class CpuInfoReaderTest extends ExpectableTestCase {
        expectedCpuInfos.append(3, new CpuInfoReader.CpuInfo(/* cpuCore= */ 3,
                FLAG_CPUSET_CATEGORY_TOP_APP | FLAG_CPUSET_CATEGORY_BACKGROUND,
                /* isOnline= */ false, /* curCpuFreqKHz= */ MISSING_FREQUENCY,
                /* maxCpuFreqKHz= */ 2_000_000, /* avgTimeInStateCpuFreqKHz= */ MISSING_FREQUENCY,
                /* maxCpuFreqKHz= */ 2_100_000, /* avgTimeInStateCpuFreqKHz= */ MISSING_FREQUENCY,
                /* normalizedAvailableCpuFreqKHz= */ MISSING_FREQUENCY,
                new CpuInfoReader.CpuUsageStats(/* userTimeMillis= */ 2_000_000,
                        /* niceTimeMillis= */ 1_000_000, /* systemTimeMillis= */ 1_000_000,