Merge "PMS: Add shell command to toggle FIXED_PERFORMANCE" into rvc-dev am: 63ff5bb6f1 am: 1fa579daba
Change-Id: I030abbf8c78ea5a8da637cdc9488c79529cb9fc6
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 , "");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) \
|
||||||
|
|||||||
Reference in New Issue
Block a user