summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni.dodonov@intel.com>2011-11-04 19:25:00 -0200
committerEugeni Dodonov <eugeni.dodonov@intel.com>2011-11-09 11:44:31 -0200
commita5a0a52bfde59379b624563c81198a855888e8ba (patch)
treeba178f52b9b0b3ff398aea7db63f8bbfd20f98a8
parent155770eb603567f8d4d21a6df064c507d1d2b492 (diff)
intel_gpu_top: Calculate power in Watts
Calculate proper power value in vatts. As phisics books tell us, Watts = power rate * current voltage Therefore, we get the accurate results from the acpi battery information, and combine them into nice power usage values. Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
-rw-r--r--tools/intel_gpu_top.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
index b656328..ffcd42f 100644
--- a/tools/intel_gpu_top.c
+++ b/tools/intel_gpu_top.c
@@ -135,6 +135,8 @@ struct proc_cpudata
struct powerdata
{
long rate;
+ long voltage;
+ float watts;
};
static void
@@ -173,6 +175,8 @@ get_power_stat(struct powerdata *power, const char *battery_file)
if (!file) {
/* Unable to read battery information */
power->rate=-1;
+ power->voltage=-1;
+ power->watts=-1;
return;
}
/* Sample /proc/acpi/battery/BAT?/state file format:
@@ -188,12 +192,16 @@ get_power_stat(struct powerdata *power, const char *battery_file)
fgets(line, 255, file);
fgets(line, 255, file);
sscanf(line, "present rate:\t%lu mAh\n", &power->rate);
+ fgets(line, 255, file);
+ fgets(line, 255, file);
+ sscanf(line, "present voltage:\t%lu mV\n", &power->voltage);
fclose(file);
+ power->watts = (float) (power->rate * power->voltage) / 1000000;
}
static void linux_print_header(FILE *out)
{
- fprintf(out, "user%%\tsys%%\tpower\t");
+ fprintf(out, "user%%\tsys%%\tpower(W)\t");
}
static void linux_print(FILE *out, struct cpudata *cpu, struct cpudata *oldcpu,
@@ -202,8 +210,8 @@ static void linux_print(FILE *out, struct cpudata *cpu, struct cpudata *oldcpu,
float uload, sload;
uload = (float) ((cpu->user - oldcpu->user) * 100) / (cpu->total - oldcpu->total);
sload = (float) ((cpu->system - oldcpu->system) * 100) / (cpu->total - oldcpu->total);
- fprintf(out, "%.2f\t%.2f\t%ld\t",
- uload, sload, power->rate);
+ fprintf(out, "%.2f\t%.2f\t%.2f\t",
+ uload, sload, power->watts);
}
#endif