1493dad966305a7fb555addd367532dd2af275a27San Mehat/*
2493dad966305a7fb555addd367532dd2af275a27San Mehat * Copyright (C) 2007 The Android Open Source Project
3493dad966305a7fb555addd367532dd2af275a27San Mehat *
4493dad966305a7fb555addd367532dd2af275a27San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5493dad966305a7fb555addd367532dd2af275a27San Mehat * you may not use this file except in compliance with the License.
6493dad966305a7fb555addd367532dd2af275a27San Mehat * You may obtain a copy of the License at
7493dad966305a7fb555addd367532dd2af275a27San Mehat *
8493dad966305a7fb555addd367532dd2af275a27San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9493dad966305a7fb555addd367532dd2af275a27San Mehat *
10493dad966305a7fb555addd367532dd2af275a27San Mehat * Unless required by applicable law or agreed to in writing, software
11493dad966305a7fb555addd367532dd2af275a27San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12493dad966305a7fb555addd367532dd2af275a27San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13493dad966305a7fb555addd367532dd2af275a27San Mehat * See the License for the specific language governing permissions and
14493dad966305a7fb555addd367532dd2af275a27San Mehat * limitations under the License.
15493dad966305a7fb555addd367532dd2af275a27San Mehat */
16493dad966305a7fb555addd367532dd2af275a27San Mehat
17493dad966305a7fb555addd367532dd2af275a27San Mehat#ifndef __CUTILS_SCHED_POLICY_H
18493dad966305a7fb555addd367532dd2af275a27San Mehat#define __CUTILS_SCHED_POLICY_H
19493dad966305a7fb555addd367532dd2af275a27San Mehat
20493dad966305a7fb555addd367532dd2af275a27San Mehat#ifdef __cplusplus
21493dad966305a7fb555addd367532dd2af275a27San Mehatextern "C" {
22493dad966305a7fb555addd367532dd2af275a27San Mehat#endif
23493dad966305a7fb555addd367532dd2af275a27San Mehat
2469bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4dGlenn Kasten/* Keep in sync with THREAD_GROUP_* in frameworks/base/core/java/android/os/Process.java */
25493dad966305a7fb555addd367532dd2af275a27San Mehattypedef enum {
2669bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4dGlenn Kasten    SP_DEFAULT    = -1,
27493dad966305a7fb555addd367532dd2af275a27San Mehat    SP_BACKGROUND = 0,
28493dad966305a7fb555addd367532dd2af275a27San Mehat    SP_FOREGROUND = 1,
2910ec3c7645bfdb70518dc1b21df40ad5478589e3Glenn Kasten    SP_SYSTEM     = 2,  // can't be used with set_sched_policy()
3010ec3c7645bfdb70518dc1b21df40ad5478589e3Glenn Kasten    SP_AUDIO_APP  = 3,
3110ec3c7645bfdb70518dc1b21df40ad5478589e3Glenn Kasten    SP_AUDIO_SYS  = 4,
3286c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten    SP_CNT,
3386c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten    SP_MAX        = SP_CNT - 1,
3469bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4dGlenn Kasten    SP_SYSTEM_DEFAULT = SP_FOREGROUND,
35493dad966305a7fb555addd367532dd2af275a27San Mehat} SchedPolicy;
36493dad966305a7fb555addd367532dd2af275a27San Mehat
3786c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten/* Assign thread tid to the cgroup associated with the specified policy.
3886c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * If the thread is a thread group leader, that is it's gettid() == getpid(),
3986c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * then the other threads in the same thread group are _not_ affected.
4069bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4dGlenn Kasten * On platforms which support gettid(), zero tid means current thread.
4186c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * Return value: 0 for success, or -errno for error.
4286c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten */
43493dad966305a7fb555addd367532dd2af275a27San Mehatextern int set_sched_policy(int tid, SchedPolicy policy);
4486c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten
4586c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten/* Return the policy associated with the cgroup of thread tid via policy pointer.
4669bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4dGlenn Kasten * On platforms which support gettid(), zero tid means current thread.
4786c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * Return value: 0 for success, or -1 for error and set errno.
4886c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten */
49c0dfca7ae1f6016461235552091c2cacacca82a2San Mehatextern int get_sched_policy(int tid, SchedPolicy *policy);
50493dad966305a7fb555addd367532dd2af275a27San Mehat
5186c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten/* Return a displayable string corresponding to policy.
5286c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * Return value: non-NULL NUL-terminated name of unspecified length;
5386c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten * the caller is responsible for displaying the useful part of the string.
5486c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten */
5586c7cc81891a69ace7044de667b0624c284ee82bGlenn Kastenextern const char *get_sched_policy_name(SchedPolicy policy);
5686c7cc81891a69ace7044de667b0624c284ee82bGlenn Kasten
57493dad966305a7fb555addd367532dd2af275a27San Mehat#ifdef __cplusplus
58493dad966305a7fb555addd367532dd2af275a27San Mehat}
59493dad966305a7fb555addd367532dd2af275a27San Mehat#endif
60493dad966305a7fb555addd367532dd2af275a27San Mehat
61493dad966305a7fb555addd367532dd2af275a27San Mehat#endif /* __CUTILS_SCHED_POLICY_H */
62