Merge "Add configureRpcThreadpool to java interface" am: d8dab11547 am: 791a698a6a am: 9cdec3943c
am: 1cdcaa8cf3
Change-Id: Iea02cb61c0a77eb3d94b9ebe63687457b6a5032c
diff --git a/core/java/android/os/HwBinder.java b/core/java/android/os/HwBinder.java
index b09c51c..866e20c 100644
--- a/core/java/android/os/HwBinder.java
+++ b/core/java/android/os/HwBinder.java
@@ -51,6 +51,11 @@
String serviceName)
throws RemoteException, NoSuchElementException;
+ public static native final void configureRpcThreadpool(
+ long maxThreads, boolean callerWillJoin);
+
+ public static native final void joinRpcThreadpool();
+
// Returns address of the "freeFunction".
private static native final long native_init();
diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp
index 6c6fa66..5663125 100644
--- a/core/jni/android_os_HwBinder.cpp
+++ b/core/jni/android_os_HwBinder.cpp
@@ -42,6 +42,8 @@
using android::AndroidRuntime;
using android::hardware::hidl_vec;
using android::hardware::hidl_string;
+using android::hardware::IPCThreadState;
+using android::hardware::ProcessState;
template<typename T>
using Return = android::hardware::Return<T>;
@@ -395,6 +397,15 @@
return JHwRemoteBinder::NewObject(env, service);
}
+void JHwBinder_native_configureRpcThreadpool(jlong maxThreads, jboolean callerWillJoin) {
+ CHECK(maxThreads > 0);
+ ProcessState::self()->setThreadPoolConfiguration(maxThreads, callerWillJoin /*callerJoinsPool*/);
+}
+
+void JHwBinder_native_joinRpcThreadpool() {
+ IPCThreadState::self()->joinThreadPool();
+}
+
static JNINativeMethod gMethods[] = {
{ "native_init", "()J", (void *)JHwBinder_native_init },
{ "native_setup", "()V", (void *)JHwBinder_native_setup },
@@ -408,6 +419,12 @@
{ "getService", "(Ljava/lang/String;Ljava/lang/String;)L" PACKAGE_PATH "/IHwBinder;",
(void *)JHwBinder_native_getService },
+
+ { "configureRpcThreadpool", "(JZ)V",
+ (void *)JHwBinder_native_configureRpcThreadpool },
+
+ { "joinRpcThreadpool", "()V",
+ (void *)JHwBinder_native_joinRpcThreadpool },
};
namespace android {