ProcessState.h revision 1b80f793d2328dd94a151411a1cc3a676121ffc7
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_PROCESS_STATE_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_PROCESS_STATE_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IBinder.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/KeyedVector.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/String8.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/String16.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Global variables
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern int                 mArgC;
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern const char* const*  mArgV;
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern int                 mArgLen;
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IPCThreadState;
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass ProcessState : public virtual RefBase
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  sp<ProcessState>    self();
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setContextObject(const sp<IBinder>& object);
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getContextObject(const sp<IBinder>& caller);
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setContextObject(const sp<IBinder>& object,
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                 const String16& name);
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getContextObject(const String16& name,
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                 const sp<IBinder>& caller);
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                startThreadPool();
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef bool (*context_check_func)(const String16& name,
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                       const sp<IBinder>& caller,
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                       void* userData);
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                isContextManager(void) const;
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                becomeContextManager(
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    context_check_func checkFunc,
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    void* userData);
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getStrongProxyForHandle(int32_t handle);
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            wp<IBinder>         getWeakProxyForHandle(int32_t handle);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                expungeHandle(int32_t handle, IBinder* binder);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setArgs(int argc, const char* const argv[]);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 getArgC() const;
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const char* const*  getArgV() const;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setArgV0(const char* txt);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                spawnPooledThread(bool isMain);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
731b80f793d2328dd94a151411a1cc3a676121ffc7Mathias Agopian            status_t            setThreadPoolMaxThreadCount(size_t maxThreads);
741b80f793d2328dd94a151411a1cc3a676121ffc7Mathias Agopian
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class IPCThreadState;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ProcessState();
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ~ProcessState();
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ProcessState(const ProcessState& o);
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ProcessState&       operator=(const ProcessState& o);
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            struct handle_entry {
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                IBinder* binder;
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                RefBase::weakref_type* refs;
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            };
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            handle_entry*       lookupHandleLocked(int32_t handle);
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 mDriverFD;
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void*               mVMStart;
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Mutex               mLock;  // protects everything below.
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Vector<handle_entry>mHandleToObject;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                mManagesContexts;
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            context_check_func  mBinderContextCheckFunc;
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void*               mBinderContextUserData;
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            KeyedVector<String16, sp<IBinder> >
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                mContexts;
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            String8             mRootDir;
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                mThreadPoolStarted;
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    volatile int32_t            mThreadPoolSeq;
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_PROCESS_STATE_H
116