Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0af843c authored by Hiroshi Yamauchi's avatar Hiroshi Yamauchi Committed by Android (Google) Code Review
Browse files

Merge "Fix the reset of boosted zygote thread priority."

parents 2781410d 1e3db871
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -100,6 +100,8 @@ public final class Zygote {
          int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose,
          int[] fdsToIgnore, String instructionSet, String appDataDir) {
        VM_HOOKS.preFork();
        // Resets nice priority for zygote process.
        resetNicePriority();
        int pid = nativeForkAndSpecialize(
                  uid, gid, gids, debugFlags, rlimits, mountExternal, seInfo, niceName, fdsToClose,
                  fdsToIgnore, instructionSet, appDataDir);
@@ -144,6 +146,8 @@ public final class Zygote {
    public static int forkSystemServer(int uid, int gid, int[] gids, int debugFlags,
            int[][] rlimits, long permittedCapabilities, long effectiveCapabilities) {
        VM_HOOKS.preFork();
        // Resets nice priority for zygote process.
        resetNicePriority();
        int pid = nativeForkSystemServer(
                uid, gid, gids, debugFlags, rlimits, permittedCapabilities, effectiveCapabilities);
        // Enable tracing as soon as we enter the system_server.
@@ -174,9 +178,13 @@ public final class Zygote {
    }

    /**
     * Resets this process' priority to the default value (0).
     * Resets the calling thread priority to the default value (Thread.NORM_PRIORITY
     * or nice value 0). This updates both the priority value in java.lang.Thread and
     * the nice value (setpriority).
     */
    native static void nativeResetNicePriority();
    static void resetNicePriority() {
        Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
    }

    /**
     * Executes "/system/bin/sh -c <command>" using the exec() system call.
+1 −1
Original line number Diff line number Diff line
@@ -715,7 +715,7 @@ public class ZygoteInit {
                    SystemClock.uptimeMillis());
                bootTimingsTraceLog.traceEnd(); // ZygotePreload
            } else {
                Zygote.nativeResetNicePriority();
                Zygote.resetNicePriority();
            }

            // Finish profiling the zygote initialization.
+1 −27
Original line number Diff line number Diff line
@@ -155,24 +155,6 @@ static void SetSigChldHandler() {
  }
}

// Resets nice priority for zygote process. Zygote priority can be set
// to high value during boot phase to speed it up. We want to ensure
// zygote is running at normal priority before childs are forked from it.
//
// This ends up being called repeatedly before each fork(), but there's
// no real harm in that.
static void ResetNicePriority(JNIEnv* env) {
  errno = 0;
  int prio = getpriority(PRIO_PROCESS, 0);
  if (prio == -1 && errno != 0) {
    ALOGW("getpriority failed: %s\n", strerror(errno));
  }
  if (prio != 0 && setpriority(PRIO_PROCESS, 0, 0) != 0) {
    ALOGE("setpriority(%d, 0, 0) failed: %s", PRIO_PROCESS, strerror(errno));
    RuntimeAbort(env, __LINE__, "setpriority failed");
  }
}

// Sets the SIGCHLD handler back to default behavior in zygote children.
static void UnsetSigChldHandler() {
  struct sigaction sa;
@@ -526,8 +508,6 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
    RuntimeAbort(env, __LINE__, "Unable to restat file descriptor table.");
  }

  ResetNicePriority(env);

  pid_t pid = fork();

  if (pid == 0) {
@@ -806,10 +786,6 @@ static void com_android_internal_os_Zygote_nativeUnmountStorageOnInit(JNIEnv* en
    UnmountTree("/storage");
}

static void com_android_internal_os_Zygote_nativeResetNicePriority(JNIEnv* env, jclass) {
    ResetNicePriority(env);
}

static const JNINativeMethod gMethods[] = {
    { "nativeForkAndSpecialize",
      "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[ILjava/lang/String;Ljava/lang/String;)I",
@@ -819,9 +795,7 @@ static const JNINativeMethod gMethods[] = {
    { "nativeAllowFileAcrossFork", "(Ljava/lang/String;)V",
      (void *) com_android_internal_os_Zygote_nativeAllowFileAcrossFork },
    { "nativeUnmountStorageOnInit", "()V",
      (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit },
    { "nativeResetNicePriority", "()V",
      (void *) com_android_internal_os_Zygote_nativeResetNicePriority }
      (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit }
};

int register_com_android_internal_os_Zygote(JNIEnv* env) {