Limit libprocessgroup VNDK API to the minimum set required for task profiles usage. This API allows vendors to use cgroups without accessing cgroup files directly, therefore allowing Android to change cgroup arrangement details without breaking vendor code. Bug: 131098932 Test: build and boot Change-Id: I92463dfb44a108a133bafd2fe52237b6b1d50a69 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
63 lines
2.4 KiB
C++
63 lines
2.4 KiB
C++
/*
|
|
* Copyright 2014 Google, Inc
|
|
*
|
|
* 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 <sys/cdefs.h>
|
|
#include <sys/types.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
static constexpr const char* CGROUPV2_CONTROLLER_NAME = "cgroup2";
|
|
|
|
bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path);
|
|
bool CgroupGetAttributePath(const std::string& attr_name, std::string* path);
|
|
bool CgroupGetAttributePathForTask(const std::string& attr_name, int tid, std::string* path);
|
|
|
|
bool SetTaskProfiles(int tid, const std::vector<std::string>& profiles, bool use_fd_cache = false);
|
|
bool SetProcessProfiles(uid_t uid, pid_t pid, const std::vector<std::string>& profiles,
|
|
bool use_fd_cache = false);
|
|
|
|
#ifndef __ANDROID_VNDK__
|
|
|
|
static constexpr const char* CGROUPS_RC_PATH = "/dev/cgroup_info/cgroup.rc";
|
|
|
|
bool UsePerAppMemcg();
|
|
|
|
// Return 0 and removes the cgroup if there are no longer any processes in it.
|
|
// Returns -1 in the case of an error occurring or if there are processes still running
|
|
// even after retrying for up to 200ms.
|
|
int killProcessGroup(uid_t uid, int initialPid, int signal);
|
|
|
|
// Returns the same as killProcessGroup(), however it does not retry, which means
|
|
// that it only returns 0 in the case that the cgroup exists and it contains no processes.
|
|
int killProcessGroupOnce(uid_t uid, int initialPid, int signal);
|
|
|
|
int createProcessGroup(uid_t uid, int initialPid, bool memControl = false);
|
|
|
|
// Set various properties of a process group. For these functions to work, the process group must
|
|
// have been created by passing memControl=true to createProcessGroup.
|
|
bool setProcessGroupSwappiness(uid_t uid, int initialPid, int swappiness);
|
|
bool setProcessGroupSoftLimit(uid_t uid, int initialPid, int64_t softLimitInBytes);
|
|
bool setProcessGroupLimit(uid_t uid, int initialPid, int64_t limitInBytes);
|
|
|
|
void removeAllProcessGroups(void);
|
|
|
|
#endif // __ANDROID_VNDK__
|
|
|
|
__END_DECLS
|