summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2011-07-08 18:52:57 -0700
committerJeff Brown <jeffbrown@google.com>2011-07-08 19:54:07 -0700
commite16986cae281f118ecd563c384b7f6e5a4b937b5 (patch)
tree524b97b001c397f8f23ef47b6451368b8f166540
parent67ef7c507f33676c9a4a3b22dff6ac7dc353f98f (diff)
downloadframeworks_native-e16986cae281f118ecd563c384b7f6e5a4b937b5.zip
frameworks_native-e16986cae281f118ecd563c384b7f6e5a4b937b5.tar.gz
frameworks_native-e16986cae281f118ecd563c384b7f6e5a4b937b5.tar.bz2
Eliminate single-process mode.
Bug: 5010576 Change-Id: Id450dc83efed4897d1e4ff451530fed14457aace
-rw-r--r--cmds/runtime/main_runtime.cpp87
-rw-r--r--include/binder/ProcessState.h4
-rw-r--r--libs/binder/ProcessState.cpp51
3 files changed, 34 insertions, 108 deletions
diff --git a/cmds/runtime/main_runtime.cpp b/cmds/runtime/main_runtime.cpp
index dbff095..e3b72c2 100644
--- a/cmds/runtime/main_runtime.cpp
+++ b/cmds/runtime/main_runtime.cpp
@@ -93,12 +93,11 @@ extern void QuickTests();
static void usage(const char* argv0)
{
fprintf(stderr,
- "Usage: runtime [-g gamma] [-l logfile] [-n] [-s]\n"
+ "Usage: runtime [-g gamma] [-l logfile] [-n]\n"
" [-j app-component] [-v app-verb] [-d app-data]\n"
"\n"
"-l: File to send log messages to\n"
"-n: Don't print to stdout/stderr\n"
- "-s: Force single-process mode\n"
"-j: Custom home app component name\n"
"-v: Custom home app intent verb\n"
"-d: Custom home app intent data\n"
@@ -145,21 +144,14 @@ static int run(sp<ProcessState>& proc)
LOGI("run() sending FIRST_CALL_TRANSACTION to activity manager");
am->transact(IBinder::FIRST_CALL_TRANSACTION, data, &reply);
- if (proc->supportsProcesses()) {
- // Now we link to the Activity Manager waiting for it to die. If it does kill ourself.
- // initd will restart this process and bring the system back up.
- sp<GrimReaper> grim = new GrimReaper();
- am->linkToDeath(grim, grim.get(), 0);
+ // Now we link to the Activity Manager waiting for it to die. If it does kill ourself.
+ // initd will restart this process and bring the system back up.
+ sp<GrimReaper> grim = new GrimReaper();
+ am->linkToDeath(grim, grim.get(), 0);
- // Now join the thread pool. Note this is needed so that the message enqueued in the driver
- // for the linkToDeath gets processed.
- IPCThreadState::self()->joinThreadPool();
- } else {
- // Keep this thread running forever...
- while (1) {
- usleep(100000);
- }
- }
+ // Now join the thread pool. Note this is needed so that the message enqueued in the driver
+ // for the linkToDeath gets processed.
+ IPCThreadState::self()->joinThreadPool();
return 1;
}
@@ -179,14 +171,7 @@ LOGI("run() sending FIRST_CALL_TRANSACTION to activity manager");
*/
static void finish_system_init(sp<ProcessState>& proc)
{
- // If we are running multiprocess, we now need to have the
- // thread pool started here. We don't do this in boot_init()
- // because when running single process we need to start the
- // thread pool after the Android runtime has been started (so
- // the pool uses Dalvik threads).
- if (proc->supportsProcesses()) {
- proc->startThreadPool();
- }
+ proc->startThreadPool();
}
@@ -214,11 +199,7 @@ static void boot_init()
LOGD("ProcessState: %p\n", proc.get());
proc->becomeContextManager(contextChecker, NULL);
- if (proc->supportsProcesses()) {
- LOGI("Binder driver opened. Multiprocess enabled.\n");
- } else {
- LOGI("Binder driver not found. Processes not supported.\n");
- }
+ LOGI("Binder driver opened.\n");
sp<BServiceManager> sm = new BServiceManager;
proc->setContextObject(sm);
@@ -340,7 +321,6 @@ static status_t start_process(const char* name)
extern "C"
int main(int argc, char* const argv[])
{
- bool singleProcess = false;
const char* logFile = NULL;
int ic;
int result = 1;
@@ -359,7 +339,7 @@ int main(int argc, char* const argv[])
#endif
while (1) {
- ic = getopt(argc, argv, "g:j:v:d:l:ns");
+ ic = getopt(argc, argv, "g:j:v:d:l:n");
if (ic < 0)
break;
@@ -381,9 +361,6 @@ int main(int argc, char* const argv[])
case 'n':
redirectStdFds();
break;
- case 's':
- singleProcess = true;
- break;
case '?':
default:
LOGE("runtime: unrecognized flag -%c\n", ic);
@@ -396,10 +373,6 @@ int main(int argc, char* const argv[])
usage(argv[0]);
}
- if (singleProcess) {
- ProcessState::setSingleProcess(true);
- }
-
if (logFile != NULL) {
android_logToFile(NULL, logFile);
}
@@ -475,33 +448,17 @@ int main(int argc, char* const argv[])
boot_init();
- /* If we are in multiprocess mode, have zygote spawn the system
- * server process and call system_init(). If we are running in
- * single process mode just call system_init() directly.
- */
- if (proc->supportsProcesses()) {
- // If stdio logging is on, system_server should not inherit our stdio
- // The dalvikvm instance will copy stdio to the log on its own
- char propBuf[PROPERTY_VALUE_MAX];
- bool logStdio = false;
- property_get("log.redirect-stdio", propBuf, "");
- logStdio = (strcmp(propBuf, "true") == 0);
-
- zygote_run_oneshot((int)(!logStdio),
- sizeof(ZYGOTE_ARGV) / sizeof(ZYGOTE_ARGV[0]),
- ZYGOTE_ARGV);
-
- //start_process("/system/bin/mediaserver");
-
- } else {
-#ifndef HAVE_ANDROID_OS
- QuickRuntime* runt = new QuickRuntime();
- runt->start("com/android/server/SystemServer",
- "" /* spontaneously fork system server from zygote */);
-#endif
- }
-
- //printf("+++ post-zygote\n");
+ // Have zygote spawn the system server process and call system_init().
+ // If stdio logging is on, system_server should not inherit our stdio
+ // The dalvikvm instance will copy stdio to the log on its own
+ char propBuf[PROPERTY_VALUE_MAX];
+ bool logStdio = false;
+ property_get("log.redirect-stdio", propBuf, "");
+ logStdio = (strcmp(propBuf, "true") == 0);
+
+ zygote_run_oneshot((int)(!logStdio),
+ sizeof(ZYGOTE_ARGV) / sizeof(ZYGOTE_ARGV[0]),
+ ZYGOTE_ARGV);
finish_system_init(proc);
run(proc);
diff --git a/include/binder/ProcessState.h b/include/binder/ProcessState.h
index feeb3c3..9725822 100644
--- a/include/binder/ProcessState.h
+++ b/include/binder/ProcessState.h
@@ -39,8 +39,6 @@ class ProcessState : public virtual RefBase
public:
static sp<ProcessState> self();
- static void setSingleProcess(bool singleProcess);
-
void setContextObject(const sp<IBinder>& object);
sp<IBinder> getContextObject(const sp<IBinder>& caller);
@@ -48,8 +46,6 @@ public:
const String16& name);
sp<IBinder> getContextObject(const String16& name,
const sp<IBinder>& caller);
-
- bool supportsProcesses() const;
void startThreadPool();
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp
index 2d4e10d..7264ac4 100644
--- a/libs/binder/ProcessState.cpp
+++ b/libs/binder/ProcessState.cpp
@@ -43,8 +43,6 @@
#define BINDER_VM_SIZE ((1*1024*1024) - (4096 *2))
-static bool gSingleProcess = false;
-
// ---------------------------------------------------------------------------
@@ -82,12 +80,6 @@ sp<ProcessState> ProcessState::self()
return gProcess;
}
-void ProcessState::setSingleProcess(bool singleProcess)
-{
- gSingleProcess = singleProcess;
-}
-
-
void ProcessState::setContextObject(const sp<IBinder>& object)
{
setContextObject(object, String16("default"));
@@ -95,11 +87,7 @@ void ProcessState::setContextObject(const sp<IBinder>& object)
sp<IBinder> ProcessState::getContextObject(const sp<IBinder>& caller)
{
- if (supportsProcesses()) {
- return getStrongProxyForHandle(0);
- } else {
- return getContextObject(String16("default"), caller);
- }
+ return getStrongProxyForHandle(0);
}
void ProcessState::setContextObject(const sp<IBinder>& object, const String16& name)
@@ -144,11 +132,6 @@ sp<IBinder> ProcessState::getContextObject(const String16& name, const sp<IBinde
return object;
}
-bool ProcessState::supportsProcesses() const
-{
- return mDriverFD >= 0;
-}
-
void ProcessState::startThreadPool()
{
AutoMutex _l(mLock);
@@ -169,24 +152,19 @@ bool ProcessState::becomeContextManager(context_check_func checkFunc, void* user
AutoMutex _l(mLock);
mBinderContextCheckFunc = checkFunc;
mBinderContextUserData = userData;
- if (mDriverFD >= 0) {
- int dummy = 0;
+
+ int dummy = 0;
#if defined(HAVE_ANDROID_OS)
- status_t result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR, &dummy);
+ status_t result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR, &dummy);
#else
- status_t result = INVALID_OPERATION;
+ status_t result = INVALID_OPERATION;
#endif
- if (result == 0) {
- mManagesContexts = true;
- } else if (result == -1) {
- mBinderContextCheckFunc = NULL;
- mBinderContextUserData = NULL;
- LOGE("Binder ioctl to become context manager failed: %s\n", strerror(errno));
- }
- } else {
- // If there is no driver, our only world is the local
- // process so we can always become the context manager there.
+ if (result == 0) {
mManagesContexts = true;
+ } else if (result == -1) {
+ mBinderContextCheckFunc = NULL;
+ mBinderContextUserData = NULL;
+ LOGE("Binder ioctl to become context manager failed: %s\n", strerror(errno));
}
}
return mManagesContexts;
@@ -322,10 +300,6 @@ void ProcessState::spawnPooledThread(bool isMain)
static int open_driver()
{
- if (gSingleProcess) {
- return -1;
- }
-
int fd = open("/dev/binder", O_RDWR);
if (fd >= 0) {
fcntl(fd, F_SETFD, FD_CLOEXEC);
@@ -386,9 +360,8 @@ ProcessState::ProcessState()
mDriverFD = -1;
#endif
}
- if (mDriverFD < 0) {
- // Need to run without the driver, starting our own thread pool.
- }
+
+ LOG_ALWAYS_FATAL_IF(mDriverFD < 0, "Binder driver could not be opened. Terminating.");
}
ProcessState::~ProcessState()