DevCheck-lib/CpuInfo核心详细信息使用示例.md
2025-12-29 11:39:18 +08:00

7.8 KiB
Raw Permalink Blame History

CpuInfo 核心详细信息使用示例

新增功能说明

CpuInfo 类新增了获取每个 CPU 核心详细信息的功能,包括:

  • 每个核心的最大频率
  • 每个核心的最小频率
  • 每个核心的当前频率
  • 每个核心的速度度量值
  • 可用频率列表

核心数据类

CoreDetailedInfo

data class CoreDetailedInfo(
    val core: Core,                      // 核心基本信息
    val currentFrequency: Long,          // 当前频率Hz
    val minFrequency: Long,              // 最小频率Hz
    val maxFrequency: Long,              // 最大频率Hz
    val availableFrequencies: List<Long>, // 可用频率列表Hz
    val speedMetric: Double              // 速度度量值GHz
)

使用示例

1. 获取所有核心的详细信息

val cpuInfo = CpuInfo()

// 获取所有核心的详细信息
val detailedCores = cpuInfo.getCoresDetailedInfo()

detailedCores.forEachIndexed { index, coreInfo ->
    println("CPU $index:")
    println("  架构: ${coreInfo.core.uarch.name}")
    println("  供应商: ${coreInfo.core.vendor.name}")
    println("  当前频率: ${coreInfo.currentFrequency / 1_000_000} MHz")
    println("  最小频率: ${coreInfo.minFrequency / 1_000_000} MHz")
    println("  最大频率: ${coreInfo.maxFrequency / 1_000_000} MHz")
    println("  速度度量: ${String.format("%.2f GHz", coreInfo.speedMetric)}")
    println("  可用频率数量: ${coreInfo.availableFrequencies.size}")
}

2. 获取指定核心的详细信息

val cpuInfo = CpuInfo()

// 获取第一个核心(大核)的详细信息
val core0 = cpuInfo.getCoreDetailedInfo(0)

core0?.let {
    println("大核信息:")
    println("当前频率: ${it.currentFrequency / 1_000_000} MHz")
    println("最大频率: ${it.maxFrequency / 1_000_000} MHz")
    println("最小频率: ${it.minFrequency / 1_000_000} MHz")
    println("速度度量: ${it.speedMetric} GHz")
}

3. 获取所有核心的频率列表

val cpuInfo = CpuInfo()

// 获取所有核心的最大频率
val maxFreqs = cpuInfo.getCoresMaxFrequencies()
println("所有核心最大频率: ${maxFreqs.map { it / 1_000_000 }} MHz")

// 获取所有核心的最小频率
val minFreqs = cpuInfo.getCoresMinFrequencies()
println("所有核心最小频率: ${minFreqs.map { it / 1_000_000 }} MHz")

// 获取所有核心的当前频率
val currentFreqs = cpuInfo.getCoresCurrentFrequencies()
println("所有核心当前频率: ${currentFreqs.map { it / 1_000_000 }} MHz")

// 获取所有核心的速度度量值
val speedMetrics = cpuInfo.getCoresSpeedMetrics()
println("所有核心速度度量: ${speedMetrics.map { String.format("%.2f", it) }} GHz")

4. 分析大小核配置

val cpuInfo = CpuInfo()
val detailedCores = cpuInfo.getCoresDetailedInfo()

// 按最大频率排序,找出大核和小核
val sortedByFreq = detailedCores.sortedByDescending { it.maxFrequency }

println("大核(性能核心):")
sortedByFreq.take(2).forEachIndexed { index, core ->
    println("  核心 ${core.core.processorStart}: ${core.core.uarch.name}, ${core.maxFrequency / 1_000_000} MHz")
}

println("\n小核(效率核心):")
sortedByFreq.takeLast(6).forEach { core ->
    println("  核心 ${core.core.processorStart}: ${core.core.uarch.name}, ${core.maxFrequency / 1_000_000} MHz")
}

5. 监控实时频率变化

val cpuInfo = CpuInfo()

// 创建一个协程来监控频率变化
lifecycleScope.launch {
    while (isActive) {
        val currentFreqs = cpuInfo.getCoresCurrentFrequencies()
        
        println("实时频率:")
        currentFreqs.forEachIndexed { index, freq ->
            println("  CPU$index: ${freq / 1_000_000} MHz")
        }
        
        delay(1000) // 每秒更新一次
    }
}

6. 计算 CPU 负载百分比

val cpuInfo = CpuInfo()
val detailedCores = cpuInfo.getCoresDetailedInfo()

detailedCores.forEachIndexed { index, core ->
    // 计算当前频率占最大频率的百分比
    val loadPercentage = if (core.maxFrequency > 0) {
        (core.currentFrequency.toDouble() / core.maxFrequency * 100)
    } else {
        0.0
    }
    
    println("CPU$index 负载: ${String.format("%.1f%%", loadPercentage)}")
}

7. 在 Compose UI 中显示

@Composable
fun CpuCoresList() {
    val cpuInfo = remember { CpuInfo() }
    var detailedCores by remember { mutableStateOf(cpuInfo.getCoresDetailedInfo()) }
    
    // 自动刷新
    LaunchedEffect(Unit) {
        while (true) {
            delay(1000)
            detailedCores = cpuInfo.getCoresDetailedInfo()
        }
    }
    
    LazyColumn {
        itemsIndexed(detailedCores) { index, core ->
            Card(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(8.dp)
            ) {
                Column(modifier = Modifier.padding(16.dp)) {
                    Text(
                        text = "CPU $index",
                        style = MaterialTheme.typography.titleMedium
                    )
                    Spacer(modifier = Modifier.height(8.dp))
                    
                    Text("架构: ${core.core.uarch.name}")
                    Text("当前: ${core.currentFrequency / 1_000_000} MHz")
                    Text("范围: ${core.minFrequency / 1_000_000} - ${core.maxFrequency / 1_000_000} MHz")
                    Text("速度度量: ${String.format("%.2f GHz", core.speedMetric)}")
                    
                    // 频率进度条
                    LinearProgressIndicator(
                        progress = if (core.maxFrequency > 0) {
                            core.currentFrequency.toFloat() / core.maxFrequency
                        } else 0f,
                        modifier = Modifier
                            .fillMaxWidth()
                            .padding(top = 8.dp)
                    )
                }
            }
        }
    }
}

获取 CPU 性能摘要

使用 text() 方法可以获取完整的 CPU 信息摘要(包括新增的核心详细信息):

val cpuInfo = CpuInfo()
val summary = cpuInfo.text()
println(summary)

输出示例:

=== CPU Basic Info ===
Processor Name: Qualcomm Snapdragon 888
Vendor: ARM
Process: 5nm
Foundry: Samsung
Process Node: Samsung 5LPE
Physical Cores: 8
Logical Processors: 8

=== Core Cluster Configuration ===
Big Cores: 1, Max Frequency: 2.84 GHz
Mid Cores: 3, Max Frequency: 2.42 GHz
Little Cores: 4, Max Frequency: 1.80 GHz

=== Architecture Info ===
Architecture: Cortex-X1, Cortex-A78, Cortex-A55
ABI: arm64-v8a
Supported ABIs: arm64-v8a, armeabi-v7a, armeabi

=== Performance Metrics ===
Performance Level: Flagship
Performance Index: 95.2
Total Score: 17984.5
BogoMIPS: 38.40

=== Governor ===
Current Governor: schedutil
Available Governors: schedutil, performance, powersave

=== Core Detailed Info ===
CPU0: Current=2.84 GHz, Range=300 MHz-2.84 GHz, Metric=2.84 GHz, Arch=Cortex-X1
CPU1: Current=2.42 GHz, Range=300 MHz-2.42 GHz, Metric=2.42 GHz, Arch=Cortex-A78
...

注意事项

  1. 频率单位: 所有频率值都以 Hz赫兹为单位返回

    • 转换为 MHz: frequency / 1_000_000
    • 转换为 GHz: frequency / 1_000_000_000.0
  2. 权限: 读取频率信息不需要特殊权限

  3. 实时性: currentFrequency 是实时读取的,会随 CPU 负载变化而变化

  4. 可用频率: 某些设备可能不提供 availableFrequencies 列表,返回空列表

  5. 速度度量: speedMetric 是根据最大频率计算的,单位为 GHz可以用来比较不同核心的性能

  6. 中英文: 所有返回的文本信息已改为英文,中文保留在注释中

兼容性

  • 最低 Android 版本: 与原 CpuInfo 类相同
  • 支持所有架构: ARM, ARM64, x86, x86_64
  • 向后兼容: 所有原有方法保持不变