欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

安卓各部分的温度,以获得探索的逻辑

最编程 2024-04-12 09:21:38
...

Android各种部件温度获取逻辑探究

image.png

Preface

事件的来源是做一个性能监测工具获取GPU,电池温度数据时反了snapdragon的pluginGPU-GGPM的so,这个so对应会获取GPU GeneralGPU theramal也就是GP温度数据。snapdragon会把获取温度的文件名通过logcat打出来,如下:

sub_94FE0(v69, 1LL, "GGPMProvider", "GGPM_DP: Reading GPU Temperature from '/sys/class/kgsl/kgsl-3d0/temp'");

可以在snapdrgon连接上手机后从logcat日志出看出这一句:

grus:/ $ logcat | grep Temperature
11-23 11:01:53.264 17088 17088 I SDP     : SDPCore.Metric: Metric 'GPU Temperature' activated for all processes
11-23 11:10:12.597 23936 23936 I SDP     : GGPMProvider: GGPM_DP: Reading GPU Temperature from '/sys/devices/virtual/thermal/thermal_zone29/temp'

也就是说snapdrgon是从/sys/devices/virtual/thermal/thermal_zone29/temp这个文件中拿出的GPU温度数据。

在这之前,我获取CPU温度数据的逻辑也是从一些文件中读取数据,比如:


            "/sys/class/thermal/thermal_zone7/temp",
            "/sys/devices/virtual/thermal/thermal_zone7/temp",
//            "/sys/kernel/debug/tegra_thermal/temp_tj",
//            "/sys/devices/platform/s5p-tmu/curr_temp",
//            "/sys/devices/virtual/thermal/thermal_zone1/temp",//常用
//            "/sys/devices/system/cpu/cpufreq/cput_attributes/cur_temp",
//            "/sys/devices/virtual/hwmon/hwmon2/temp1_input",
//            "/sys/devices/platform/coretemp.0/temp2_input",
//            "/sys/devices/virtual/thermal/thermal_zone0/temp",
//            "/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp",
//            "/sys/devices/platform/omap/omap_temp_sensor.0/temperature",
//            "/sys/class/thermal/thermal_zone1/temp",
//            "/sys/devices/platform/s5p-tmu/temperature",
//            "/sys/devices/w1 bus master/w1_master_attempts",
//            "/sys/class/thermal/thermal_zone0/temp"

​

 
            "/sys/devices/virtual/thermal/thermal_zone0/temp",
            "/sys/class/thermal/thermal_zone0/temp",
            "/sys/kernel/debug/tegra_thermal/temp_tj",
            "/sys/devices/platform/s5p-tmu/curr_temp",
            "/sys/devices/virtual/thermal/thermal_zone1/temp",
            "/sys/devices/system/cpu/cpufreq/cput_attributes/cur_temp",
            "/sys/devices/virtual/hwmon/hwmon2/temp1_input",
            "/sys/devices/platform/coretemp.0/temp2_input",
            "/sys/devices/platform/omap/omap_temp_sensor.0/temperature",
            "/sys/class/thermal/thermal_zone1/temp",
            "/sys/devices/platform/s5p-tmu/temperature",
            "/sys/devices/w1 bus master/w1_master_attempts",
            "/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp",
            "/sys/devices/system/cpu/cpu0/cpufreq/FakeShmoo_cpu_temp",
            "/sys/class/i2c-adapter/i2c-4/4-004c/temperature",
            "/sys/devices/platform/tegra-i2c.3/i2c-4/4-004c/temperature",
            "/sys/devices/platform/tegra_tmon/temp1_input",
            "/sys/class/hwmon/hwmon0/device/temp1_input",
            "/sys/devices/virtual/thermal/thermal_zone1/temp",
            "/sys/class/thermal/thermal_zone3/temp",
            "/sys/class/thermal/thermal_zone4/temp",
            "/sys/class/hwmon/hwmonX/temp1_input",
            "/sys/devices/platform/s5p-tmu/curr_temp"

可以看到,获取CPU温度中主要使用了/sys/devices/virtual/thermal/thermal_zone7/temp。现在的问题是,这些thermal_zone到底有什么作用? 如何使用分辨不同的thermal_zone的作用?

Manuscript

为了解决上述的问题,有了下面的探究。

不同的厂家和设备之间可能存在着明显的兼容性问题,因此此处表明本次测试环境是XIAO MI9 SE, MIUI 12.0.3, Android 10。

深究thermal_zone

比如gpu-virt-max-step的thermal_zone,这个概念其实在安卓内核源码中: qti_virtual_sensor.c:

​
static const struct virtual_sensor_data qti_virtual_sensors[] = {
    {
        .virt_zone_name = "gpu-virt-max-step",
        .num_sensors = 2,
        .sensor_names = {"gpu0-usr",
                "gpu1-usr"},
        .logic = VIRT_MAXIMUM,
    },
    ....
};

在这个结构中,virt_zone_name也就是thermal_zone的type,而sensor_names决定了数据的来源,在这里也就是数据来源是名为gpu0-usrgpu1-usr的两个温度传感器。

具体有多少个传感器,分别有什么作用,取决于SOC厂商,不过SOC厂商会将这些信息写入到安卓源码中。

高通SOC传感器

在安卓源码中,platform/hardware/qcom/ 下面列出了高通一些soc的硬件信息。

比如thermal_target.c就列出了在android13下sdm845处理器的一些传感器信息。

  • qcom android9: android.googlesource.com/platform/ha…
  • qcom android10: android.googlesource.com/platform/ha…
  • qcom android11: android.googlesource.com/platform/ha…
  • qcom android12: android.googlesource.com/platform/ha…
  • qcom android13: android.googlesource.com/platform/ha…
  • qcom adnroid14: android.googlesource.com/platform/ha…
CPU温度传感器

thermal_target.c文件中可以提取出用于衡量CPU温度传感器例如有:

static char *cpu_sensors_talos[] =
{
    "cpuss-2-usr",
    "cpuss-2-usr",
    "cpuss-1-usr",
    "cpuss-1-usr",
    "cpuss-0-usr",
    "cpuss-0-usr",
    "cpu-1-0-usr",
    "cpu-1-2-usr",
};
​
static char *cpu_sensors_sdmmagpie[] =
{
    "cpu-0-0-usr",
    "cpu-0-1-usr",
    "cpu-0-2-usr",
    "cpu-0-3-usr",
    "cpu-0-4-usr",
    "cpu-0-5-usr",
    "cpu-1-0-usr",
    "cpu-1-2-usr",
};
​
static char *cpu_sensors_trinket[] =
{
    "cpuss-0-usr",
    "cpuss-0-usr",
    "cpuss-0-usr",
    "cpuss-0-usr",
    "cpu-1-0-usr",
    "cpu-1-1-usr",
    "cpu-1-2-usr",
    "cpu-1-3-usr",
};
​
static char *cpu_sensors_bengal[] =
{
    "cpuss-2-usr",
    "cpuss-2-usr",
    "cpuss-2-usr",
    "cpuss-2-usr",
    "cpu-1-0-usr",
    "cpu-1-1-usr",
    "cpu-1-2-usr",
    "cpu-1-3-usr",
};
​
static char *cpu_sensors_msmnile[] =
{
    "cpu-0-0-usr",
    "cpu-0-1-usr",
    "cpu-0-2-usr",
    "cpu-0-3-usr",
    "cpu-1-0-usr",
    "cpu-1-1-usr",
    "cpu-1-2-usr",
    "cpu-1-3-usr",
};
​
static char *cpu_sensors_660[] =
{
    "tsens_tz_sensor1",
    "tsens_tz_sensor1",
    "tsens_tz_sensor1",
    "tsens_tz_sensor1",
    "tsens_tz_sensor3",
    "tsens_tz_sensor4",
    "tsens_tz_sensor5",
    "tsens_tz_sensor6",
};
​
static char *cpu_sensors_630[] =
{
    "tsens_tz_sensor3",
    "tsens_tz_sensor4",
    "tsens_tz_sensor5",
    "tsens_tz_sensor6",
    "tsens_tz_sensor7",
    "tsens_tz_sensor7",
    "tsens_tz_sensor7",
    "tsens_tz_sensor7",
};
​
static char *cpu_sensors_8953[] =
{
    "tsens_tz_sensor9",
    "tsens_tz_sensor10",
    "tsens_tz_sensor11",
    "tsens_tz_sensor12",
    "tsens_tz_sensor4",
    "tsens_tz_sensor5",
    "tsens_tz_sensor6",
    "tsens_tz_sensor7",
};
​
static char *cpu_sensors_710[] =
{
    "cpu0-silver-usr",
    "cpu1-silver-usr",
    "cpu2-silver-usr",
    "cpu3-silver-usr",
    "cpu4-silver-usr",
    "cpu5-silver-usr",
    "cpu0-gold-usr",
    "cpu1-gold-usr",
};
​
static char *cpu_sensors_632[] =
{
    "cpuss0-usr",
    "cpuss0-usr",
    "cpuss0-usr",
    "cpuss0-usr",
    "apc1-cpu0-usr",
    "apc1-cpu1-usr",
    "apc1-cpu2-usr",
    "apc1-cpu3-usr",
};
​
static char *cpu_sensors_439[] =
{
    "apc1-cpu0-usr",
    "apc1-cpu1-usr",
    "apc1-cpu2-usr",
    "apc1-cpu3-usr",
    "cpuss0-usr",
    "cpuss0-usr",
    "cpuss0-usr",
    "cpuss0-usr",
};
​
static char *cpu_sensors_8917[] =
{
    "apc1-cpu0-usr",
    "apc1-cpu1-usr",
    "apc1-cpu2-usr",
    "apc1-cpu3-usr",
};
​
​
// 这个在源码中没看到,但在8gen系列机器的thermal_zone中看到了所以加上
"cpu_therm"
GPU温度传感器

thermal_target.c文件中可以提取出用于衡量GPU温度传感器例如有:

"gpu-usr",
"gpu0-usr",
"gpuss-0-usr",
"tsens_tz_sensor8",
"tsens_tz_sensor9",
"tsens_tz_sensor15",
​
​
// 这个在源码中没看到,但在8gen系列机器的thermal_zone中看到了所以加上
"gpuss-0",
​
Battery温度传感器

thermal_target.c文件中可以提取出用于衡量GPU温度传感器例如有:

"battery",

// TODO: pm660l_tz 和 battery的逻辑不是很清楚, 不过pm代表的是power management, 也就是Power Control IC。

联发科SOC传感器

在android源码中,关于早期联发科的一些温度传感器和monitor的信息在: mtk_thermal_monitor.c文件中。

static int mtk_thermal_get_tz_idx(char *type)
{
    if (0 == strncmp(type, "mtktscpu", 8))  // CPU thermal
        return MTK_THERMAL_SENSOR_CPU;
    else if (0 == strncmp(type, "mtktsabb", 8))
        return MTK_THERMAL_SENSOR_ABB;
    else if (0 == strncmp(type, "mtktspmic", 9))
        return MTK_THERMAL_SENSOR_PMIC;
    else if (0 == strncmp(type, "mtktsbattery2", 13))
        return MTK_THERMAL_SENSOR_BATTERY2;
    else if (0 == strncmp(type, "mtktsbattery", 12))
        return MTK_THERMAL_SENSOR_BATTERY;  // battery
    else if (0 == strncmp(type, "mtktspa", 7))
        return MTK_THERMAL_SENSOR_MD1;
    else if (0 == strncmp(type, "mtktstdpa", 9))
        return MTK_THERMAL_SENSOR_MD2;
    else if (0 == strncmp(type, "mtktswmt", 8))
        return MTK_THERMAL_SENSOR_WIFI;
    else if (0 == strncmp(type, "mtktsbuck", 9))
        return MTK_THERMAL_SENSOR_BUCK;
    else if (0 == strncmp(type, "mtktsAP", 7))
        return MTK_THERMAL_SENSOR_AP;
    else if (0 == strncmp(type, "mtktspcb1", 9))
        return MTK_THERMAL_SENSOR_PCB1;
    else if (0 == strncmp(type, "mtktspcb2", 9))
        return MTK_THERMAL_SENSOR_PCB2;
    else if (0 == strncmp(type, "mtktsskin", 9))
        return MTK_THERMAL_SENSOR_SKIN;
    else if (0 == strncmp(type, "mtktsxtal", 9))
        return MTK_THERMAL_SENSOR_XTAL;
    return -1;
}

海思麒麟SOC

只有远古时期的一份配置文件大概写了部分的传感器作用: android.googlesource.com/device/huaw…

...
[SS-CPU1]
#algo_type ss
sampling 10
sensor cpu1
device cluster0
set_point 85000
set_point_clr 55000
time_constant 0
    
[SS-CPU0]
#algo_type ss
sampling 10
sensor cpu0
device cluster0
set_point 85000
set_point_clr 55000
time_constant 0
...

例如cluster0被用于代表CPU的温度,gpu代表GPU的温度,Battery用于电池温度。

总结

获取GPU, CPU以及battery等温度数据可以通过读取对应thermal_zone文件下的temp文件来获得,但是需要注意,由于不同手机厂商的方案不同,这些文件的type以及文件权限并不一定相同。目前看到的情况如下:

小米手机:

可以正常读取 /sys/class/thermal/ 路径下的文件夹和文件。
​
例如小米9 SE:
grus:/ $ cat /sys/class/thermal/thermal_zone44/type
battery
​
grus:/ $ cat /sys/class/thermal/thermal_zone29/type
gpu-virt-max-step
​

华为手机:

/sys/class/thermal/ 路径下的文件夹和文件权限不够;
可以通过读取 /sys/devices/virtual/thermal/ 路径下的文件夹和文件获取数据。
​
例如华为p30:
HWELE:/ $ cat /sys/devices/virtual/thermal/thermal_zone3/type
Battery
​
HWELE:/ $ cat /sys/devices/virtual/thermal/thermal_zone9/type
gpu
​

IQOO手机:

可以正常读取 /sys/class/thermal/ 路径下的文件夹和文件。
​
例如IQOO Z3:
PD2073:/ $ cat /sys/class/thermal/thermal_zone90/type
battery
​
PD2073:/ $ cat /sys/class/thermal/thermal_zone45/type
gpuss-max-step
​

OPPO手机:

可以正常读取 /sys/class/thermal/ 路径下的文件夹和文件。
​
例如OPPO Reno:
OP46B1:/ $ cat /sys/class/thermal/thermal_zone44/type
battery
​
OP46B1:/ $ cat /sys/class/thermal/thermal_zone33/type
gpu-virt-max-step
​

当然,也可以通过dumpsys来拿取温度信息例如:

fuxi:/ $ dumpsys battery
Current Battery Service state:
  AC powered: false
  USB powered: true
  Wireless powered: false
  Dock powered: false
  Max charging current: 500000
  Max charging voltage: 5000000
  Charge counter: 3918
  status: 2
  health: 2
  present: true
  level: 94
  scale: 100
  voltage: 4370
  temperature: 300
  technology: Li-poly

最简单的方法无过于:

fuxi:/ $ dumpsys hardware_properties
****** Dump of HardwarePropertiesManagerService ******
CPU temperatures: [31.4, 31.8, 31.4, 31.4, 32.7, 31.9, 31.4, 31.9]
CPU throttling temperatures: [95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0]
CPU shutdown temperatures: [115.0, 115.0, 115.0, 115.0, 115.0, 115.0, 115.0, 115.0]
CPU vr throttling temperatures: [95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0]
GPU temperatures: [30.7, 30.7, 30.7, 31.5, 31.1, 30.7, 30.3, 30.7]
GPU throttling temperatures: [95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0]
GPU shutdown temperatures: [115.0, 115.0, 115.0, 115.0, 115.0, 115.0, 115.0, 115.0]
GPU vr throttling temperatures: [95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0, 95.0]
Battery temperatures: [29.1]
Battery throttling temperatures: [80.0]
Battery shutdown temperatures: [90.0]
Battery vr throttling temperatures: [80.0]
Skin temperatures: [30.459]
Skin throttling temperatures: [46.5]
Skin shutdown temperatures: [95.0]
Skin vr throttling temperatures: [46.5]
Fan speed: []
​
Cpu usage of core: 0, active = 984100, total = 3727757
Cpu usage of core: 1, active = 791709, total = 3873520
Cpu usage of core: 2, active = 789328, total = 3865533
Cpu usage of core: 3, active = 564362, total = 4012228
Cpu usage of core: 4, active = 418064, total = 4043632
Cpu usage of core: 5, active = 311618, total = 4059520
Cpu usage of core: 6, active = 303790, total = 4059706
Cpu usage of core: 7, active = 203052, total = 4071083
****** End of HardwarePropertiesManagerService dump ******

也可以通过dumpsys thermalservice拿取:

fuxi:/ $ dumpsys thermalservice
IsStatusOverride: false
ThermalEventListeners:
        callbacks: 2
        killed: false
        broadcasts count: -1
ThermalStatusListeners:
        callbacks: 5
        killed: false
        broadcasts count: -1
Thermal Status: 0
Cached temperatures:
        Temperature{mValue=36.4, mType=2, mName=battery, mStatus=0}
        Temperature{mValue=56.0, mType=0, mName=CPU0, mStatus=0}
        Temperature{mValue=52.8, mType=0, mName=CPU1, mStatus=0}
        Temperature{mValue=54.4, mType=0, mName=CPU2, mStatus=0}
        Temperature{mValue=60.1, mType=0, mName=CPU3, mStatus=0}
        Temperature{mValue=57.3, mType=0, mName=CPU4, mStatus=0}
        Temperature{mValue=60.1, mType=0, mName=CPU5, mStatus=0}
        Temperature{mValue=56.1, mType=0, mName=CPU6, mStatus=0}
        Temperature{mValue=61.3, mType=0, mName=CPU7, mStatus=0}
        Temperature{mValue=48.5, mType=1, mName=GPU0, mStatus=0}
        Temperature{mValue=47.3, mType=1, mName=GPU1, mStatus=0}
        Temperature{mValue=48.1, mType=1, mName=GPU2, mStatus=0}
        Temperature{mValue=46.9, mType=1, mName=GPU3, mStatus=0}
        Temperature{mValue=50.9, mType=1, mName=GPU4, mStatus=0}
        Temperature{mValue=48.9, mType=1, mName=GPU5, mStatus=0}
        Temperature{mValue=48.1, mType=1, mName=GPU6, mStatus=0}
        Temperature{mValue=48.5, mType=1, mName=GPU7, mStatus=0}
        Temperature{mValue=1.218, mType=7, mName=ibat, mStatus=0}
        Temperature{mValue=48.5, mType=9, mName=nsp0, mStatus=0}
        Temperature{mValue=48.1, mType=9, mName=nsp1, mStatus=0}
        Temperature{mValue=46.5, mType=9, mName=nsp2, mStatus=0}
        Temperature{mValue=46.5, mType=9, mName=nsp3, mStatus=0}
        Temperature{mValue=42.039, mType=3, mName=skin, mStatus=0}
        Temperature{mValue=0.0, mType=8, mName=socd, mStatus=0}
        Temperature{mValue=4.185, mType=6, mName=vbat, mStatus=0}
HAL Ready: true
HAL connection:
        ThermalHAL 2.0 connected: yes
Current temperatures from HAL:
        Temperature{mValue=4.434, mType=6, mName=vbat, mStatus=0}
        Temperature{mValue=28.9, mType=2, mName=battery, mStatus=0}
        Temperature{mValue=-0.187, mType=7, mName=ibat, mStatus=0}
        Temperature{mValue=30.7, mType=9, mName=nsp3, mStatus=0}
        Temperature{mValue=30.7, mType=9, mName=nsp2, mStatus=0}
        Temperature{mValue=31.1, mType=9, mName=nsp1, mStatus=0}
        Temperature{mValue=30.3, mType=9, mName=nsp0, mStatus=0}
        Temperature{mValue=30.23, mType=3, mName=skin, mStatus=0}
        Temperature{mValue=30.7, mType=1, mName=GPU6, mStatus=0}
        Temperature{mValue=30.3, mType=1, mName=GPU5, mStatus=0}
        Temperature{mValue=30.7, mType=1, mName=GPU4, mStatus=0}
        Temperature{mValue=31.0, mType=0, mName=CPU6, mStatus=0}
        Temperature{mValue=31.1, mType=1, mName=GPU1, mStatus=0}
        Temperature{mValue=30.3, mType=1, mName=GPU2, mStatus=0}
        Temperature{mValue=30.7, mType=1, mName=GPU3, mStatus=0}
        Temperature{mValue=31.8, mType=0, mName=CPU7, mStatus=0}
        Temperature{mValue=30.7, mType=1, mName=GPU0, mStatus=0}
        Temperature{mValue=31.0, mType=0, mName=CPU5, mStatus=0}
        Temperature{mValue=0.0, mType=8, mName=socd, mStatus=0}
        Temperature{mValue=31.0, mType=0, mName=CPU3, mStatus=0}
        Temperature{mValue=31.9, mType=0, mName=CPU2, mStatus=0}
        Temperature{mValue=31.5, mType=0, mName=CPU1, mStatus=0}
        Temperature{mValue=31.8, mType=0, mName=CPU4, mStatus=0}
        Temperature{mValue=30.7, mType=1, mName=GPU7, mStatus=0}
        Temperature{mValue=31.1, mType=0, mName=CPU0, mStatus=0}
Current cooling devices from HAL:
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-8}
        CoolingDevice{mValue=0, mType=2, mName=cpufreq-cpu3}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-4}
        CoolingDevice{mValue=2, mType=3, mName=gpu}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-2}
        CoolingDevice{mValue=0, mType=2, mName=cpufreq-cpu7}
        CoolingDevice{mValue=0, mType=2, mName=cpufreq-cpu0}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-40}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-10}
        CoolingDevice{mValue=0, mType=2, mName=thermal-cluster-3-7}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-80}
        CoolingDevice{mValue=0, mType=3, mName=devfreq-3d00000.qcom,kgsl-3d0}
        CoolingDevice{mValue=0, mType=2, mName=thermal-pause-20}
Temperature static thresholds from HAL:
        TemperatureThreshold{mType=6, mName=vbat, mHotThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN], mColdThrottlingThresholds=[NaN, NaN, NaN, 3.2, NaN, NaN, 3.0]}
        TemperatureThreshold{mType=2, mName=battery, mHotThrottlingThresholds=[NaN, NaN, NaN, 80.0, NaN, NaN, 90.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=7, mName=ibat, mHotThrottlingThresholds=[NaN, NaN, NaN, 9.0, NaN, NaN, 10.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=9, mName=nsp3, mHotThrottlingThresholds=[NaN, NaN, NaN, 100.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=9, mName=nsp2, mHotThrottlingThresholds=[NaN, NaN, NaN, 100.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=9, mName=nsp1, mHotThrottlingThresholds=[NaN, NaN, NaN, 100.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=9, mName=nsp0, mHotThrottlingThresholds=[NaN, NaN, NaN, 100.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=3, mName=skin, mHotThrottlingThresholds=[NaN, NaN, NaN, 46.5, NaN, NaN, 95.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU6, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU5, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU4, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU6, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU1, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU2, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU3, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU7, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU0, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU5, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=8, mName=socd, mHotThrottlingThresholds=[NaN, NaN, NaN, 90.0, NaN, NaN, 99.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU3, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU2, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU1, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU4, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=1, mName=GPU7, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}
        TemperatureThreshold{mType=0, mName=CPU0, mHotThrottlingThresholds=[NaN, NaN, NaN, 95.0, NaN, NaN, 115.0], mColdThrottlingThresholds=[NaN, NaN, NaN, NaN, NaN, NaN, NaN]}

Reference

www.reddit.com/r/Mi9T/comm…

android-review.linaro.org/plugins/git…

推荐阅读