You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					117 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					117 lines
				
				4.1 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2005 The Android Open Source Project
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 * you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 * You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *      http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 * See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 * limitations under the License.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef ANDROID_PROCESS_STATE_H
							 | 
						||
| 
								 | 
							
								#define ANDROID_PROCESS_STATE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <binder/IBinder.h>
							 | 
						||
| 
								 | 
							
								#include <utils/KeyedVector.h>
							 | 
						||
| 
								 | 
							
								#include <utils/String8.h>
							 | 
						||
| 
								 | 
							
								#include <utils/String16.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <utils/threads.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <pthread.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								namespace android {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IPCThreadState;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ProcessState : public virtual RefBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    static  sp<ProcessState>    self();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            void                setContextObject(const sp<IBinder>& object);
							 | 
						||
| 
								 | 
							
								            sp<IBinder>         getContextObject(const sp<IBinder>& caller);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								            void                setContextObject(const sp<IBinder>& object,
							 | 
						||
| 
								 | 
							
								                                                 const String16& name);
							 | 
						||
| 
								 | 
							
								            sp<IBinder>         getContextObject(const String16& name,
							 | 
						||
| 
								 | 
							
								                                                 const sp<IBinder>& caller);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            void                startThreadPool();
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								    typedef bool (*context_check_func)(const String16& name,
							 | 
						||
| 
								 | 
							
								                                       const sp<IBinder>& caller,
							 | 
						||
| 
								 | 
							
								                                       void* userData);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								            bool                isContextManager(void) const;
							 | 
						||
| 
								 | 
							
								            bool                becomeContextManager(
							 | 
						||
| 
								 | 
							
								                                    context_check_func checkFunc,
							 | 
						||
| 
								 | 
							
								                                    void* userData);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            sp<IBinder>         getStrongProxyForHandle(int32_t handle);
							 | 
						||
| 
								 | 
							
								            wp<IBinder>         getWeakProxyForHandle(int32_t handle);
							 | 
						||
| 
								 | 
							
								            void                expungeHandle(int32_t handle, IBinder* binder);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            void                spawnPooledThread(bool isMain);
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            status_t            setThreadPoolMaxThreadCount(size_t maxThreads);
							 | 
						||
| 
								 | 
							
								            void                giveThreadPoolName();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend class IPCThreadState;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								                                ProcessState();
							 | 
						||
| 
								 | 
							
								                                ~ProcessState();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                ProcessState(const ProcessState& o);
							 | 
						||
| 
								 | 
							
								            ProcessState&       operator=(const ProcessState& o);
							 | 
						||
| 
								 | 
							
								            String8             makeBinderThreadName();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            struct handle_entry {
							 | 
						||
| 
								 | 
							
								                IBinder* binder;
							 | 
						||
| 
								 | 
							
								                RefBase::weakref_type* refs;
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            handle_entry*       lookupHandleLocked(int32_t handle);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            int                 mDriverFD;
							 | 
						||
| 
								 | 
							
								            void*               mVMStart;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // Protects thread count variable below.
							 | 
						||
| 
								 | 
							
								            pthread_mutex_t     mThreadCountLock;
							 | 
						||
| 
								 | 
							
								            pthread_cond_t      mThreadCountDecrement;
							 | 
						||
| 
								 | 
							
								            // Number of binder threads current executing a command.
							 | 
						||
| 
								 | 
							
								            size_t              mExecutingThreadsCount;
							 | 
						||
| 
								 | 
							
								            // Maximum number for binder threads allowed for this process.
							 | 
						||
| 
								 | 
							
								            size_t              mMaxThreads;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    mutable Mutex               mLock;  // protects everything below.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Vector<handle_entry>mHandleToObject;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bool                mManagesContexts;
							 | 
						||
| 
								 | 
							
								            context_check_func  mBinderContextCheckFunc;
							 | 
						||
| 
								 | 
							
								            void*               mBinderContextUserData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            KeyedVector<String16, sp<IBinder> >
							 | 
						||
| 
								 | 
							
								                                mContexts;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            String8             mRootDir;
							 | 
						||
| 
								 | 
							
								            bool                mThreadPoolStarted;
							 | 
						||
| 
								 | 
							
								    volatile int32_t            mThreadPoolSeq;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								}; // namespace android
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // ANDROID_PROCESS_STATE_H
							 |