On Mon, Aug 26, 2024 at 6:45 PM T.J. Mercier <tjmerc...@google.com> wrote:
>
> On Mon, Aug 26, 2024 at 3:01 PM enh <e...@google.com> wrote:
> >
> > On Mon, Aug 26, 2024 at 11:14 AM T.J. Mercier <tjmerc...@google.com> wrote:
> > >
> > > On Fri, Aug 23, 2024 at 3:52 PM enh <e...@google.com> wrote:
> > > >
> > > > This dependency keeps getting hairier and hairier (json!) and the
> > > > current system for policy scheduling is actually quite different from
> > > > the original anyway.
> > > > ---
> > > >  lib/portability.h | 14 --------------
> > > >  toys/posix/ps.c   | 33 ++++++++++++++++++++++++++++-----
> > > >  2 files changed, 28 insertions(+), 19 deletions(-)
> > >
> > > Hi,
> > >
> > > I assume this mailing list is supposed to be Content-Type: text/plain?
> >
> > (i don't think anybody cares that much.)
> >
> > > > +          else if (!strcmp(s, "system-background")) strcpy(tb->pcy, "  
> > > > ");
> > >
> > > Is this empty for compatibility with the existing output?
> >
> > correct. i kind of hate that there's a field that _deliberately_ isn't
> > parseable, but if our current argument is "we shouldn't just _remove_
> > this because someone's probably using it for something", it makes
> > sense to have the same output.
> >
> > > system_server is a "fun" case but I think this new toybox code should
> > > still report the same info. It has threads in different cgroups (all
> > > under the same pid of course):
> > > husky:/dev/cpuset/system-background # cat cgroup.procs | xargs ps -o
> > > pid,pcy,comm,cmd
> > >   PID PCY COMM                        CMD
> > >   492     logd                        logd
> > >   493     lmkd                        lmkd
> > >   503     hwservicemanager            hwservicemanage
> > >   504     vndservicemanager           vndservicemanag
> > >   574     android.hardware.composer.+ binder:574_3
> > >   727     tombstoned                  tombstoned
> > >   976     android.hardware.sensors-s+ binder:976_3
> > >   985  fg app_process64               system_server
> > >  1475     storaged                    storaged
> > >  1483     dmd                         dmd
> > >  1581     gatekeeperd                 gatekeeperd
> > >  1637     logcat                      logcat
> > >
> > > husky:/dev/cpuset/system-background # cat /proc/985/cgroup
> > > 3:cpuset:/foreground
> > > 2:cpu:/
> > > 1:blkio:/
> > > 0::/uid_1000/pid_985
> > >
> > > husky:/ # grep cpuset /proc/`pidof system_server`/task/*/cgroup
> > > /proc/985/task/1028/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1029/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1031/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1032/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1033/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1034/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1035/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1036/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1037/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1038/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1049/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1050/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1051/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1052/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1053/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1054/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1055/cgroup:3:cpuset:/top-app
> > > /proc/985/task/1056/cgroup:3:cpuset:/top-app
> > > /proc/985/task/1057/cgroup:3:cpuset:/top-app
> > > /proc/985/task/1058/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1074/cgroup:3:cpuset:/system-background
> > > /proc/985/task/1075/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1083/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1084/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1089/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1090/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1092/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1094/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1095/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1096/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1097/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1101/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1104/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1106/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1107/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1108/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1109/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1110/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1111/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1112/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1113/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1114/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1115/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1117/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1124/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1126/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1127/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1131/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1615/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1617/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1621/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1659/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1660/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1661/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1662/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1663/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1664/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1665/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1668/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1669/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1672/cgroup:3:cpuset:/system-background
> > > /proc/985/task/1673/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1674/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1675/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1676/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1677/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1678/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1854/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1855/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1859/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1860/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1871/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1872/cgroup:3:cpuset:/top-app
> > > /proc/985/task/1873/cgroup:3:cpuset:/top-app
> > > /proc/985/task/1883/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1886/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1887/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1888/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1889/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1890/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1897/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1898/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1900/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1905/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1906/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1911/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1913/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1922/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1930/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1933/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1941/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1959/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1964/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1966/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1967/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1968/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1969/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1971/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1972/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1978/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1979/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1980/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1981/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1984/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1985/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1986/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1989/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1990/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1991/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1992/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1993/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1994/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1997/cgroup:3:cpuset:/foreground
> > > /proc/985/task/1998/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2000/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2001/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2002/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2003/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2005/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2006/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2007/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2010/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2011/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2012/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2013/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2014/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2015/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2018/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2019/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2020/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2021/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2024/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2025/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2026/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2028/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2029/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2030/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2031/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2033/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2038/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2039/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2041/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2042/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2045/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2046/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2047/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2048/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2050/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2051/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2052/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2053/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2054/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2056/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2060/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2062/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2066/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2069/cgroup:3:cpuset:/system-background
> > > /proc/985/task/2075/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2076/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2077/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2078/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2082/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2086/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2089/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2113/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2126/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2127/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2173/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2183/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2211/cgroup:3:cpuset:/system-background
> > > /proc/985/task/2232/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2247/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2248/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2414/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2417/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2419/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2421/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2422/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2423/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2425/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2426/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2428/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2471/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2527/cgroup:3:cpuset:/top-app
> > > /proc/985/task/2563/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2565/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2567/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2568/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2569/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2571/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2799/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2856/cgroup:3:cpuset:/top-app
> > > /proc/985/task/2860/cgroup:3:cpuset:/top-app
> > > /proc/985/task/2864/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2865/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2882/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2883/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2884/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2885/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2886/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2887/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2888/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2889/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2890/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2905/cgroup:3:cpuset:/foreground
> > > /proc/985/task/2989/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3013/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3018/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3020/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3022/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3063/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3071/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3112/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3113/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3116/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3200/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3220/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3223/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3224/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3225/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3226/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3229/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3230/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3280/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3293/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3294/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3649/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3708/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3737/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3835/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3836/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3840/cgroup:3:cpuset:/foreground
> > > /proc/985/task/3841/cgroup:3:cpuset:/foreground
> > > /proc/985/task/4828/cgroup:3:cpuset:/foreground
> > > /proc/985/task/4838/cgroup:3:cpuset:/foreground
> > > /proc/985/task/4977/cgroup:3:cpuset:/foreground
> > > /proc/985/task/5188/cgroup:3:cpuset:/foreground
> > > /proc/985/task/5765/cgroup:3:cpuset:/foreground
> > > /proc/985/task/5988/cgroup:3:cpuset:/foreground
> > > /proc/985/task/5998/cgroup:3:cpuset:/foreground
> > > /proc/985/task/7793/cgroup:3:cpuset:/foreground
> > > /proc/985/task/7995/cgroup:3:cpuset:/foreground
> > > /proc/985/task/985/cgroup:3:cpuset:/foreground
> > >
> > >
> > > > +        if ((s = strstr(line, ":cpuset:/"))) {
> > >
> > > So this ignores the old schedtune case from get_sched_policy, however
> > > I think that's ok because schedtune is an out of tree driver only in
> > > Android 4.19 kernels which are EOL in 4 months at the end of this
> > > December.
> >
> > (i have no idea what any of this means. i didn't do anything about
> > "schedtune" because you didn't tell me anything about "schedtune" :-)
> > )
>
> Don't do anything about schedtune. :)
>
> > > > +          else if (!strcmp(s, "foreground-window")) strcpy(tb->pcy, 
> > > > "wi");
> > >
> > > I think this should be "foreground_window". Underscore instead of
> > > hyphen for that one. Maybe we should fix that one on our side since
> > > it's unlike all the others, and not actually in use yet.
> >
> > oops, yeah. i should have copy & pasted rather than just having the
> > other code open in another window.
> >
> > new patch attached.
> >
> > > > else strcpy(tb->pcy, "?");
> > >
> > > Should this be two ?s to maintain the column width?
> >
> > there's a %2s where these actually come out. my only concern was that
> > the "-" ("missing") case was distinct from the "?" ("unknown") case.
>
> Ah right.
>
> > > This solution will work as long as Android continues to use cpuset v1.
> > > A v2 upgrade should happen at some point, but it's not clear when.
> > > New policy names and abbreviations will have to be manually synced
> > > with this if any are added (which should be rare):
> > > https://cs.android.com/android/platform/superproject/main/+/main:system/core/rootdir/init.rc;l=360?q=mkdir.*%2Fdev%2Fcpuset
> >
> > long term i think we should try to work out how to get away from the
> > two-letter nonsense. but that's a problem for another year. right now
> > i just want to get away from these dependencies without regression
> > (which should make rob happy too, since he always wants to build with
> > the NDK rather than as part of the OS).
>
> Ok, SGTM. This looks good, except I think you resent patch 0001.

d'oh! forgot the `git add`, didn't get any kind of "nothing's changed"
warning :-(

attached is the updated version (assuming rob didn't just manually fix
that one character rather than wait for me to bash my head against git
:-) )...
From 3df6db66dc6751f4905587045851fb30d57c45bb Mon Sep 17 00:00:00 2001
From: Elliott Hughes <e...@google.com>
Date: Fri, 23 Aug 2024 18:50:27 -0400
Subject: [PATCH] ps: drop dependency on Android's libprocessgroup.

This dependency keeps getting hairier and hairier (json!) and the
current system for policy scheduling is actually quite different from
the original anyway.
---
 lib/portability.h | 14 --------------
 toys/posix/ps.c   | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/lib/portability.h b/lib/portability.h
index cb4725b8..0b9e282f 100644
--- a/lib/portability.h
+++ b/lib/portability.h
@@ -343,20 +343,6 @@ static inline int stub_out_log_write(int pri, const char *tag, const char *msg)
 
 #endif
 
-// libprocessgroup is an Android platform library not included in the NDK.
-#if defined(__BIONIC__)
-#if __has_include(<processgroup/sched_policy.h>)
-#include <processgroup/sched_policy.h>
-#define GOT_IT
-#endif
-#endif
-#ifdef GOT_IT
-#undef GOT_IT
-#else
-static inline int get_sched_policy(int tid, void *policy) {return 0;}
-static inline char *get_sched_policy_name(int policy) {return "unknown";}
-#endif
-
 #ifndef SYSLOG_NAMES
 typedef struct {char *c_name; int c_val;} CODE;
 extern CODE prioritynames[], facilitynames[];
diff --git a/toys/posix/ps.c b/toys/posix/ps.c
index f1e1d159..0e95c9eb 100644
--- a/toys/posix/ps.c
+++ b/toys/posix/ps.c
@@ -287,6 +287,7 @@ struct procpid {
   long long slot[SLOT_count]; // data (see enum above)
   unsigned short offset[6];   // offset of fields in str[] (skip CMD, always 0)
   char state;
+  char pcy[3];                // Android scheduling policy
   char str[];                 // CMD, TTY, WCHAN, LABEL, COMM, ARGS, NAME
 };
 
@@ -632,7 +633,7 @@ static char *string_field(struct procpid *tb, struct ofields *field)
     out = out+strlen(out)-3-abs(field->len);
     if (out<buf) out = buf;
 
-  } else if (which==PS_PCY) sprintf(out, "%.2s", get_sched_policy_name(ll));
+  } else if (which==PS_PCY) sprintf(out, "%.2s", tb->pcy);
   else if (CFG_TOYBOX_DEBUG) error_exit("bad which %d", which);
 
   return out;
@@ -721,6 +722,7 @@ static int get_ps(struct dirtree *new)
   struct procpid *tb = (void *)toybuf;
   long long *slot = tb->slot;
   char *name, *s, *buf = tb->str, *end = 0;
+  FILE *fp;
   struct sysinfo si;
   int i, j, fd;
   off_t len;
@@ -852,8 +854,30 @@ static int get_ps(struct dirtree *new)
   }
 
   // Do we need Android scheduling policy?
-  if (TT.bits&_PS_PCY)
-    get_sched_policy(slot[SLOT_tid], (void *)&slot[SLOT_pcy]);
+  if (TT.bits&_PS_PCY) {
+    // Find the cpuset line in "/proc/$pid/cgroup", extract the final field,
+    // and translate it to one of Android's traditional 2-char names.
+    // TODO: if other Linux systems start using cgroups, conditionalize this.
+    sprintf(buf, "/proc/%lld/cgroup", slot[SLOT_tid]);
+    if ((fp = fopen(buf, "re"))) {
+      char *s, *line;
+      while ((line = xgetline(fp))) {
+        if ((s = strstr(line, ":cpuset:/"))) {
+          s += strlen(":cpuset:/");
+          if (!*s || !strcmp(s, "foreground")) strcpy(tb->pcy, "fg");
+          else if (!strcmp(s, "system-background")) strcpy(tb->pcy, "  ");
+          else if (!strcmp(s, "background")) strcpy(tb->pcy, "bg");
+          else if (!strcmp(s, "top-app")) strcpy(tb->pcy, "ta");
+          else if (!strcmp(s, "restricted")) strcpy(tb->pcy, "rs");
+          else if (!strcmp(s, "foreground_window")) strcpy(tb->pcy, "wi");
+          else if (!strcmp(s, "camera-daemon")) strcpy(tb->pcy, "cd");
+          else strcpy(tb->pcy, "?");
+        }
+        free(line);
+      }
+      fclose(fp);
+    } else strcpy(tb->pcy, "-");
+  }
 
   // Done using buf[] (tb->str) as scratch space, now read string data,
   // saving consective null terminated strings. (Save starting offsets into
@@ -929,10 +953,9 @@ static int get_ps(struct dirtree *new)
 
         // Couldn't find it, try all the tty drivers.
         if (i == 3) {
-          FILE *fp = fopen("/proc/tty/drivers", "r");
           int tty_major = 0, maj = dev_major(rdev), min = dev_minor(rdev);
 
-          if (fp) {
+          if ((fp = fopen("/proc/tty/drivers", "r"))) {
             while (fscanf(fp, "%*s %256s %d %*s %*s", buf, &tty_major) == 2) {
               // TODO: we could parse the minor range too.
               if (tty_major == maj) {
-- 
2.46.0.295.g3b9ea8a38a-goog

_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to