blob: 4eee14d7e0299db03377cdab9931d0fbb5385f49 [file] [log] [blame]
Mathias Agopian2bd99592012-02-25 23:02:14 -08001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _LIBS_UTILS_ANDROID_THREADS_H
18#define _LIBS_UTILS_ANDROID_THREADS_H
19
20#include <stdint.h>
21#include <sys/types.h>
22
23#if defined(HAVE_PTHREADS)
24# include <pthread.h>
25#endif
26
27#include <utils/ThreadDefs.h>
28
29// ---------------------------------------------------------------------------
30// C API
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36// Create and run a new thread.
37extern int androidCreateThread(android_thread_func_t, void *);
38
39// Create thread with lots of parameters
40extern int androidCreateThreadEtc(android_thread_func_t entryFunction,
41 void *userData,
42 const char* threadName,
43 int32_t threadPriority,
44 size_t threadStackSize,
45 android_thread_id_t *threadId);
46
47// Get some sort of unique identifier for the current thread.
48extern android_thread_id_t androidGetThreadId();
49
50// Low-level thread creation -- never creates threads that can
51// interact with the Java VM.
52extern int androidCreateRawThreadEtc(android_thread_func_t entryFunction,
53 void *userData,
54 const char* threadName,
55 int32_t threadPriority,
56 size_t threadStackSize,
57 android_thread_id_t *threadId);
58
Mathias Agopian6090df82013-03-07 15:34:28 -080059// set the same of the running thread
60extern void androidSetThreadName(const char* name);
61
Mathias Agopian2bd99592012-02-25 23:02:14 -080062// Used by the Java Runtime to control how threads are created, so that
63// they can be proper and lovely Java threads.
64typedef int (*android_create_thread_fn)(android_thread_func_t entryFunction,
65 void *userData,
66 const char* threadName,
67 int32_t threadPriority,
68 size_t threadStackSize,
69 android_thread_id_t *threadId);
70
71extern void androidSetCreateThreadFunc(android_create_thread_fn func);
72
73// ------------------------------------------------------------------
74// Extra functions working with raw pids.
75
76// Get pid for the current thread.
77extern pid_t androidGetTid();
78
Jeff Brown27e6eaa2012-03-16 22:18:39 -070079#ifdef HAVE_ANDROID_OS
Mathias Agopian2bd99592012-02-25 23:02:14 -080080// Change the priority AND scheduling group of a particular thread. The priority
81// should be one of the ANDROID_PRIORITY constants. Returns INVALID_OPERATION
82// if the priority set failed, else another value if just the group set failed;
83// in either case errno is set. Thread ID zero means current thread.
84extern int androidSetThreadPriority(pid_t tid, int prio);
85
86// Get the current priority of a particular thread. Returns one of the
87// ANDROID_PRIORITY constants or a negative result in case of error.
88extern int androidGetThreadPriority(pid_t tid);
Jeff Brown27e6eaa2012-03-16 22:18:39 -070089#endif
Mathias Agopian2bd99592012-02-25 23:02:14 -080090
91#ifdef __cplusplus
92} // extern "C"
93#endif
94
95// ----------------------------------------------------------------------------
96// C++ API
97#ifdef __cplusplus
98namespace android {
99// ----------------------------------------------------------------------------
100
101// Create and run a new thread.
102inline bool createThread(thread_func_t f, void *a) {
103 return androidCreateThread(f, a) ? true : false;
104}
105
106// Create thread with lots of parameters
107inline bool createThreadEtc(thread_func_t entryFunction,
108 void *userData,
109 const char* threadName = "android:unnamed_thread",
110 int32_t threadPriority = PRIORITY_DEFAULT,
111 size_t threadStackSize = 0,
112 thread_id_t *threadId = 0)
113{
114 return androidCreateThreadEtc(entryFunction, userData, threadName,
115 threadPriority, threadStackSize, threadId) ? true : false;
116}
117
118// Get some sort of unique identifier for the current thread.
119inline thread_id_t getThreadId() {
120 return androidGetThreadId();
121}
122
123// ----------------------------------------------------------------------------
124}; // namespace android
125#endif // __cplusplus
126// ----------------------------------------------------------------------------
127
128#endif // _LIBS_UTILS_ANDROID_THREADS_H