diff options
author | Elliott Hughes <enh@google.com> | 2011-02-10 15:54:17 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2011-02-10 15:54:17 -0800 |
commit | 296b43d6f6fc96b0b4cf16956bebed8347953a6f (patch) | |
tree | cf67bccf9d8cddb2acfc77d126014cb5c9a64291 /dalvik/src/main/native | |
parent | e0e567287e4392bebc5f5826b8ef3b1bd8ca166e (diff) | |
download | libcore-296b43d6f6fc96b0b4cf16956bebed8347953a6f.zip libcore-296b43d6f6fc96b0b4cf16956bebed8347953a6f.tar.gz libcore-296b43d6f6fc96b0b4cf16956bebed8347953a6f.tar.bz2 |
Remove the obsolete TouchDex code.
Apparently, this is how we did the first-boot dexing before we had a
package manager.
Change-Id: I6fce0fb30ab9dc2e7ebb0c4177540e92677c92b9
Diffstat (limited to 'dalvik/src/main/native')
-rw-r--r-- | dalvik/src/main/native/dalvik_system_TouchDex.cpp | 269 | ||||
-rw-r--r-- | dalvik/src/main/native/sub.mk | 2 |
2 files changed, 0 insertions, 271 deletions
diff --git a/dalvik/src/main/native/dalvik_system_TouchDex.cpp b/dalvik/src/main/native/dalvik_system_TouchDex.cpp deleted file mode 100644 index 719ac3c..0000000 --- a/dalvik/src/main/native/dalvik_system_TouchDex.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (C) 2007 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. - */ - -/* - * Bit of code to wrap DEX force-updating with a fork() call. - */ - -#define LOG_TAG "TouchDex" -#include "JNIHelp.h" - -#include "cutils/properties.h" - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <signal.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/time.h> -#include <assert.h> -#include <errno.h> - -#define JAVA_PACKAGE "dalvik/system" - -#ifndef HAVE_ANDROID_OS -# define BASE_DIR "/work/device/out/linux-x86-debug-sim" -#else -# define BASE_DIR "" -#endif - -namespace android { - -// fwd -static void logProcStatus(pid_t pid); - - -/* - * private static int trampoline(String dexFiles, String bcp) - */ -static jint dalvik_system_TouchDex_trampoline(JNIEnv* env, - jclass, jstring dexFilesStr, jstring bcpStr) -{ -#ifndef HAVE_ANDROID_OS - /* don't do this on simulator -- gdb goes "funny" in goobuntu */ - return 0; -#endif - - const int kMinTimeout = 900; // 90 seconds - const char* bcp; - const char* dexFiles; - static const char* kExecFile = BASE_DIR "/system/bin/dalvikvm"; - //static const char* kDebugArg = - // "-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"; - static const char* kBcpArgName = "-Xbootclasspath:"; - static const char* kClassName = "dalvik.system.TouchDex"; - static const char* kExecMode = "-Xint"; - static const int argc = 7; - const char* argv[argc+1]; - const char* kVerifyArg; - const char* kDexOptArg; - int timeoutMult; - pid_t pid; - struct timeval startWhen, endWhen; - char propBuf[PROPERTY_VALUE_MAX]; - char execModeBuf[PROPERTY_VALUE_MAX + sizeof("-X")]; - bool verifyJava = true; - - property_get("dalvik.vm.verify-bytecode", propBuf, ""); - if (strcmp(propBuf, "true") == 0) { - verifyJava = true; - } else if (strcmp(propBuf, "false") == 0) { - verifyJava = false; - } else { - /* bad value or not defined; use default */ - } - - if (verifyJava) { - kVerifyArg = "-Xverify:all"; - kDexOptArg = "-Xdexopt:verified"; - timeoutMult = 11; - } else { - kVerifyArg = "-Xverify:none"; - //kDexOptArg = "-Xdexopt:all"; - kDexOptArg = "-Xdexopt:verified"; - timeoutMult = 7; - } - - property_get("dalvik.vm.execution-mode", propBuf, ""); - if (strncmp(propBuf, "int:", 4) == 0) { - strcpy(execModeBuf, "-X"); - strcat(execModeBuf, propBuf); - kExecMode = execModeBuf; - } - - LOGV("TouchDex trampoline forking\n"); - gettimeofday(&startWhen, NULL); - - /* - * Retrieve strings. Note we want to do this *before* the fork() -- bad - * idea to perform Java operations in the child process (not all threads - * get carried over to the new process). - */ - bcp = env->GetStringUTFChars(bcpStr, NULL); - dexFiles = env->GetStringUTFChars(dexFilesStr, NULL); - if (bcp == NULL || dexFiles == NULL) { - LOGE("Bad values for bcp=%p dexFiles=%p\n", bcp, dexFiles); - abort(); - } - - pid = fork(); - if (pid < 0) { - LOGE("fork failed: %s", strerror(errno)); - return -1; - } - - if (pid == 0) { - /* child */ - char* bcpArg; - - LOGV("TouchDex trampoline in child\n"); - - bcpArg = (char*) malloc(strlen(bcp) + strlen(kBcpArgName) +1); - strcpy(bcpArg, kBcpArgName); - strcat(bcpArg, bcp); - - argv[0] = kExecFile; - argv[1] = bcpArg; - argv[2] = kVerifyArg; - argv[3] = kDexOptArg; - argv[4] = kExecMode; - argv[5] = kClassName; - argv[6] = dexFiles; - argv[7] = NULL; - - //LOGI("Calling execv with args:\n"); - //for (int i = 0; i < argc; i++) - // LOGI(" %d: '%s'\n", i, argv[i]); - - execv(kExecFile, (char* const*) argv); - free(bcpArg); - - LOGE("execv '%s' failed: %s\n", kExecFile, strerror(errno)); - exit(1); - } else { - int cc, count, dexCount, timeout; - int result = -1; - const char* cp; - - /* - * Adjust the timeout based on how many DEX files we have to - * process. Larger DEX files take longer, so this is a crude - * approximation at best. - * - * We need this for http://b/issue?id=836771, which can leave us - * stuck waiting for a long time even if there is no work to be done. - * - * This is currently being (ab)used to convert single files, which - * sort of spoils the timeout calculation. We establish a minimum - * timeout for single apps. - * - * The timeout calculation doesn't work at all right when a - * directory is specified. So the minimum is now a minute. At - * this point it's probably safe to just remove the timeout. - * - * The timeout is in 1/10ths of a second. - */ - dexCount = 1; - cp = dexFiles; - while (*++cp != '\0') { - if (*cp == ':') - dexCount++; - } - timeout = timeoutMult * dexCount; - if (timeout < kMinTimeout) - timeout = kMinTimeout; - - env->ReleaseStringUTFChars(bcpStr, bcp); - env->ReleaseStringUTFChars(dexFilesStr, dexFiles); - - - LOGD("TouchDex parent waiting for pid=%d (timeout=%.1fs)\n", - (int) pid, timeout / 10.0); - for (count = 0; count < timeout; count++) { - /* waitpid doesn't take a timeout, so poll and sleep */ - cc = waitpid(pid, &result, WNOHANG); - if (cc < 0) { - LOGE("waitpid(%d) failed: %s", (int) pid, strerror(errno)); - return -1; - } else if (cc == 0) { - usleep(100000); /* 0.1 sec */ - } else { - /* success! */ - break; - } - } - - if (count == timeout) { - /* note kill(0) returns 0 if the pid is a zombie */ - LOGE("timed out waiting for %d; kill(0) returns %d\n", - (int) pid, kill(pid, 0)); - logProcStatus(pid); - } else { - LOGV("TouchDex done after %d iterations (kill(0) returns %d)\n", - count, kill(pid, 0)); - } - - gettimeofday(&endWhen, NULL); - long long start = startWhen.tv_sec * 1000000 + startWhen.tv_usec; - long long end = endWhen.tv_sec * 1000000 + endWhen.tv_usec; - - LOGI("Dalvik-cache prep: status=0x%04x, finished in %dms\n", - result, (int) ((end - start) / 1000)); - - if (WIFEXITED(result)) - return WEXITSTATUS(result); - else - return result; - } -} - -/* - * Dump the contents of /proc/<pid>/status to the log file. - */ -static void logProcStatus(pid_t pid) -{ - char localBuf[256]; - FILE* fp; - - sprintf(localBuf, "/proc/%d/status", (int) pid); - fp = fopen(localBuf, "r"); - if (fp == NULL) { - LOGI("Unable to open '%s'\n", localBuf); - return; - } - - LOGI("Contents of %s:\n", localBuf); - while (true) { - fgets(localBuf, sizeof(localBuf), fp); - if (ferror(fp) || feof(fp)) - break; - LOGI(" %s", localBuf); - } - - fclose(fp); -} - -static JNINativeMethod gMethods[] = { - { "trampoline", "(Ljava/lang/String;Ljava/lang/String;)I", - (void*) dalvik_system_TouchDex_trampoline }, -}; -int register_dalvik_system_TouchDex(JNIEnv* env) { - return jniRegisterNativeMethods(env, JAVA_PACKAGE "/TouchDex", gMethods, NELEM(gMethods)); -} - -}; // namespace android diff --git a/dalvik/src/main/native/sub.mk b/dalvik/src/main/native/sub.mk index ad62649..4adc8a1 100644 --- a/dalvik/src/main/native/sub.mk +++ b/dalvik/src/main/native/sub.mk @@ -4,7 +4,6 @@ # or BUILD_*_LIBRARY. LOCAL_SRC_FILES := \ - dalvik_system_TouchDex.cpp \ org_apache_harmony_dalvik_NativeTestTarget.cpp #LOCAL_C_INCLUDES += @@ -16,4 +15,3 @@ LOCAL_SRC_FILES := \ #LOCAL_SHARED_LIBRARIES += #LOCAL_STATIC_LIBRARIES += - |