ProcessState.h revision c5b2c0bf8007562536b822eb060fc54a01f8e08b
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    static  void                setSingleProcess(bool singleProcess);
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setContextObject(const sp<IBinder>& object);
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getContextObject(const sp<IBinder>& caller);
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setContextObject(const sp<IBinder>& object,
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                 const String16& name);
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getContextObject(const String16& name,
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                 const sp<IBinder>& caller);
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                supportsProcesses() const;
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                startThreadPool();
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef bool (*context_check_func)(const String16& name,
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                       const sp<IBinder>& caller,
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                       void* userData);
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                isContextManager(void) const;
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                becomeContextManager(
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    context_check_func checkFunc,
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    void* userData);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<IBinder>         getStrongProxyForHandle(int32_t handle);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            wp<IBinder>         getWeakProxyForHandle(int32_t handle);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                expungeHandle(int32_t handle, IBinder* binder);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setArgs(int argc, const char* const argv[]);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 getArgC() const;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const char* const*  getArgV() const;
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                setArgV0(const char* txt);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                spawnPooledThread(bool isMain);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class IPCThreadState;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ProcessState();
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ~ProcessState();
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ProcessState(const ProcessState& o);
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ProcessState&       operator=(const ProcessState& o);
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            struct handle_entry {
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                IBinder* binder;
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                RefBase::weakref_type* refs;
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            };
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            handle_entry*       lookupHandleLocked(int32_t handle);
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 mDriverFD;
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void*               mVMStart;
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Mutex               mLock;  // protects everything below.
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Vector<handle_entry>mHandleToObject;
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                mManagesContexts;
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            context_check_func  mBinderContextCheckFunc;
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void*               mBinderContextUserData;
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            KeyedVector<String16, sp<IBinder> >
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                mContexts;
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            String8             mRootDir;
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool                mThreadPoolStarted;
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    volatile int32_t            mThreadPoolSeq;
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_PROCESS_STATE_H
118