From a95dacafdf95b7b29484383eabb5ed49e0126bec Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sat, 24 Oct 2015 00:11:21 +0200 Subject: [PATCH] DroidFish: Run the engine process with lower priority. --- DroidFish/jni/nativeutil.cpp | 16 ++++++++++++++-- .../org/petero/droidfish/engine/EngineUtil.java | 3 +++ .../petero/droidfish/engine/ExternalEngine.java | 12 ++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/DroidFish/jni/nativeutil.cpp b/DroidFish/jni/nativeutil.cpp index 7ff5c85..de93aa2 100644 --- a/DroidFish/jni/nativeutil.cpp +++ b/DroidFish/jni/nativeutil.cpp @@ -20,6 +20,8 @@ #include #include #include +#include +#include /* * Class: org_petero_droidfish_engine_EngineUtil @@ -27,8 +29,7 @@ * Signature: (Ljava/lang/String;)Z */ extern "C" JNIEXPORT jboolean JNICALL Java_org_petero_droidfish_engine_EngineUtil_chmod - (JNIEnv *env, jclass, jstring jExePath) -{ + (JNIEnv *env, jclass, jstring jExePath) { const char* exePath = (*env).GetStringUTFChars(jExePath, NULL); if (!exePath) return false; @@ -36,3 +37,14 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_petero_droidfish_engine_EngineUti (*env).ReleaseStringUTFChars(jExePath, exePath); return ret; } + +/* + * Class: org_petero_droidfish_engine_EngineUtil + * Method: reNice + * Signature: (II)V + */ +extern "C" JNIEXPORT void JNICALL Java_org_petero_droidfish_engine_EngineUtil_reNice + (JNIEnv *env, jclass, jint pid, jint prio) { + setpriority(PRIO_PROCESS, pid, prio); +} + diff --git a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java index 9168b4e..7c00dba 100644 --- a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java +++ b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java @@ -107,6 +107,9 @@ public class EngineUtil { /** Executes chmod 744 exePath. */ final static native boolean chmod(String exePath); + /** Change the priority of a process. */ + final static native void reNice(int pid, int prio); + /** For synchronizing non thread safe native calls. */ public static Object nativeLock = new Object(); } diff --git a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java index be3ff57..f96ab60 100644 --- a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java @@ -77,6 +77,7 @@ public class ExternalEngine extends UCIEngineBase { synchronized (EngineUtil.nativeLock) { engineProc = pb.start(); } + reNice(engineProc); startupThread = new Thread(new Runnable() { @Override @@ -168,6 +169,17 @@ public class ExternalEngine extends UCIEngineBase { } } + /** Try to change the engine process priority to 5. */ + private void reNice(Process proc) { + try { + java.lang.reflect.Field f = engineProc.getClass().getDeclaredField("pid"); + f.setAccessible(true); + int pid = f.getInt(engineProc); + EngineUtil.reNice(pid, 10); + } catch (Throwable t) { + } + } + /** Remove all files except exePath from exeDir. */ private void cleanUpExeDir(File exeDir, String exePath) { try {