diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-03-31 20:38:47 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-03-31 20:38:47 +0000 |
commit | 63ff5bb6f13f567c7b5eaa24d52b7d78fbf8e7ed (patch) | |
tree | 13d1fc6131ddaef4aa88abc42b83f6a96809e507 | |
parent | 38d362ca869021d11222db4740756acd0edd7d7c (diff) | |
parent | 68a220394ccaaba85e23c1f183c60f52ef129097 (diff) |
Merge "PMS: Add shell command to toggle FIXED_PERFORMANCE" into rvc-dev
4 files changed, 61 insertions, 35 deletions
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index c44a0bd11cf7..187fd590c080 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -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); diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 86ff926af7d4..b41bc5c2dc51 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -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 */ @@ -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(); @@ -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 @@ -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 diff --git a/services/core/java/com/android/server/power/PowerManagerShellCommand.java b/services/core/java/com/android/server/power/PowerManagerShellCommand.java index edaa6d977586..ec5dcfab7f40 100644 --- a/services/core/java/com/android/server/power/PowerManagerShellCommand.java +++ b/services/core/java/com/android/server/power/PowerManagerShellCommand.java @@ -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; @@ -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); } @@ -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(); @@ -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 , ""); } diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index fe05d4ecc2fc..d19398c7d8f6 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -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> @@ -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) { @@ -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) { @@ -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) { @@ -520,27 +522,19 @@ static bool nativeForceSuspend(JNIEnv* /* env */, jclass /* clazz */) { // ---------------------------------------------------------------------------- static const JNINativeMethod gPowerManagerServiceMethods[] = { - /* name, signature, funcPtr */ - { "nativeInit", "()V", - (void*) nativeInit }, - { "nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V", - (void*) nativeAcquireSuspendBlocker }, - { "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 }, + /* name, signature, funcPtr */ + {"nativeInit", "()V", (void*)nativeInit}, + {"nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V", + (void*)nativeAcquireSuspendBlocker}, + {"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)Z", (void*)nativeSetPowerMode}, + {"nativeSetFeature", "(II)V", (void*)nativeSetFeature}, }; #define FIND_CLASS(var, className) \ |