blob: f9edc2a691fc02a7635732a2bfb8a08d28db3ca2 [file] [log] [blame]
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2005 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 ANDROID_PROCESS_STATE_H
18#define ANDROID_PROCESS_STATE_H
19
Mathias Agopianc5b2c0b2009-05-19 19:08:10 -070020#include <binder/IBinder.h>
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080021#include <utils/KeyedVector.h>
22#include <utils/String8.h>
23#include <utils/String16.h>
24
25#include <utils/threads.h>
26
Wale Ogunwale376b8222015-04-13 16:16:10 -070027#include <pthread.h>
28
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080029// ---------------------------------------------------------------------------
30namespace android {
31
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080032class IPCThreadState;
33
34class ProcessState : public virtual RefBase
35{
36public:
37 static sp<ProcessState> self();
38
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080039 void setContextObject(const sp<IBinder>& object);
40 sp<IBinder> getContextObject(const sp<IBinder>& caller);
41
42 void setContextObject(const sp<IBinder>& object,
43 const String16& name);
44 sp<IBinder> getContextObject(const String16& name,
45 const sp<IBinder>& caller);
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080046
47 void startThreadPool();
48
49 typedef bool (*context_check_func)(const String16& name,
50 const sp<IBinder>& caller,
51 void* userData);
52
53 bool isContextManager(void) const;
54 bool becomeContextManager(
55 context_check_func checkFunc,
56 void* userData);
57
58 sp<IBinder> getStrongProxyForHandle(int32_t handle);
59 wp<IBinder> getWeakProxyForHandle(int32_t handle);
60 void expungeHandle(int32_t handle, IBinder* binder);
61
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080062 void spawnPooledThread(bool isMain);
63
Mathias Agopian1b80f792012-04-17 16:11:08 -070064 status_t setThreadPoolMaxThreadCount(size_t maxThreads);
Mathias Agopiane3e43b32013-03-07 15:34:28 -080065 void giveThreadPoolName();
Mathias Agopian1b80f792012-04-17 16:11:08 -070066
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080067private:
68 friend class IPCThreadState;
69
70 ProcessState();
71 ~ProcessState();
72
73 ProcessState(const ProcessState& o);
74 ProcessState& operator=(const ProcessState& o);
Mathias Agopiane3e43b32013-03-07 15:34:28 -080075 String8 makeBinderThreadName();
Wale Ogunwale376b8222015-04-13 16:16:10 -070076
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080077 struct handle_entry {
78 IBinder* binder;
79 RefBase::weakref_type* refs;
80 };
Wale Ogunwale376b8222015-04-13 16:16:10 -070081
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080082 handle_entry* lookupHandleLocked(int32_t handle);
83
84 int mDriverFD;
85 void* mVMStart;
Wale Ogunwale376b8222015-04-13 16:16:10 -070086
87 // Protects thread count variable below.
88 pthread_mutex_t mThreadCountLock;
89 pthread_cond_t mThreadCountDecrement;
90 // Number of binder threads current executing a command.
91 size_t mExecutingThreadsCount;
92 // Maximum number for binder threads allowed for this process.
93 size_t mMaxThreads;
94
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080095 mutable Mutex mLock; // protects everything below.
Wale Ogunwale376b8222015-04-13 16:16:10 -070096
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080097 Vector<handle_entry>mHandleToObject;
98
99 bool mManagesContexts;
100 context_check_func mBinderContextCheckFunc;
101 void* mBinderContextUserData;
Wale Ogunwale376b8222015-04-13 16:16:10 -0700102
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800103 KeyedVector<String16, sp<IBinder> >
104 mContexts;
105
106
107 String8 mRootDir;
108 bool mThreadPoolStarted;
109 volatile int32_t mThreadPoolSeq;
110};
111
112}; // namespace android
113
114// ---------------------------------------------------------------------------
115
116#endif // ANDROID_PROCESS_STATE_H