Skip to content

Phase 1: 硬件探针与能力分级 -- 设计意图

为什么选择这种方案

CFDesktop 的目标设备跨度极大——从 528MHz 单核 Cortex-A7 (IMX6ULL) 到 8 核 Cortex-A76 (RK3588),性能差距超过 20 倍。如果用一套渲染和动画策略覆盖所有设备,要么在低端设备上卡顿,要么在高端设备上浪费算力。因此我们在系统启动时执行一次硬件探针,输出三级档位(Low/Mid/High),后续所有模块(主题引擎、动画管理器、渲染后端)根据档位自动裁剪行为。

选择三级而非更细的分级(如五级或连续分数),是因为三级足以覆盖我们的目标硬件矩阵,且每级对应一组明确的能力策略(禁用动画/基础动画/全动画),避免了策略配置的指数膨胀。评分采用加权累加制:CPU 核数和频率、GPU 硬件加速、内存容量各占一定权重,阈值设为 60/120 分两档切分。

检测方法按平台区分:Linux 通过 /proc/cpuinfo/proc/meminfo/dev/dri//sys/class/net/ 等 sysfs 路径直接读取;Windows 通过 WMI 查询。GPU 检测额外尝试创建 OpenGL 上下文获取驱动信息和扩展列表。所有检测结果缓存在 HardwareInfo 结构体中,避免重复检测。

用户或系统集成商可通过 setDeviceConfigOverride() API 强制覆盖自动检测结果,也可提供自定义检测脚本(输出 JSON)用于扩展硬件识别。这保证了在特殊硬件(如定制板卡)上的灵活性。

关键决策

决策理由被否决的替代方案
三级档位 (Low/Mid/High)覆盖目标硬件矩阵、策略配置简洁、避免过度细分五级或连续分数(策略组合爆炸)、两级(粒度不够)
加权评分算法 (CPU+GPU+Memory)各维度独立评分、阈值明确、易于调试机器学习模型(过重、训练数据不足)、纯特征匹配(不通用)
运行时检测 + 缓存一次检测、全局复用、性能开销可控编译时硬编码(无法适配新硬件)、每次查询都检测(性能浪费)
策略引擎按档位返回策略结构体上层模块只需读策略、不关心检测细节上层模块自行解读硬件信息(逻辑分散、重复代码)
setDeviceConfigOverride() API 覆盖灵活、不依赖系统路径、适配嵌入式部署读取 /etc/CFDesktop/device.conf(需要 root 权限、路径不可移植)

当前状态

已实现 -- CPU/GPU/Memory/Network 检测器、三级评分算法、策略引擎、用户覆盖 API 均已完成。详见 document/design_stage/status/

Built with VitePress