Loading libcutils/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ cc_library { shared_libs: ["liblog"], header_libs: [ "libbase_headers", "libcutils_headers", "libutils_headers", ], Loading libcutils/include/cutils/sched_policy.h +8 −7 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ typedef enum { SP_AUDIO_SYS = 4, SP_TOP_APP = 5, SP_RT_APP = 6, SP_RESTRICTED = 7, SP_CNT, SP_MAX = SP_CNT - 1, SP_SYSTEM_DEFAULT = SP_FOREGROUND, Loading libcutils/sched_policy.cpp +16 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <string.h> #include <unistd.h> #include <android-base/macros.h> #include <log/log.h> /* Re-map SP_DEFAULT to the system default policy, and leave other values unchanged. Loading Loading @@ -57,6 +58,7 @@ static int system_bg_cpuset_fd = -1; static int bg_cpuset_fd = -1; static int fg_cpuset_fd = -1; static int ta_cpuset_fd = -1; // special cpuset for top app static int rs_cpuset_fd = -1; // special cpuset for screen off restrictions // File descriptors open to /dev/stune/../tasks, setup by initialize, or -1 on error static int bg_schedboost_fd = -1; Loading Loading @@ -151,6 +153,8 @@ static void __initialize() { system_bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); filename = "/dev/cpuset/top-app/tasks"; ta_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); filename = "/dev/cpuset/restricted/tasks"; rs_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); if (schedboost_enabled()) { filename = "/dev/stune/top-app/tasks"; Loading Loading @@ -308,6 +312,9 @@ int set_cpuset_policy(int tid, SchedPolicy policy) case SP_SYSTEM: fd = system_bg_cpuset_fd; break; case SP_RESTRICTED: fd = rs_cpuset_fd; break; default: boost_fd = fd = -1; break; Loading Loading @@ -454,20 +461,16 @@ int get_sched_policy(int /*tid*/, SchedPolicy* policy) { #endif const char *get_sched_policy_name(SchedPolicy policy) { const char* get_sched_policy_name(SchedPolicy policy) { policy = _policy(policy); static const char * const strings[SP_CNT] = { [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", [SP_SYSTEM] = " ", [SP_AUDIO_APP] = "aa", [SP_AUDIO_SYS] = "as", [SP_TOP_APP] = "ta", [SP_RT_APP] = "rt", static const char* const kSchedPolicyNames[] = { [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", [SP_SYSTEM] = " ", [SP_AUDIO_APP] = "aa", [SP_AUDIO_SYS] = "as", [SP_TOP_APP] = "ta", [SP_RT_APP] = "rt", [SP_RESTRICTED] = "rs", }; if ((policy < SP_CNT) && (strings[policy] != NULL)) return strings[policy]; else static_assert(arraysize(kSchedPolicyNames) == SP_CNT, "missing name"); if (policy < SP_BACKGROUND || policy >= SP_CNT) { return "error"; } return kSchedPolicyNames[policy]; } libcutils/tests/sched_policy_test.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -60,6 +60,12 @@ long long medianSleepTime() { return sleepTimes[median]; } static void AssertPolicy(SchedPolicy expected_policy) { SchedPolicy current_policy; ASSERT_EQ(0, get_sched_policy(0, ¤t_policy)); EXPECT_EQ(expected_policy, current_policy); } TEST(SchedPolicy, set_sched_policy) { if (!hasCapSysNice()) { GTEST_LOG_(INFO) << "skipping test that requires CAP_SYS_NICE"; Loading @@ -76,23 +82,17 @@ TEST(SchedPolicy, set_sched_policy) { const unsigned int BG_FG_SLACK_FACTOR = 100; ASSERT_EQ(0, set_sched_policy(0, SP_BACKGROUND)); AssertPolicy(SP_BACKGROUND); auto bgSleepTime = medianSleepTime(); ASSERT_EQ(0, set_sched_policy(0, SP_FOREGROUND)); AssertPolicy(SP_FOREGROUND); auto fgSleepTime = medianSleepTime(); ASSERT_GT(bgSleepTime, fgSleepTime * BG_FG_SLACK_FACTOR); } TEST(SchedPolicy, get_sched_policy) { SchedPolicy policy; ASSERT_EQ(0, get_sched_policy(0, &policy)); const char *policyName = get_sched_policy_name(policy); EXPECT_NE(nullptr, policyName); EXPECT_STRNE("error", policyName); ASSERT_EQ(0, set_sched_policy(0, SP_BACKGROUND)); SchedPolicy newPolicy; ASSERT_EQ(0, get_sched_policy(0, &newPolicy)); EXPECT_EQ(SP_BACKGROUND, newPolicy); TEST(SchedPolicy, get_sched_policy_name) { EXPECT_STREQ("bg", get_sched_policy_name(SP_BACKGROUND)); EXPECT_STREQ("error", get_sched_policy_name(SchedPolicy(-2))); EXPECT_STREQ("error", get_sched_policy_name(SP_CNT)); } Loading
libcutils/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ cc_library { shared_libs: ["liblog"], header_libs: [ "libbase_headers", "libcutils_headers", "libutils_headers", ], Loading
libcutils/include/cutils/sched_policy.h +8 −7 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ typedef enum { SP_AUDIO_SYS = 4, SP_TOP_APP = 5, SP_RT_APP = 6, SP_RESTRICTED = 7, SP_CNT, SP_MAX = SP_CNT - 1, SP_SYSTEM_DEFAULT = SP_FOREGROUND, Loading
libcutils/sched_policy.cpp +16 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <string.h> #include <unistd.h> #include <android-base/macros.h> #include <log/log.h> /* Re-map SP_DEFAULT to the system default policy, and leave other values unchanged. Loading Loading @@ -57,6 +58,7 @@ static int system_bg_cpuset_fd = -1; static int bg_cpuset_fd = -1; static int fg_cpuset_fd = -1; static int ta_cpuset_fd = -1; // special cpuset for top app static int rs_cpuset_fd = -1; // special cpuset for screen off restrictions // File descriptors open to /dev/stune/../tasks, setup by initialize, or -1 on error static int bg_schedboost_fd = -1; Loading Loading @@ -151,6 +153,8 @@ static void __initialize() { system_bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); filename = "/dev/cpuset/top-app/tasks"; ta_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); filename = "/dev/cpuset/restricted/tasks"; rs_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); if (schedboost_enabled()) { filename = "/dev/stune/top-app/tasks"; Loading Loading @@ -308,6 +312,9 @@ int set_cpuset_policy(int tid, SchedPolicy policy) case SP_SYSTEM: fd = system_bg_cpuset_fd; break; case SP_RESTRICTED: fd = rs_cpuset_fd; break; default: boost_fd = fd = -1; break; Loading Loading @@ -454,20 +461,16 @@ int get_sched_policy(int /*tid*/, SchedPolicy* policy) { #endif const char *get_sched_policy_name(SchedPolicy policy) { const char* get_sched_policy_name(SchedPolicy policy) { policy = _policy(policy); static const char * const strings[SP_CNT] = { [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", [SP_SYSTEM] = " ", [SP_AUDIO_APP] = "aa", [SP_AUDIO_SYS] = "as", [SP_TOP_APP] = "ta", [SP_RT_APP] = "rt", static const char* const kSchedPolicyNames[] = { [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", [SP_SYSTEM] = " ", [SP_AUDIO_APP] = "aa", [SP_AUDIO_SYS] = "as", [SP_TOP_APP] = "ta", [SP_RT_APP] = "rt", [SP_RESTRICTED] = "rs", }; if ((policy < SP_CNT) && (strings[policy] != NULL)) return strings[policy]; else static_assert(arraysize(kSchedPolicyNames) == SP_CNT, "missing name"); if (policy < SP_BACKGROUND || policy >= SP_CNT) { return "error"; } return kSchedPolicyNames[policy]; }
libcutils/tests/sched_policy_test.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -60,6 +60,12 @@ long long medianSleepTime() { return sleepTimes[median]; } static void AssertPolicy(SchedPolicy expected_policy) { SchedPolicy current_policy; ASSERT_EQ(0, get_sched_policy(0, ¤t_policy)); EXPECT_EQ(expected_policy, current_policy); } TEST(SchedPolicy, set_sched_policy) { if (!hasCapSysNice()) { GTEST_LOG_(INFO) << "skipping test that requires CAP_SYS_NICE"; Loading @@ -76,23 +82,17 @@ TEST(SchedPolicy, set_sched_policy) { const unsigned int BG_FG_SLACK_FACTOR = 100; ASSERT_EQ(0, set_sched_policy(0, SP_BACKGROUND)); AssertPolicy(SP_BACKGROUND); auto bgSleepTime = medianSleepTime(); ASSERT_EQ(0, set_sched_policy(0, SP_FOREGROUND)); AssertPolicy(SP_FOREGROUND); auto fgSleepTime = medianSleepTime(); ASSERT_GT(bgSleepTime, fgSleepTime * BG_FG_SLACK_FACTOR); } TEST(SchedPolicy, get_sched_policy) { SchedPolicy policy; ASSERT_EQ(0, get_sched_policy(0, &policy)); const char *policyName = get_sched_policy_name(policy); EXPECT_NE(nullptr, policyName); EXPECT_STRNE("error", policyName); ASSERT_EQ(0, set_sched_policy(0, SP_BACKGROUND)); SchedPolicy newPolicy; ASSERT_EQ(0, get_sched_policy(0, &newPolicy)); EXPECT_EQ(SP_BACKGROUND, newPolicy); TEST(SchedPolicy, get_sched_policy_name) { EXPECT_STREQ("bg", get_sched_policy_name(SP_BACKGROUND)); EXPECT_STREQ("error", get_sched_policy_name(SchedPolicy(-2))); EXPECT_STREQ("error", get_sched_policy_name(SP_CNT)); }