Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1948f8a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "PMS: Add shell command to toggle FIXED_PERFORMANCE" into rvc-dev am:...

Merge "PMS: Add shell command to toggle FIXED_PERFORMANCE" into rvc-dev am: 63ff5bb6 am: 1fa579da am: 4549843e

Change-Id: Iba78767c6d8dd5e12cc103e45b5841a398547eaf
parents de4ab813 4549843e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);

+16 −6
Original line number Diff line number Diff line
@@ -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
+19 −0
Original line number Diff line number Diff line
@@ -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 , "");
    }
+23 −29
Original line number Diff line number Diff line
@@ -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) {
@@ -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) \