diff --git a/Android.bp b/Android.bp index 97f3e63103835..bc39882827603 100644 --- a/Android.bp +++ b/Android.bp @@ -485,7 +485,6 @@ java_library { name: "framework-internal-utils", static_libs: [ "apex_aidl_interface-java", - "suspend_control_aidl_interface-java", "framework-protos", "updatable-driver-protos", "android.hidl.base-V1.0-java", @@ -521,6 +520,7 @@ java_library { "android.hardware.vibrator-V1.2-java", "android.hardware.vibrator-V1.3-java", "android.system.keystore2-java", + "android.system.suspend.control.internal-java", "devicepolicyprotosnano", "com.android.sysprop.apex", diff --git a/core/java/com/android/internal/os/KernelWakelockReader.java b/core/java/com/android/internal/os/KernelWakelockReader.java index 3d35d2fbaa826..f668bbaf94384 100644 --- a/core/java/com/android/internal/os/KernelWakelockReader.java +++ b/core/java/com/android/internal/os/KernelWakelockReader.java @@ -21,8 +21,8 @@ import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.os.StrictMode; import android.os.SystemClock; -import android.system.suspend.ISuspendControlService; -import android.system.suspend.WakeLockInfo; +import android.system.suspend.internal.ISuspendControlServiceInternal; +import android.system.suspend.internal.WakeLockInfo; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; @@ -66,7 +66,7 @@ public class KernelWakelockReader { private final String[] mProcWakelocksName = new String[3]; private final long[] mProcWakelocksData = new long[3]; - private ISuspendControlService mSuspendControlService = null; + private ISuspendControlServiceInternal mSuspendControlService = null; private byte[] mKernelWakelockBuffer = new byte[32 * 1024]; /** @@ -155,11 +155,12 @@ public class KernelWakelockReader { /** * Attempt to wait for suspend_control service if not immediately available. */ - private ISuspendControlService waitForSuspendControlService() throws ServiceNotFoundException { - final String name = "suspend_control"; + private ISuspendControlServiceInternal waitForSuspendControlService() + throws ServiceNotFoundException { + final String name = "suspend_control_internal"; final int numRetries = 5; for (int i = 0; i < numRetries; i++) { - mSuspendControlService = ISuspendControlService.Stub.asInterface( + mSuspendControlService = ISuspendControlServiceInternal.Stub.asInterface( ServiceManager.getService(name)); if (mSuspendControlService != null) { return mSuspendControlService; diff --git a/core/tests/coretests/src/com/android/internal/os/KernelWakelockReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelWakelockReaderTest.java index dc9208de7198f..7306b45aaa98a 100644 --- a/core/tests/coretests/src/com/android/internal/os/KernelWakelockReaderTest.java +++ b/core/tests/coretests/src/com/android/internal/os/KernelWakelockReaderTest.java @@ -16,14 +16,14 @@ package com.android.internal.os; +import android.system.suspend.internal.WakeLockInfo; + import androidx.test.filters.SmallTest; import junit.framework.TestCase; import java.nio.charset.Charset; -import android.system.suspend.WakeLockInfo; - public class KernelWakelockReaderTest extends TestCase { /** * Helper class that builds the mock Kernel module file /d/wakeup_sources. diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index aac60b406ca8b..da2c005d7332a 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -162,9 +162,10 @@ cc_defaults { "android.frameworks.schedulerservice@1.0", "android.frameworks.sensorservice@1.0", "android.frameworks.stats@1.0", + "android.system.suspend.control-cpp", + "android.system.suspend.control.internal-cpp", "android.system.suspend@1.0", "service.incremental", - "suspend_control_aidl_interface-cpp", ], static_libs: [ diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index 91f70729d5b61..63a6eedd9e668 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include "jni.h" @@ -133,6 +134,8 @@ void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t static sp gSuspendHal = nullptr; static sp gSuspendControl = nullptr; +static sp gSuspendControlInternal = + nullptr; static sp gSuspendBlocker = nullptr; static std::mutex gSuspendMutex; @@ -157,10 +160,22 @@ sp getSuspendControl() { return gSuspendControl; } +sp getSuspendControlInternal() { + static std::once_flag suspendControlFlag; + std::call_once(suspendControlFlag, []() { + gSuspendControlInternal = + waitForService( + String16("suspend_control_internal")); + LOG_ALWAYS_FATAL_IF(gSuspendControlInternal == nullptr); + }); + return gSuspendControlInternal; +} + void enableAutoSuspend() { static bool enabled = false; if (!enabled) { - sp suspendControl = getSuspendControl(); + sp suspendControl = + getSuspendControlInternal(); suspendControl->enableAutosuspend(&enabled); } @@ -227,7 +242,7 @@ static jboolean nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint m static bool nativeForceSuspend(JNIEnv* /* env */, jclass /* clazz */) { bool retval = false; - getSuspendControl()->forceSuspend(&retval); + getSuspendControlInternal()->forceSuspend(&retval); return retval; }