264 lines
7.8 KiB
Markdown
264 lines
7.8 KiB
Markdown
# CpuInfo 核心详细信息使用示例
|
||
|
||
## 新增功能说明
|
||
|
||
`CpuInfo` 类新增了获取每个 CPU 核心详细信息的功能,包括:
|
||
- 每个核心的最大频率
|
||
- 每个核心的最小频率
|
||
- 每个核心的当前频率
|
||
- 每个核心的速度度量值
|
||
- 可用频率列表
|
||
|
||
## 核心数据类
|
||
|
||
### CoreDetailedInfo
|
||
```kotlin
|
||
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. 获取所有核心的详细信息
|
||
|
||
```kotlin
|
||
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. 获取指定核心的详细信息
|
||
|
||
```kotlin
|
||
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. 获取所有核心的频率列表
|
||
|
||
```kotlin
|
||
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. 分析大小核配置
|
||
|
||
```kotlin
|
||
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. 监控实时频率变化
|
||
|
||
```kotlin
|
||
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 负载百分比
|
||
|
||
```kotlin
|
||
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 中显示
|
||
|
||
```kotlin
|
||
@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 信息摘要(包括新增的核心详细信息):
|
||
|
||
```kotlin
|
||
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
|
||
- 向后兼容: 所有原有方法保持不变
|