Merge "PMS: Add shell command to toggle FIXED_PERFORMANCE" into rvc-dev am: 63ff5bb6f1 am: 1fa579daba

Change-Id: I030abbf8c78ea5a8da637cdc9488c79529cb9fc6
This commit is contained in:
TreeHugger Robot
2020-03-31 21:12:35 +00:00
committed by Automerger Merge Worker
4 changed files with 61 additions and 35 deletions

View File

@@ -41,6 +41,9 @@ interface IPowerManager
oneway void setPowerBoost(int boost, int durationMs); oneway void setPowerBoost(int boost, int durationMs);
oneway void setPowerMode(int mode, boolean enabled); 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); void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag);
boolean isWakeLockLevelSupported(int level); boolean isWakeLockLevelSupported(int level);

View File

@@ -742,8 +742,8 @@ public final class PowerManagerService extends SystemService
} }
/** Wrapper for PowerManager.nativeSetPowerMode */ /** Wrapper for PowerManager.nativeSetPowerMode */
public void nativeSetPowerMode(int mode, boolean enabled) { public boolean nativeSetPowerMode(int mode, boolean enabled) {
PowerManagerService.nativeSetPowerMode(mode, enabled); return PowerManagerService.nativeSetPowerMode(mode, enabled);
} }
/** Wrapper for PowerManager.nativeSetFeature */ /** 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 nativeSetAutoSuspend(boolean enable);
private static native void nativeSendPowerHint(int hintId, int data); private static native void nativeSendPowerHint(int hintId, int data);
private static native void nativeSetPowerBoost(int boost, int durationMs); 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 void nativeSetFeature(int featureId, int data);
private static native boolean nativeForceSuspend(); private static native boolean nativeForceSuspend();
@@ -3664,9 +3664,9 @@ public final class PowerManagerService extends SystemService
mNativeWrapper.nativeSetPowerBoost(boost, durationMs); mNativeWrapper.nativeSetPowerBoost(boost, durationMs);
} }
private void setPowerModeInternal(int mode, boolean enabled) { private boolean setPowerModeInternal(int mode, boolean enabled) {
// Maybe filter the event. // Maybe filter the event.
mNativeWrapper.nativeSetPowerMode(mode, enabled); return mNativeWrapper.nativeSetPowerMode(mode, enabled);
} }
@VisibleForTesting @VisibleForTesting
@@ -4739,7 +4739,17 @@ public final class PowerManagerService extends SystemService
return; return;
} }
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); 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 @Override // Binder call

View File

@@ -18,6 +18,7 @@ package com.android.server.power;
import android.content.Intent; import android.content.Intent;
import android.os.IPowerManager; import android.os.IPowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ShellCommand; import android.os.ShellCommand;
@@ -45,6 +46,8 @@ class PowerManagerShellCommand extends ShellCommand {
return runSetAdaptiveEnabled(); return runSetAdaptiveEnabled();
case "set-mode": case "set-mode":
return runSetMode(); return runSetMode();
case "set-fixed-performance-mode-enabled":
return runSetFixedPerformanceModeEnabled();
default: default:
return handleDefaultCommands(cmd); return handleDefaultCommands(cmd);
} }
@@ -72,6 +75,18 @@ class PowerManagerShellCommand extends ShellCommand {
return 0; 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 @Override
public void onHelp() { public void onHelp() {
final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter();
@@ -84,6 +99,10 @@ class PowerManagerShellCommand extends ShellCommand {
pw.println(" set-mode MODE"); pw.println(" set-mode MODE");
pw.println(" sets the power mode of the device to 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(" 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(); pw.println();
Intent.printIntentArgsHelp(pw , ""); Intent.printIntentArgsHelp(pw , "");
} }

View File

@@ -225,7 +225,7 @@ static void setPowerBoost(Boost boost, int32_t durationMs) {
setPowerBoostWithHandle(handle, boost, 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. // Android framework only sends mode upto DISPLAY_INACTIVE.
// Need to increase the array if more mode supported. // Need to increase the array if more mode supported.
static std::array<std::atomic<HalSupport>, static_cast<int32_t>(Mode::DISPLAY_INACTIVE) + 1> 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 || if (mode > Mode::DISPLAY_INACTIVE ||
modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::OFF) { modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::OFF) {
ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); 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) { 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; isSupported ? HalSupport::ON : HalSupport::OFF;
if (!isSupported) { if (!isSupported) {
ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str()); ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str());
return; return false;
} }
} }
auto ret = handle->setMode(mode, enabled); auto ret = handle->setMode(mode, enabled);
processPowerHalReturn(ret.isOk(), "setPowerMode"); 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); std::unique_lock<std::mutex> lock(gPowerHalMutex);
if (connectPowerHalLocked() != HalVersion::AIDL) { if (connectPowerHalLocked() != HalVersion::AIDL) {
ALOGV("Power HAL AIDL not available"); ALOGV("Power HAL AIDL not available");
return; return false;
} }
sp<IPowerAidl> handle = gPowerHalAidl_; sp<IPowerAidl> handle = gPowerHalAidl_;
lock.unlock(); lock.unlock();
setPowerModeWithHandle(handle, mode, enabled); return setPowerModeWithHandle(handle, mode, enabled);
} }
static void sendPowerHint(PowerHint hintId, uint32_t data) { 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); setPowerBoost(static_cast<Boost>(boost), durationMs);
} }
static void nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode, jboolean enabled) { static jboolean nativeSetPowerMode(JNIEnv* /* env */, jclass /* clazz */, jint mode,
setPowerMode(static_cast<Mode>(mode), enabled); jboolean enabled) {
return setPowerMode(static_cast<Mode>(mode), enabled);
} }
static void nativeSetFeature(JNIEnv* /* env */, jclass /* clazz */, jint featureId, jint data) { 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[] = { static const JNINativeMethod gPowerManagerServiceMethods[] = {
/* name, signature, funcPtr */ /* name, signature, funcPtr */
{ "nativeInit", "()V", {"nativeInit", "()V", (void*)nativeInit},
(void*) nativeInit }, {"nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V",
{ "nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V", (void*)nativeAcquireSuspendBlocker},
(void*) nativeAcquireSuspendBlocker }, {"nativeForceSuspend", "()Z", (void*)nativeForceSuspend},
{ "nativeForceSuspend", "()Z", {"nativeReleaseSuspendBlocker", "(Ljava/lang/String;)V",
(void*) nativeForceSuspend }, (void*)nativeReleaseSuspendBlocker},
{ "nativeReleaseSuspendBlocker", "(Ljava/lang/String;)V", {"nativeSetInteractive", "(Z)V", (void*)nativeSetInteractive},
(void*) nativeReleaseSuspendBlocker }, {"nativeSetAutoSuspend", "(Z)V", (void*)nativeSetAutoSuspend},
{ "nativeSetInteractive", "(Z)V", {"nativeSendPowerHint", "(II)V", (void*)nativeSendPowerHint},
(void*) nativeSetInteractive }, {"nativeSetPowerBoost", "(II)V", (void*)nativeSetPowerBoost},
{ "nativeSetAutoSuspend", "(Z)V", {"nativeSetPowerMode", "(IZ)Z", (void*)nativeSetPowerMode},
(void*) nativeSetAutoSuspend }, {"nativeSetFeature", "(II)V", (void*)nativeSetFeature},
{ "nativeSendPowerHint", "(II)V",
(void*) nativeSendPowerHint },
{ "nativeSetPowerBoost", "(II)V",
(void*) nativeSetPowerBoost },
{ "nativeSetPowerMode", "(IZ)V",
(void*) nativeSetPowerMode },
{ "nativeSetFeature", "(II)V",
(void*) nativeSetFeature },
}; };
#define FIND_CLASS(var, className) \ #define FIND_CLASS(var, className) \