diff options
author | Eugeni Dodonov <eugeni.dodonov@intel.com> | 2011-11-04 19:25:00 -0200 |
---|---|---|
committer | Eugeni Dodonov <eugeni.dodonov@intel.com> | 2011-11-09 11:44:31 -0200 |
commit | a5a0a52bfde59379b624563c81198a855888e8ba (patch) | |
tree | ba178f52b9b0b3ff398aea7db63f8bbfd20f98a8 | |
parent | 155770eb603567f8d4d21a6df064c507d1d2b492 (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.c | 14 |
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 |