libcutils: Move sched_policy functions into libprocessgroup

Move functions operating on cgroups from sched_policy.h in libcutils
into sched_policy_ctrl.h under libprocessgroup. This consolidates
cgroup-related functionality inside libprocessgroup.

Bug: 111307099
Test: builds, boots

Change-Id: Iba75f33281162b889989214d0325a5973d53ed2d
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
Suren Baghdasaryan 2018-12-21 11:34:23 -08:00
parent 9644a837ae
commit d17e357fa1
6 changed files with 121 additions and 65 deletions

View file

@ -66,7 +66,6 @@ cc_library {
"load_file.cpp",
"native_handle.cpp",
"record_stream.cpp",
"sched_policy.cpp",
"sockets.cpp",
"strdup16to8.cpp",
"strdup8to16.cpp",
@ -178,8 +177,12 @@ cc_library {
"libbase_headers",
"libcutils_headers",
"libutils_headers",
"libprocessgroup_headers",
],
export_header_lib_headers: [
"libcutils_headers",
"libprocessgroup_headers",
],
export_header_lib_headers: ["libcutils_headers"],
local_include_dirs: ["include"],
cflags: [

View file

@ -17,67 +17,10 @@
#ifndef __CUTILS_SCHED_POLICY_H
#define __CUTILS_SCHED_POLICY_H
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Check if Linux kernel enables CPUSETS feature.
*
* Return value: 1 if Linux kernel CONFIG_CPUSETS=y; 0 otherwise.
* For backwards compatibility only
* New users should include processgroup/sched_policy.h directly
*/
extern bool cpusets_enabled();
/*
* Check if Linux kernel enables SCHEDTUNE feature (only available in Android
* common kernel or Linaro LSK, not in mainline Linux as of v4.9)
*
* Return value: 1 if Linux kernel CONFIG_CGROUP_SCHEDTUNE=y; 0 otherwise.
*/
extern bool schedboost_enabled();
/* Keep in sync with THREAD_GROUP_* in frameworks/base/core/java/android/os/Process.java */
typedef enum {
SP_DEFAULT = -1,
SP_BACKGROUND = 0,
SP_FOREGROUND = 1,
SP_SYSTEM = 2, // can't be used with set_sched_policy()
SP_AUDIO_APP = 3,
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,
} SchedPolicy;
extern int set_cpuset_policy(int tid, SchedPolicy policy);
/* Assign thread tid to the cgroup associated with the specified policy.
* If the thread is a thread group leader, that is it's gettid() == getpid(),
* then the other threads in the same thread group are _not_ affected.
* On platforms which support gettid(), zero tid means current thread.
* Return value: 0 for success, or -errno for error.
*/
extern int set_sched_policy(int tid, SchedPolicy policy);
/* Return the policy associated with the cgroup of thread tid via policy pointer.
* On platforms which support gettid(), zero tid means current thread.
* Return value: 0 for success, or -1 for error and set errno.
*/
extern int get_sched_policy(int tid, SchedPolicy *policy);
/* Return a displayable string corresponding to policy.
* Return value: non-NULL NUL-terminated name of unspecified length;
* the caller is responsible for displaying the useful part of the string.
*/
extern const char *get_sched_policy_name(SchedPolicy policy);
#ifdef __cplusplus
}
#endif
#include <processgroup/sched_policy.h>
#endif /* __CUTILS_SCHED_POLICY_H */

View file

@ -59,6 +59,7 @@ test_libraries = [
"libcutils",
"liblog",
"libbase",
"libprocessgroup",
]
cc_test {

View file

@ -1,13 +1,42 @@
cc_library_headers {
name: "libprocessgroup_headers",
vendor_available: true,
recovery_available: true,
host_supported: true,
export_include_dirs: ["include"],
target: {
linux_bionic: {
enabled: true,
},
windows: {
enabled: true,
},
},
}
cc_library {
srcs: ["processgroup.cpp"],
srcs: [
"processgroup.cpp",
"sched_policy.cpp",
],
name: "libprocessgroup",
host_supported: true,
recovery_available: true,
vendor_available: true,
vndk: {
enabled: true,
support_system_process: true,
},
shared_libs: ["libbase"],
// for cutils/android_filesystem_config.h
header_libs: [ "libcutils_headers" ],
header_libs: [
"libcutils_headers",
"libprocessgroup_headers",
],
export_include_dirs: ["include"],
export_header_lib_headers: [
"libprocessgroup_headers",
],
cflags: [
"-Wall",
"-Werror",

View file

@ -0,0 +1,80 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Check if Linux kernel enables CPUSETS feature.
*
* Return value: 1 if Linux kernel CONFIG_CPUSETS=y; 0 otherwise.
*/
extern bool cpusets_enabled();
/*
* Check if Linux kernel enables SCHEDTUNE feature (only available in Android
* common kernel or Linaro LSK, not in mainline Linux as of v4.9)
*
* Return value: 1 if Linux kernel CONFIG_CGROUP_SCHEDTUNE=y; 0 otherwise.
*/
extern bool schedboost_enabled();
/* Keep in sync with THREAD_GROUP_* in frameworks/base/core/java/android/os/Process.java */
typedef enum {
SP_DEFAULT = -1,
SP_BACKGROUND = 0,
SP_FOREGROUND = 1,
SP_SYSTEM = 2, // can't be used with set_sched_policy()
SP_AUDIO_APP = 3,
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,
} SchedPolicy;
extern int set_cpuset_policy(int tid, SchedPolicy policy);
/* Assign thread tid to the cgroup associated with the specified policy.
* If the thread is a thread group leader, that is it's gettid() == getpid(),
* then the other threads in the same thread group are _not_ affected.
* On platforms which support gettid(), zero tid means current thread.
* Return value: 0 for success, or -errno for error.
*/
extern int set_sched_policy(int tid, SchedPolicy policy);
/* Return the policy associated with the cgroup of thread tid via policy pointer.
* On platforms which support gettid(), zero tid means current thread.
* Return value: 0 for success, or -1 for error and set errno.
*/
extern int get_sched_policy(int tid, SchedPolicy *policy);
/* Return a displayable string corresponding to policy.
* Return value: non-NULL NUL-terminated name of unspecified length;
* the caller is responsible for displaying the useful part of the string.
*/
extern const char *get_sched_policy_name(SchedPolicy policy);
#ifdef __cplusplus
}
#endif

View file

@ -14,7 +14,7 @@
** limitations under the License.
*/
#include <cutils/sched_policy.h>
#include <processgroup/sched_policy.h>
#define LOG_TAG "SchedPolicy"