uid_cputime: Extends the cputime functionality to report power per uid
authorRuchi Kandoi <kandoiruchi@google.com>
Fri, 17 Apr 2015 23:52:54 +0000 (16:52 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:53:52 +0000 (13:53 -0800)
/proc/uid_cputime/show_uid_stats shows a third field power for each of
the uids. It represents the power in the units (uAusec)

Change-Id: I52fdc5e59647e9dc97561a26d56f462a2689ba9c
Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
drivers/misc/uid_cputime.c

index c3f5bda9241d37649011ceeebeb9be7b5e4720c6..89bfba6c5b6aa91bb4ed63560f65fce3f4134bfc 100644 (file)
@@ -38,6 +38,8 @@ struct uid_entry {
        cputime_t stime;
        cputime_t active_utime;
        cputime_t active_stime;
+       unsigned long long active_power;
+       unsigned long long power;
        struct hlist_node hash;
 };
 
@@ -83,6 +85,7 @@ static int uid_stat_show(struct seq_file *m, void *v)
        hash_for_each(hash_table, bkt, uid_entry, hash) {
                uid_entry->active_stime = 0;
                uid_entry->active_utime = 0;
+               uid_entry->active_power = 0;
        }
 
        read_lock(&tasklist_lock);
@@ -100,6 +103,7 @@ static int uid_stat_show(struct seq_file *m, void *v)
                task_cputime_adjusted(task, &utime, &stime);
                uid_entry->active_utime += utime;
                uid_entry->active_stime += stime;
+               uid_entry->active_power += task->cpu_power;
        }
        read_unlock(&tasklist_lock);
 
@@ -108,9 +112,12 @@ static int uid_stat_show(struct seq_file *m, void *v)
                                                        uid_entry->active_utime;
                cputime_t total_stime = uid_entry->stime +
                                                        uid_entry->active_stime;
-               seq_printf(m, "%d: %u %u\n", uid_entry->uid,
+               unsigned long long total_power = uid_entry->power +
+                                                       uid_entry->active_power;
+               seq_printf(m, "%d: %u %u %llu\n", uid_entry->uid,
                                                cputime_to_usecs(total_utime),
-                                               cputime_to_usecs(total_stime));
+                                               cputime_to_usecs(total_stime),
+                                               total_power);
        }
 
        mutex_unlock(&uid_lock);
@@ -203,6 +210,7 @@ static int process_notifier(struct notifier_block *self,
        task_cputime_adjusted(task, &utime, &stime);
        uid_entry->utime += utime;
        uid_entry->stime += stime;
+       uid_entry->power += task->cpu_power;
 
 exit:
        mutex_unlock(&uid_lock);