Loading services/core/java/com/android/server/cpu/CpuInfoReader.java +20 −20 Original line number Diff line number Diff line Loading @@ -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++) { Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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) { Loading @@ -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, Loading @@ -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, Loading Loading @@ -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; } Loading @@ -919,6 +918,7 @@ public final class CpuInfoReader { @Override public String toString() { return "DynamicPolicyInfo{curCpuFreqKHz = " + curCpuFreqKHz + ", maxCpuFreqKHz = " + maxCpuFreqKHz + ", avgTimeInStateCpuFreqKHz = " + avgTimeInStateCpuFreqKHz + ", affectedCpuCores = " + affectedCpuCores + '}'; } Loading services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy0/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2500000 2600000 services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy1/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2800000 2900000 services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy2/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2000000 2100000 services/tests/mockingservicestests/src/com/android/server/cpu/CpuInfoReaderTest.java +7 −7 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading Loading
services/core/java/com/android/server/cpu/CpuInfoReader.java +20 −20 Original line number Diff line number Diff line Loading @@ -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++) { Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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) { Loading @@ -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, Loading @@ -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, Loading Loading @@ -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; } Loading @@ -919,6 +918,7 @@ public final class CpuInfoReader { @Override public String toString() { return "DynamicPolicyInfo{curCpuFreqKHz = " + curCpuFreqKHz + ", maxCpuFreqKHz = " + maxCpuFreqKHz + ", avgTimeInStateCpuFreqKHz = " + avgTimeInStateCpuFreqKHz + ", affectedCpuCores = " + affectedCpuCores + '}'; } Loading
services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy0/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2500000 2600000
services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy1/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2800000 2900000
services/tests/mockingservicestests/assets/CpuInfoReaderTest/valid_cpufreq_with_time_in_state_2/policy2/scaling_max_freq +1 −1 Original line number Diff line number Diff line 2000000 2100000
services/tests/mockingservicestests/src/com/android/server/cpu/CpuInfoReaderTest.java +7 −7 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading