aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2010-10-14 02:34:00 -0400
committerArjan van de Ven <arjan@linux.intel.com>2010-10-14 02:34:00 -0400
commitf5e8562ad30646887be003e57d981c760908086e (patch)
tree4bb147c2ed24e2370e57724fff88c93c2154e2ca
parent72659adfeba3f2ab54379f5707a956c38b951663 (diff)
downloadpowertop-f5e8562ad30646887be003e57d981c760908086e.tar.gz
sort better
-rw-r--r--TODO1
-rw-r--r--process/do_process.cpp13
-rw-r--r--process/powerconsumer.cpp20
-rw-r--r--process/powerconsumer.h4
4 files changed, 34 insertions, 4 deletions
diff --git a/TODO b/TODO
index fe1f006..7cfcc96 100644
--- a/TODO
+++ b/TODO
@@ -1,5 +1,6 @@
* deal with the "no measurements" case better with default values
* move the 2 data files somewhere sane
+* looks like events/sec keep adding up for processes
* have a "show me my process" page
* fix memory leaks
diff --git a/process/do_process.cpp b/process/do_process.cpp
index 4ea2111..afa4ddd 100644
--- a/process/do_process.cpp
+++ b/process/do_process.cpp
@@ -504,7 +504,18 @@ void end_process_measurement(void)
static bool power_cpu_sort(class power_consumer * i, class power_consumer * j)
{
- return (i->Witts() > j->Witts());
+ double iW, jW;
+
+ iW = i->Witts();
+ jW = j->Witts();
+
+ if (iW == jW) {
+ if (i->accumulated_runtime == j->accumulated_runtime)
+ return i->wake_ups > j->wake_ups;
+ return (i->accumulated_runtime > j->accumulated_runtime);
+ }
+
+ return (iW > jW);
}
void process_update_display(void)
diff --git a/process/powerconsumer.cpp b/process/powerconsumer.cpp
index 5ac186f..b3aa7e0 100644
--- a/process/powerconsumer.cpp
+++ b/process/powerconsumer.cpp
@@ -60,4 +60,22 @@ power_consumer::power_consumer(void)
wake_ups = 0;
gpu_ops = 0;
waker = NULL;
-} \ No newline at end of file
+}
+
+double power_consumer::usage(void)
+{
+ double t;
+ t = (accumulated_runtime - child_runtime) / 1000000.0 / measurement_time;
+ if (t < 0.1)
+ t = t * 1000;
+ return t;
+}
+
+const char * power_consumer::usage_units(void)
+{
+ double t;
+ t = (accumulated_runtime - child_runtime) / 1000000.0 / measurement_time;
+ if (t < 0.1)
+ return "usec";
+ return "msec";
+}
diff --git a/process/powerconsumer.h b/process/powerconsumer.h
index e43ac39..e2d6bca 100644
--- a/process/powerconsumer.h
+++ b/process/powerconsumer.h
@@ -54,8 +54,8 @@ public:
virtual const char * name(void) { return "abstract"; };
virtual const char * type(void) { return "abstract"; };
- virtual double usage(void) { return (accumulated_runtime - child_runtime) / 1000000.0 / measurement_time;};
- virtual const char * usage_units(void) {return "msec";};
+ virtual double usage(void);
+ virtual const char * usage_units(void);
virtual double events(void) { return (wake_ups + gpu_ops) / measurement_time;};
virtual int show_events(void) { return 1; };
};