Add support for oat_process for use as a wrap.* launcher
Add test support for running Calculator
Change-Id: I7ec0681febe6f6c836452e8afb4c12a2ebfa0ea8
diff --git a/oat_process/app_main.cpp b/oat_process/app_main.cpp
index bf827a8..92ede6d 100644
--- a/oat_process/app_main.cpp
+++ b/oat_process/app_main.cpp
@@ -148,6 +148,45 @@
argc--;
argv++;
+ // ignore /system/bin/app_process when invoked via WrapperInit
+ if (strcmp(argv[0], "/system/bin/app_process") == 0) {
+ LOGI("Removing /system/bin/app_process argument");
+ argc--;
+ argv++;
+ for (int i = 0; i < argc; i++) {
+ LOGI("argv[%d]=%s", i, argv[i]);
+ }
+ }
+
+ // TODO: remove Calculator special case
+ int oatArgc = argc + 2;
+ const char* oatArgv[oatArgc];
+ if (strcmp(argv[0], "-Xbootimage:/system/framework/boot.oat") != 0) {
+ LOGI("Adding oat arguments");
+ oatArgv[0] = "-Xbootimage:/system/framework/boot.oat";
+ oatArgv[1] = "-Ximage:/system/app/Calculator.oat";
+ setenv("CLASSPATH", "/system/app/Calculator.apk", 1);
+ memcpy(oatArgv + (oatArgc - argc), argv, argc * sizeof(*argv));
+ argv = oatArgv;
+ argc = oatArgc;
+ for (int i = 0; i < argc; i++) {
+ LOGI("argv[%d]=%s", i, argv[i]);
+ }
+ }
+
+ // TODO: remove the heap arguments when implicit garbage collection enabled
+ LOGI("Adding heap arguments");
+ int heapArgc = argc + 2;
+ const char* heapArgv[heapArgc];
+ heapArgv[0] = "-Xms64m";
+ heapArgv[1] = "-Xmx64m";
+ memcpy(heapArgv + (heapArgc - argc), argv, argc * sizeof(*argv));
+ argv = heapArgv;
+ argc = heapArgc;
+ for (int i = 0; i < argc; i++) {
+ LOGI("argv[%d]=%s", i, argv[i]);
+ }
+
// Everything up to '--' or first non '-' arg goes to the vm
int i = runtime.addVmArguments(argc, argv);