The cgroup.rc file was introduced in 192aee782 ("libprocessgroup: Add
support for task profiles") back with the initial support for task
profiles. It was intended to optimize performance associated with cgroup
operations. However over time, supporting this file led to making
libprocessgroup code more complicated (such as the cgrouprc LLNDK
interface), and the file ended up getting mmaped into nearly every
process on Android even though only a handful of them actually use it.
Replacing this file with reading and parsing of cgroup information on
demand allows us to simplify and shrink libprocessgroup, and eliminates
thousands of unused mappings without negatively affecting boot time or
other performance metrics.
Bug: 349105928
Test: Verified with memcg v2 and MaxActivationDepth 1 on Cuttlefish, Raven, and Mokey
Change-Id: Ic3f01fdf7fda89a56ab80657e1cf4573156273e6
337 lines
7.9 KiB
Text
337 lines
7.9 KiB
Text
package {
|
|
default_applicable_licenses: ["system_core_libcutils_license"],
|
|
}
|
|
|
|
license {
|
|
name: "system_core_libcutils_license",
|
|
visibility: [":__subpackages__"],
|
|
license_kinds: [
|
|
"SPDX-license-identifier-Apache-2.0",
|
|
"SPDX-license-identifier-BSD",
|
|
"SPDX-license-identifier-MIT", // strlcpy.c
|
|
],
|
|
license_text: [
|
|
"NOTICE",
|
|
],
|
|
}
|
|
|
|
filegroup {
|
|
name: "android_filesystem_config_header",
|
|
srcs: ["include/private/android_filesystem_config.h"],
|
|
}
|
|
|
|
cc_defaults {
|
|
name: "libcutils_defaults",
|
|
cflags: [
|
|
"-Wno-exit-time-destructors",
|
|
],
|
|
|
|
product_available: true,
|
|
ramdisk_available: true,
|
|
recovery_available: true,
|
|
vendor_available: true,
|
|
vendor_ramdisk_available: true,
|
|
|
|
host_supported: true,
|
|
native_bridge_supported: true,
|
|
|
|
apex_available: [
|
|
"//apex_available:platform",
|
|
"//apex_available:anyapex",
|
|
],
|
|
min_sdk_version: "29",
|
|
}
|
|
|
|
cc_library_headers {
|
|
name: "libcutils_headers",
|
|
defaults: ["libcutils_defaults"],
|
|
|
|
export_include_dirs: ["include"],
|
|
header_libs: ["libprocessgroup_headers"],
|
|
export_header_lib_headers: ["libprocessgroup_headers"],
|
|
target: {
|
|
vendor: {
|
|
override_export_include_dirs: ["include_outside_system"],
|
|
},
|
|
product: {
|
|
override_export_include_dirs: ["include_outside_system"],
|
|
},
|
|
linux_bionic: {
|
|
enabled: true,
|
|
},
|
|
windows: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
// Socket specific parts of libcutils that are safe to statically link into an APEX.
|
|
cc_library {
|
|
name: "libcutils_sockets",
|
|
defaults: ["libcutils_defaults"],
|
|
|
|
export_include_dirs: ["include"],
|
|
|
|
shared_libs: ["liblog"],
|
|
srcs: ["sockets.cpp"],
|
|
target: {
|
|
linux_bionic: {
|
|
enabled: true,
|
|
},
|
|
|
|
not_windows: {
|
|
srcs: [
|
|
"socket_inaddr_any_server_unix.cpp",
|
|
"socket_local_client_unix.cpp",
|
|
"socket_local_server_unix.cpp",
|
|
"socket_network_client_unix.cpp",
|
|
"sockets_unix.cpp",
|
|
],
|
|
},
|
|
|
|
// "not_windows" means "non-Windows host".
|
|
android: {
|
|
srcs: [
|
|
"android_get_control_file.cpp",
|
|
"socket_inaddr_any_server_unix.cpp",
|
|
"socket_local_client_unix.cpp",
|
|
"socket_local_server_unix.cpp",
|
|
"socket_network_client_unix.cpp",
|
|
"sockets_unix.cpp",
|
|
],
|
|
static_libs: ["libbase"],
|
|
},
|
|
|
|
windows: {
|
|
host_ldlibs: ["-lws2_32"],
|
|
srcs: [
|
|
"socket_inaddr_any_server_windows.cpp",
|
|
"socket_network_client_windows.cpp",
|
|
"sockets_windows.cpp",
|
|
],
|
|
|
|
enabled: true,
|
|
cflags: [
|
|
"-D_GNU_SOURCE",
|
|
],
|
|
},
|
|
},
|
|
}
|
|
|
|
// some files must not be compiled when building against Mingw
|
|
// they correspond to features not used by our host development tools
|
|
// which are also hard or even impossible to port to native Win32
|
|
libcutils_nonwindows_sources = [
|
|
"fs.cpp",
|
|
"hashmap.cpp",
|
|
"multiuser.cpp",
|
|
"str_parms.cpp",
|
|
]
|
|
|
|
cc_library {
|
|
name: "libcutils",
|
|
defaults: ["libcutils_defaults"],
|
|
double_loadable: true,
|
|
srcs: [
|
|
"config_utils.cpp",
|
|
"iosched_policy.cpp",
|
|
"load_file.cpp",
|
|
"native_handle.cpp",
|
|
"properties.cpp",
|
|
"record_stream.cpp",
|
|
"strlcpy.c",
|
|
],
|
|
|
|
target: {
|
|
linux_bionic: {
|
|
enabled: true,
|
|
static_libs: [
|
|
"libasync_safe",
|
|
],
|
|
},
|
|
linux: {
|
|
srcs: [
|
|
"canned_fs_config.cpp",
|
|
"fs_config.cpp",
|
|
],
|
|
},
|
|
host: {
|
|
srcs: [
|
|
"trace-host.cpp",
|
|
"ashmem-host.cpp",
|
|
],
|
|
},
|
|
not_windows: {
|
|
srcs: libcutils_nonwindows_sources,
|
|
},
|
|
windows: {
|
|
enabled: true,
|
|
host_ldlibs: ["-lws2_32"],
|
|
},
|
|
android: {
|
|
sanitize: {
|
|
misc_undefined: ["integer"],
|
|
},
|
|
static_libs: [
|
|
"libasync_safe",
|
|
],
|
|
srcs: libcutils_nonwindows_sources + [
|
|
"android_reboot.cpp",
|
|
"ashmem-dev.cpp",
|
|
"klog.cpp",
|
|
"partition_utils.cpp",
|
|
"qtaguid.cpp",
|
|
"trace-dev.cpp",
|
|
"uevent.cpp",
|
|
],
|
|
},
|
|
|
|
// qtaguid.cpp loads libnetd_client.so with dlopen(). Since
|
|
// the interface of libnetd_client.so may vary between AOSP
|
|
// releases, exclude qtaguid.cpp from the VNDK-SP variant.
|
|
vendor: {
|
|
exclude_srcs: [
|
|
"qtaguid.cpp",
|
|
],
|
|
header_abi_checker: {
|
|
enabled: true,
|
|
ref_dump_dirs: ["abi-dumps"],
|
|
},
|
|
},
|
|
product: {
|
|
exclude_srcs: [
|
|
"qtaguid.cpp",
|
|
],
|
|
header_abi_checker: {
|
|
enabled: true,
|
|
ref_dump_dirs: ["abi-dumps"],
|
|
},
|
|
},
|
|
},
|
|
|
|
whole_static_libs: ["libcutils_sockets"],
|
|
shared_libs: [
|
|
"liblog",
|
|
"libbase",
|
|
],
|
|
header_libs: [
|
|
"libbase_headers",
|
|
"libcutils_headers",
|
|
"libprocessgroup_headers",
|
|
],
|
|
export_header_lib_headers: [
|
|
"libcutils_headers",
|
|
"libprocessgroup_headers",
|
|
],
|
|
local_include_dirs: ["include"],
|
|
|
|
cflags: [
|
|
"-Werror",
|
|
"-Wall",
|
|
"-Wextra",
|
|
],
|
|
}
|
|
|
|
cc_defaults {
|
|
name: "libcutils_test_default",
|
|
srcs: [
|
|
"ashmem_base_test.cpp",
|
|
"native_handle_test.cpp",
|
|
"properties_test.cpp",
|
|
"sockets_test.cpp",
|
|
],
|
|
|
|
target: {
|
|
android: {
|
|
srcs: [
|
|
"android_get_control_file_test.cpp",
|
|
"android_get_control_socket_test.cpp",
|
|
"ashmem_test.cpp",
|
|
"fs_config_test.cpp",
|
|
"multiuser_test.cpp",
|
|
"sched_policy_test.cpp",
|
|
"str_parms_test.cpp",
|
|
"trace-dev_test.cpp",
|
|
],
|
|
},
|
|
|
|
not_windows: {
|
|
srcs: [
|
|
"str_parms_test.cpp",
|
|
],
|
|
},
|
|
},
|
|
|
|
cflags: [
|
|
"-Wall",
|
|
"-Wextra",
|
|
"-Werror",
|
|
],
|
|
}
|
|
|
|
always_static_test_libraries = [
|
|
"libjsoncpp",
|
|
]
|
|
|
|
test_libraries = [
|
|
"libcutils",
|
|
"liblog",
|
|
"libbase",
|
|
"libprocessgroup",
|
|
"libcgrouprc",
|
|
]
|
|
|
|
cc_test {
|
|
name: "libcutils_test",
|
|
test_suites: ["device-tests"],
|
|
defaults: ["libcutils_test_default"],
|
|
host_supported: true,
|
|
shared_libs: test_libraries,
|
|
static_libs: always_static_test_libraries,
|
|
require_root: true,
|
|
}
|
|
|
|
cc_defaults {
|
|
name: "libcutils_test_static_defaults",
|
|
defaults: ["libcutils_test_default"],
|
|
stl: "libc++_static",
|
|
require_root: true,
|
|
|
|
target: {
|
|
android: {
|
|
static_executable: true,
|
|
static_libs: [
|
|
"libprocessgroup_util",
|
|
] + test_libraries + always_static_test_libraries,
|
|
},
|
|
not_windows: {
|
|
static_libs: test_libraries + always_static_test_libraries,
|
|
},
|
|
windows: {
|
|
static_libs: [
|
|
"libbase",
|
|
"libcutils",
|
|
"libcutils_sockets",
|
|
],
|
|
host_ldlibs: ["-lws2_32"],
|
|
enabled: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
cc_test {
|
|
name: "libcutils_test_static",
|
|
host_supported: true,
|
|
test_suites: ["device-tests"],
|
|
defaults: ["libcutils_test_static_defaults"],
|
|
}
|
|
|
|
cc_test {
|
|
name: "KernelLibcutilsTest",
|
|
test_suites: [
|
|
"general-tests",
|
|
"vts",
|
|
],
|
|
defaults: ["libcutils_test_static_defaults"],
|
|
test_config: "KernelLibcutilsTest.xml",
|
|
}
|