Loading core/java/android/os/IPowerManager.aidl +3 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,9 @@ interface IPowerManager oneway void setPowerBoost(int boost, int durationMs); oneway void setPowerMode(int mode, boolean enabled); // Functionally identical to setPowerMode, but returns whether the call was successful boolean setPowerModeChecked(int mode, boolean enabled); void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag); boolean isWakeLockLevelSupported(int level); Loading services/core/java/com/android/server/power/PowerManagerService.java +16 −6 Original line number Diff line number Diff line Loading @@ -742,8 +742,8 @@ public final class PowerManagerService extends SystemService } /** Wrapper for PowerManager.nativeSetPowerMode */ public void nativeSetPowerMode(int mode, boolean enabled) { PowerManagerService.nativeSetPowerMode(mode, enabled); public boolean nativeSetPowerMode(int mode, boolean enabled) { return PowerManagerService.nativeSetPowerMode(mode, enabled); } /** Wrapper for PowerManager.nativeSetFeature */ Loading Loading @@ -857,7 +857,7 @@ public final class PowerManagerService extends SystemService private static native void nativeSetAutoSuspend(boolean enable); private static native void nativeSendPowerHint(int hintId, int data); private static native void nativeSetPowerBoost(int boost, int durationMs); private static native void nativeSetPowerMode(int mode, boolean enabled); private static native boolean nativeSetPowerMode(int mode, boolean enabled); private static native void nativeSetFeature(int featureId, int data); private static native boolean nativeForceSuspend(); Loading Loading @@ -3664,9 +3664,9 @@ public final class PowerManagerService extends SystemService mNativeWrapper.nativeSetPowerBoost(boost, durationMs); } private void setPowerModeInternal(int mode, boolean enabled) { private boolean setPowerModeInternal(int mode, boolean enabled) { // Maybe filter the event. mNativeWrapper.nativeSetPowerMode(mode, enabled); return mNativeWrapper.nativeSetPowerMode(mode, enabled); } @VisibleForTesting Loading Loading @@ -4739,7 +4739,17 @@ public final class PowerManagerService extends SystemService return; } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); setPowerModeInternal(mode, enabled); setPowerModeInternal(mode, enabled); // Intentionally ignore return value } @Override // Binder call public boolean setPowerModeChecked(int mode, boolean enabled) { if (!mSystemReady) { // Service not ready yet, so who the heck cares about power hints, bah. return false; } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); return setPowerModeInternal(mode, enabled); } @Override // Binder call Loading services/core/java/com/android/server/power/PowerManagerShellCommand.java +19 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.power; import android.content.Intent; import android.os.IPowerManager; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.ShellCommand; Loading Loading @@ -45,6 +46,8 @@ class PowerManagerShellCommand extends ShellCommand { return runSetAdaptiveEnabled(); case "set-mode": return runSetMode(); case "set-fixed-performance-mode-enabled": return runSetFixedPerformanceModeEnabled(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -72,6 +75,18 @@ class PowerManagerShellCommand extends ShellCommand { return 0; } private int runSetFixedPerformanceModeEnabled() throws RemoteException { boolean success = mInterface.setPowerModeChecked( PowerManagerInternal.MODE_FIXED_PERFORMANCE, Boolean.parseBoolean(getNextArgRequired())); if (!success) { final PrintWriter ew = getErrPrintWriter(); ew.println("Failed to set FIXED_PERFORMANCE mode"); ew.println("This is likely because Power HAL AIDL is not implemented on this device"); } return success ? 0 : -1; } @Override public void onHelp() { final PrintWriter pw = getOutPrintWriter(); Loading @@ -84,6 +99,10 @@ class PowerManagerShellCommand extends ShellCommand { pw.println(" set-mode MODE"); pw.println(" sets the power mode of the device to MODE."); pw.println(" 1 turns low power mode on and 0 turns low power mode off."); pw.println(" set-fixed-performance-mode-enabled [true|false]"); pw.println(" enables or disables fixed performance mode"); pw.println(" note: this will affect system performance and should only be used"); pw.println(" during development"); pw.println(); Intent.printIntentArgsHelp(pw , ""); } Loading services/core/jni/com_android_server_power_PowerManagerService.cpp +23 −29 Original line number Diff line number Diff line Loading @@ -225,7 +225,7 @@ static void setPowerBoost(Boost boost, int32_t durationMs) { setPowerBoostWithHandle(handle, boost, durationMs); } static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enabled) { static bool setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enabled) { // Android framework only sends mode upto DISPLAY_INACTIVE. // Need to increase the array if more mode supported. static std::array<std::atomic<HalSupport>, static_cast<int32_t>(Mode::DISPLAY_INACTIVE) + 1> Loading @@ -235,7 +235,7 @@ static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enable if (mode > Mode::DISPLAY_INACTIVE || modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::OFF) { ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); return; return false; } if (modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::UNKNOWN) { Loading @@ -245,23 +245,24 @@ static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enable isSupported ? HalSupport::ON : HalSupport::OFF; if (!isSupported) { ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); return; return false; } } auto ret = handle->setMode(mode, enabled); processPowerHalReturn(ret.isOk(), "setPowerMode"); return ret.isOk(); } static void setPowerMode(Mode mode, bool enabled) { static bool setPowerMode(Mode mode, bool enabled) { std::unique_lock<std::mutex> lock(gPowerHalMutex); if (connectPowerHalLocked() != HalVersion::AIDL) { ALOGV("Power HAL AIDL not available"); return; return false; } sp<IPowerAidl> handle = gPowerHalAidl_; lock.unlock(); setPowerModeWithHandle(handle, mode, enabled); return setPowerModeWithHandle(handle, mode, enabled); } static void sendPowerHint(PowerHint hintId, uint32_t data) { Loading Loading @@ -480,8 +481,9 @@ static void nativeSetPowerBoost(JNIEnv* /* env */, jclass /* clazz */, jint boos setPowerBoost(static_cast<Boost>(boost), durationMs); } static void nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode, jboolean enabled) { setPowerMode(static_cast<Mode>(mode), enabled); static jboolean nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode, jboolean enabled) { return setPowerMode(static_cast<Mode>(mode), enabled); } static void nativeSetFeature(JNIEnv* /* env */, jclass /* clazz */, jint featureId, jint data) { Loading Loading @@ -521,26 +523,18 @@ static bool nativeForceSuspend(JNIEnv* /* env */, jclass /* clazz */) { static const JNINativeMethod gPowerManagerServiceMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "()V", (void*) nativeInit }, {"nativeInit", "()V", (void*)nativeInit}, {"nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V", (void*)nativeAcquireSuspendBlocker}, { "nativeForceSuspend", "()Z", (void*) nativeForceSuspend }, {"nativeForceSuspend", "()Z", (void*)nativeForceSuspend}, {"nativeReleaseSuspendBlocker", "(Ljava/lang/String;)V", (void*)nativeReleaseSuspendBlocker}, { "nativeSetInteractive", "(Z)V", (void*) nativeSetInteractive }, { "nativeSetAutoSuspend", "(Z)V", (void*) nativeSetAutoSuspend }, { "nativeSendPowerHint", "(II)V", (void*) nativeSendPowerHint }, { "nativeSetPowerBoost", "(II)V", (void*) nativeSetPowerBoost }, { "nativeSetPowerMode", "(IZ)V", (void*) nativeSetPowerMode }, { "nativeSetFeature", "(II)V", (void*) nativeSetFeature }, {"nativeSetInteractive", "(Z)V", (void*)nativeSetInteractive}, {"nativeSetAutoSuspend", "(Z)V", (void*)nativeSetAutoSuspend}, {"nativeSendPowerHint", "(II)V", (void*)nativeSendPowerHint}, {"nativeSetPowerBoost", "(II)V", (void*)nativeSetPowerBoost}, {"nativeSetPowerMode", "(IZ)Z", (void*)nativeSetPowerMode}, {"nativeSetFeature", "(II)V", (void*)nativeSetFeature}, }; #define FIND_CLASS(var, className) \ Loading Loading
core/java/android/os/IPowerManager.aidl +3 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,9 @@ interface IPowerManager oneway void setPowerBoost(int boost, int durationMs); oneway void setPowerMode(int mode, boolean enabled); // Functionally identical to setPowerMode, but returns whether the call was successful boolean setPowerModeChecked(int mode, boolean enabled); void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag); boolean isWakeLockLevelSupported(int level); Loading
services/core/java/com/android/server/power/PowerManagerService.java +16 −6 Original line number Diff line number Diff line Loading @@ -742,8 +742,8 @@ public final class PowerManagerService extends SystemService } /** Wrapper for PowerManager.nativeSetPowerMode */ public void nativeSetPowerMode(int mode, boolean enabled) { PowerManagerService.nativeSetPowerMode(mode, enabled); public boolean nativeSetPowerMode(int mode, boolean enabled) { return PowerManagerService.nativeSetPowerMode(mode, enabled); } /** Wrapper for PowerManager.nativeSetFeature */ Loading Loading @@ -857,7 +857,7 @@ public final class PowerManagerService extends SystemService private static native void nativeSetAutoSuspend(boolean enable); private static native void nativeSendPowerHint(int hintId, int data); private static native void nativeSetPowerBoost(int boost, int durationMs); private static native void nativeSetPowerMode(int mode, boolean enabled); private static native boolean nativeSetPowerMode(int mode, boolean enabled); private static native void nativeSetFeature(int featureId, int data); private static native boolean nativeForceSuspend(); Loading Loading @@ -3664,9 +3664,9 @@ public final class PowerManagerService extends SystemService mNativeWrapper.nativeSetPowerBoost(boost, durationMs); } private void setPowerModeInternal(int mode, boolean enabled) { private boolean setPowerModeInternal(int mode, boolean enabled) { // Maybe filter the event. mNativeWrapper.nativeSetPowerMode(mode, enabled); return mNativeWrapper.nativeSetPowerMode(mode, enabled); } @VisibleForTesting Loading Loading @@ -4739,7 +4739,17 @@ public final class PowerManagerService extends SystemService return; } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); setPowerModeInternal(mode, enabled); setPowerModeInternal(mode, enabled); // Intentionally ignore return value } @Override // Binder call public boolean setPowerModeChecked(int mode, boolean enabled) { if (!mSystemReady) { // Service not ready yet, so who the heck cares about power hints, bah. return false; } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); return setPowerModeInternal(mode, enabled); } @Override // Binder call Loading
services/core/java/com/android/server/power/PowerManagerShellCommand.java +19 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.power; import android.content.Intent; import android.os.IPowerManager; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.ShellCommand; Loading Loading @@ -45,6 +46,8 @@ class PowerManagerShellCommand extends ShellCommand { return runSetAdaptiveEnabled(); case "set-mode": return runSetMode(); case "set-fixed-performance-mode-enabled": return runSetFixedPerformanceModeEnabled(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -72,6 +75,18 @@ class PowerManagerShellCommand extends ShellCommand { return 0; } private int runSetFixedPerformanceModeEnabled() throws RemoteException { boolean success = mInterface.setPowerModeChecked( PowerManagerInternal.MODE_FIXED_PERFORMANCE, Boolean.parseBoolean(getNextArgRequired())); if (!success) { final PrintWriter ew = getErrPrintWriter(); ew.println("Failed to set FIXED_PERFORMANCE mode"); ew.println("This is likely because Power HAL AIDL is not implemented on this device"); } return success ? 0 : -1; } @Override public void onHelp() { final PrintWriter pw = getOutPrintWriter(); Loading @@ -84,6 +99,10 @@ class PowerManagerShellCommand extends ShellCommand { pw.println(" set-mode MODE"); pw.println(" sets the power mode of the device to MODE."); pw.println(" 1 turns low power mode on and 0 turns low power mode off."); pw.println(" set-fixed-performance-mode-enabled [true|false]"); pw.println(" enables or disables fixed performance mode"); pw.println(" note: this will affect system performance and should only be used"); pw.println(" during development"); pw.println(); Intent.printIntentArgsHelp(pw , ""); } Loading
services/core/jni/com_android_server_power_PowerManagerService.cpp +23 −29 Original line number Diff line number Diff line Loading @@ -225,7 +225,7 @@ static void setPowerBoost(Boost boost, int32_t durationMs) { setPowerBoostWithHandle(handle, boost, durationMs); } static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enabled) { static bool setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enabled) { // Android framework only sends mode upto DISPLAY_INACTIVE. // Need to increase the array if more mode supported. static std::array<std::atomic<HalSupport>, static_cast<int32_t>(Mode::DISPLAY_INACTIVE) + 1> Loading @@ -235,7 +235,7 @@ static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enable if (mode > Mode::DISPLAY_INACTIVE || modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::OFF) { ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); return; return false; } if (modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::UNKNOWN) { Loading @@ -245,23 +245,24 @@ static void setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enable isSupported ? HalSupport::ON : HalSupport::OFF; if (!isSupported) { ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); return; return false; } } auto ret = handle->setMode(mode, enabled); processPowerHalReturn(ret.isOk(), "setPowerMode"); return ret.isOk(); } static void setPowerMode(Mode mode, bool enabled) { static bool setPowerMode(Mode mode, bool enabled) { std::unique_lock<std::mutex> lock(gPowerHalMutex); if (connectPowerHalLocked() != HalVersion::AIDL) { ALOGV("Power HAL AIDL not available"); return; return false; } sp<IPowerAidl> handle = gPowerHalAidl_; lock.unlock(); setPowerModeWithHandle(handle, mode, enabled); return setPowerModeWithHandle(handle, mode, enabled); } static void sendPowerHint(PowerHint hintId, uint32_t data) { Loading Loading @@ -480,8 +481,9 @@ static void nativeSetPowerBoost(JNIEnv* /* env */, jclass /* clazz */, jint boos setPowerBoost(static_cast<Boost>(boost), durationMs); } static void nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode, jboolean enabled) { setPowerMode(static_cast<Mode>(mode), enabled); static jboolean nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode, jboolean enabled) { return setPowerMode(static_cast<Mode>(mode), enabled); } static void nativeSetFeature(JNIEnv* /* env */, jclass /* clazz */, jint featureId, jint data) { Loading Loading @@ -521,26 +523,18 @@ static bool nativeForceSuspend(JNIEnv* /* env */, jclass /* clazz */) { static const JNINativeMethod gPowerManagerServiceMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "()V", (void*) nativeInit }, {"nativeInit", "()V", (void*)nativeInit}, {"nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V", (void*)nativeAcquireSuspendBlocker}, { "nativeForceSuspend", "()Z", (void*) nativeForceSuspend }, {"nativeForceSuspend", "()Z", (void*)nativeForceSuspend}, {"nativeReleaseSuspendBlocker", "(Ljava/lang/String;)V", (void*)nativeReleaseSuspendBlocker}, { "nativeSetInteractive", "(Z)V", (void*) nativeSetInteractive }, { "nativeSetAutoSuspend", "(Z)V", (void*) nativeSetAutoSuspend }, { "nativeSendPowerHint", "(II)V", (void*) nativeSendPowerHint }, { "nativeSetPowerBoost", "(II)V", (void*) nativeSetPowerBoost }, { "nativeSetPowerMode", "(IZ)V", (void*) nativeSetPowerMode }, { "nativeSetFeature", "(II)V", (void*) nativeSetFeature }, {"nativeSetInteractive", "(Z)V", (void*)nativeSetInteractive}, {"nativeSetAutoSuspend", "(Z)V", (void*)nativeSetAutoSuspend}, {"nativeSendPowerHint", "(II)V", (void*)nativeSendPowerHint}, {"nativeSetPowerBoost", "(II)V", (void*)nativeSetPowerBoost}, {"nativeSetPowerMode", "(IZ)Z", (void*)nativeSetPowerMode}, {"nativeSetFeature", "(II)V", (void*)nativeSetFeature}, }; #define FIND_CLASS(var, className) \ Loading