CPU Info overlay update

Change-Id: I8061df3d6657d152807cda01b65bb68ab44229ef
Signed-off-by: MOVZX <movzx@yahoo.com>
This commit is contained in:
2026-01-10 22:12:24 +07:00
parent 7ae2fee6e1
commit 7191b3a83c
2 changed files with 114 additions and 22 deletions

View File

@@ -19,6 +19,10 @@
<string name="config_cpuTempSensor" translatable="false">/sys/class/thermal/thermal_zone0/temp</string>
<string name="config_gpuTempSensor" translatable="false">/sys/class/kgsl/kgsl-3d0/temp</string>
<string name="config_batteryTempSensor" translatable="false">/sys/class/power_supply/battery/temp</string>
<string name="config_batteryVoltage" translatable="false">/sys/class/power_supply/battery/voltage_now</string>
<string name="config_batteryCurrent" translatable="false">/sys/class/power_supply/battery/current_now</string>
<string name="config_usbVoltage" translatable="false">/sys/class/power_supply/usb/voltage_now</string>
<string name="config_usbCurrent" translatable="false">/sys/class/power_supply/usb/current_now</string>
<!-- The CPU temperature divider, if needed -->
<integer name="config_cpuTempDivider" translatable="false">1</integer>

View File

@@ -53,9 +53,14 @@ public class CPUInfoService extends Service {
private int CPU_TEMP_DIVIDER = 1;
private int BATTERY_TEMP_DIVIDER = 10;
private int CURRENT_INFO_DIVIDER = 1000;
private String CPU_TEMP_SENSOR = "";
private String GPU_TEMP_SENSOR = "";
private String BATTERY_TEMP_SENSOR = "";
private String BATTERY_VOLTAGE_SENSOR = "";
private String BATTERY_CURRENT_SENSOR = "";
private String USB_VOLTAGE_SENSOR = "";
private String USB_CURRENT_SENSOR = "";
private String FPS_SENSOR = "";
private String DISPLAY_CPUS = "";
private boolean mCpuTempAvail;
@@ -83,6 +88,10 @@ public class CPUInfoService extends Service {
private String mCpuTemp;
private String mGpuTemp;
private String mBatTemp;
private String mBatVoltage;
private String mBatCurrent;
private String mUsbVoltage;
private String mUsbCurrent;
private String mGpuFreq;
private String mGpuLoad;
@@ -101,10 +110,14 @@ public class CPUInfoService extends Service {
mCpuTemp = parts[1];
mGpuTemp = parts[2];
mBatTemp = parts[3];
mGpuFreq = parts[4];
mGpuLoad = parts[5];
mBatVoltage = parts[4];
mBatCurrent = parts[5];
mUsbVoltage = parts[6];
mUsbCurrent = parts[7];
mGpuFreq = parts[8];
mGpuLoad = parts[9];
String[] cpuParts=parts[6].split("\\|");
String[] cpuParts=parts[10].split("\\|");
for(int i=0; i<cpuParts.length; i++){
String cpuInfo=cpuParts[i];
String cpuInfoParts[]=cpuInfo.split(":");
@@ -134,7 +147,7 @@ public class CPUInfoService extends Service {
setPadding(paddingPx, paddingPx, paddingPx, paddingPx);
setBackgroundColor(Color.argb(0x60, 0, 0, 0));
final int textSize = Math.round(10 * density);
final int textSize = Math.round(8 * density);
Typeface typeface = Typeface.create("monospace", Typeface.NORMAL);
@@ -143,7 +156,7 @@ public class CPUInfoService extends Service {
mOnlinePaint.setAntiAlias(true);
mOnlinePaint.setTextSize(textSize);
mOnlinePaint.setColor(Color.WHITE);
mOnlinePaint.setShadowLayer(5.0f, 0.0f, 0.0f, Color.BLACK);
mOnlinePaint.setShadowLayer(25.0f, 0.0f, 0.0f, Color.BLACK);
mOfflinePaint = new Paint();
mOfflinePaint.setTypeface(typeface);
@@ -179,7 +192,7 @@ public class CPUInfoService extends Service {
}
private String getCPUInfoString(int i) {
return "Core " + mCpu[i] + ": " + String.format("%3s", mCurrLoad[i]) + " " + mCurrGov[i] + " " + String.format("%8s", toMHz(mCurrFreq[i]));
return "CPU" + mCpu[i] + ": " + String.format("%3s", mCurrLoad[i]) + " " + mCurrGov[i] + " " + String.format("%8s", toMHz(mCurrFreq[i]));
}
private String getTemp(String rawTemp) {
@@ -202,6 +215,37 @@ public class CPUInfoService extends Service {
}
}
private String formatVoltage(String rawVoltage) {
try {
float voltage = Float.parseFloat(rawVoltage);
voltage = voltage / 1000000.0f;
return String.format("%.2fV", voltage);
} catch (NumberFormatException e) {
return "0.00V";
}
}
private String formatCurrent(String rawCurrent) {
try {
float current = Float.parseFloat(rawCurrent);
current = Math.abs(current / 1000000.0f);
return String.format("%.2fA", current);
} catch (NumberFormatException e) {
return "0.00A";
}
}
private String calculatePower(String rawVoltage, String rawCurrent) {
try {
float voltage = Float.parseFloat(rawVoltage) / 1000000.0f;
float current = Math.abs(Float.parseFloat(rawCurrent) / 1000000.0f);
float power = voltage * current;
return String.format("%.2fW", power);
} catch (NumberFormatException e) {
return "0.00W";
}
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
@@ -219,19 +263,25 @@ public class CPUInfoService extends Service {
}
if(!mCpuTemp.equals("0")) {
canvas.drawText("CPU: " + getTemp(mCpuTemp) + " °C",
RIGHT-mPaddingRight-mMaxWidth, y-1, mOnlinePaint);
y += mFH;
}
if(!mGpuTemp.equals("0")) {
canvas.drawText("GPU: " + getTemp(mGpuTemp) + " °C",
canvas.drawText("CPU: " + getTemp(mCpuTemp) + "°C",
RIGHT-mPaddingRight-mMaxWidth, y-1, mOnlinePaint);
y += mFH;
}
if(!mBatTemp.equals("0")) {
canvas.drawText("BAT: " + getTemp(mBatTemp, BATTERY_TEMP_DIVIDER) + " °C",
String batVoltage = formatVoltage(mBatVoltage);
String batCurrent = formatCurrent(mBatCurrent);
String batPower = calculatePower(mBatVoltage, mBatCurrent);
canvas.drawText("BAT: " + getTemp(mBatTemp, BATTERY_TEMP_DIVIDER) + "°C " + batVoltage + " " + batCurrent + " " + batPower,
RIGHT-mPaddingRight-mMaxWidth, y-1, mOnlinePaint);
y += mFH;
}
if(!mUsbVoltage.equals("0") || !mUsbCurrent.equals("0")) {
String usbVoltage = formatVoltage(mUsbVoltage);
String usbCurrent = formatCurrent(mUsbCurrent);
String usbPower = calculatePower(mUsbVoltage, mUsbCurrent);
canvas.drawText("USB: " + usbVoltage + " " + usbCurrent + " " + usbPower,
RIGHT-mPaddingRight-mMaxWidth, y-1, mOnlinePaint);
y += mFH;
}
@@ -242,14 +292,19 @@ public class CPUInfoService extends Service {
canvas.drawText(s, RIGHT-mPaddingRight-mMaxWidth,
y-1, mOnlinePaint);
} else {
canvas.drawText("Core " + mCpu[i] + ": offline", RIGHT-mPaddingRight-mMaxWidth,
canvas.drawText("CPU" + mCpu[i] + ": offline", RIGHT-mPaddingRight-mMaxWidth,
y-1, mOfflinePaint);
}
y += mFH;
}
if(!mGpuFreq.equals("0") || !mGpuLoad.equals("0%")) {
String gpuStats = "GPU: " + mGpuLoad + " " + mGpuFreq + " MHz";
String gpuStats;
if(!mGpuTemp.equals("0")) {
gpuStats = "GPU0: " + mGpuLoad + " " + mGpuFreq + " MHz " + getTemp(mGpuTemp) + "°C";
} else {
gpuStats = "GPU0: " + mGpuLoad + " " + mGpuFreq + " MHz";
}
canvas.drawText(gpuStats, RIGHT-mPaddingRight-mMaxWidth, y-1, mOnlinePaint);
y += mFH;
}
@@ -263,22 +318,38 @@ public class CPUInfoService extends Service {
int maxW = 0;
if(mFpsAvail) maxW = Math.max(maxW, (int)mOnlinePaint.measureText("FPS: " + mFps));
if(!mCpuTemp.equals("0")) maxW = Math.max(maxW, (int)mOnlinePaint.measureText("CPU: " + getTemp(mCpuTemp) + " °C"));
if(!mGpuTemp.equals("0")) maxW = Math.max(maxW, (int)mOnlinePaint.measureText("GPU: " + getTemp(mGpuTemp) + " °C"));
if(!mBatTemp.equals("0")) maxW = Math.max(maxW, (int)mOnlinePaint.measureText("BAT: " + getTemp(mBatTemp, BATTERY_TEMP_DIVIDER) + " °C"));
if(!mCpuTemp.equals("0")) maxW = Math.max(maxW, (int)mOnlinePaint.measureText("CPU: " + getTemp(mCpuTemp) + "°C"));
if(!mBatTemp.equals("0")) {
String batVoltage = formatVoltage(mBatVoltage);
String batCurrent = formatCurrent(mBatCurrent);
String batPower = calculatePower(mBatVoltage, mBatCurrent);
maxW = Math.max(maxW, (int)mOnlinePaint.measureText("BAT: " + getTemp(mBatTemp, BATTERY_TEMP_DIVIDER) + "°C " + batVoltage + " " + batCurrent + " " + batPower));
}
if(!mUsbVoltage.equals("0") || !mUsbCurrent.equals("0")) {
String usbVoltage = formatVoltage(mUsbVoltage);
String usbCurrent = formatCurrent(mUsbCurrent);
String usbPower = calculatePower(mUsbVoltage, mUsbCurrent);
maxW = Math.max(maxW, (int)mOnlinePaint.measureText("USB: " + usbVoltage + " " + usbCurrent + " " + usbPower));
}
for(int i=0; i<mCurrFreq.length; i++){
String s = getCPUInfoString(i);
maxW = Math.max(maxW, (int)mOnlinePaint.measureText(s));
}
String gpuStats = "GPU: " + mGpuLoad + " " + mGpuFreq + " MHz";
String gpuStats;
if(!mGpuTemp.equals("0")) {
gpuStats = "GPU0: " + mGpuLoad + " " + mGpuFreq + " MHz " + getTemp(mGpuTemp) + "°C";
} else {
gpuStats = "GPU0: " + mGpuLoad + " " + mGpuFreq + " MHz";
}
maxW = Math.max(maxW, (int)mOnlinePaint.measureText(gpuStats));
mMaxWidth = maxW;
int neededWidth = mPaddingLeft + mPaddingRight + mMaxWidth;
int numTempLines = (mFpsAvail?1:0) + (mCpuTempAvail?1:0) + (mGpuTempAvail?1:0) + (mBatTempAvail?1:0);
int numTempLines = (mFpsAvail?1:0) + (mCpuTempAvail?1:0) + (mBatTempAvail?1:0) +
((!mUsbVoltage.equals("0") || !mUsbCurrent.equals("0"))?1:0);
int neededHeight = mPaddingTop + mPaddingBottom + (mFH * (numTempLines + NW + 1));
if (neededWidth != mNeededWidth || neededHeight != mNeededHeight) {
mNeededWidth = neededWidth;
@@ -323,7 +394,7 @@ public class CPUInfoService extends Service {
public void run() {
try {
while (!mInterrupt) {
sleep(500);
sleep(1000);
StringBuffer sb=new StringBuffer();
String fpsVal = "0.0";
@@ -355,6 +426,18 @@ public class CPUInfoService extends Service {
String batTemp = CPUInfoService.readOneLine(BATTERY_TEMP_SENSOR);
sb.append(batTemp == null ? "0" : batTemp).append(";");
String batVoltage = CPUInfoService.readOneLine(BATTERY_VOLTAGE_SENSOR);
sb.append(batVoltage == null ? "0" : batVoltage).append(";");
String batCurrent = CPUInfoService.readOneLine(BATTERY_CURRENT_SENSOR);
sb.append(batCurrent == null ? "0" : batCurrent).append(";");
String usbVoltage = CPUInfoService.readOneLine(USB_VOLTAGE_SENSOR);
sb.append(usbVoltage == null ? "0" : usbVoltage).append(";");
String usbCurrent = CPUInfoService.readOneLine(USB_CURRENT_SENSOR);
sb.append(usbCurrent == null ? "0" : usbCurrent).append(";");
String gpuFreq = CPUInfoService.readOneLine(GPU_FREQ_PATH);
sb.append(gpuFreq == null ? "0" : gpuFreq).append(";");
@@ -436,9 +519,14 @@ public class CPUInfoService extends Service {
super.onCreate();
CPU_TEMP_DIVIDER = getResources().getInteger(R.integer.config_cpuTempDivider);
CURRENT_INFO_DIVIDER = getResources().getInteger(R.integer.config_currentInfoDivider);
DISPLAY_CPUS = getResources().getString(R.string.config_displayCpus);
FPS_SENSOR = getResources().getString(R.string.config_fpsInfoSysNode);
BATTERY_TEMP_SENSOR = getResources().getString(R.string.config_batteryTempSensor);
BATTERY_VOLTAGE_SENSOR = getResources().getString(R.string.config_batteryVoltage);
BATTERY_CURRENT_SENSOR = getResources().getString(R.string.config_batteryCurrent);
USB_VOLTAGE_SENSOR = getResources().getString(R.string.config_usbVoltage);
USB_CURRENT_SENSOR = getResources().getString(R.string.config_usbCurrent);
GPU_TEMP_SENSOR = getResources().getString(R.string.config_gpuTempSensor);
CPU_TEMP_SENSOR = getResources().getString(R.string.config_cpuTempSensor);