diff options
author | Steve Kondik <steve@cyngn.com> | 2015-11-02 17:43:44 -0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-03 17:59:44 -0800 |
commit | 620c35bd6bfdf71e2cd7c9f4bd69664a4f39a91e (patch) | |
tree | b3667e59035ec270673735bdc11cc434ec61ea7a /src/java/cyanogenmod/power | |
parent | 5e522e6805591b17c51759ac98dc61fb719cca28 (diff) | |
download | vendor_cmsdk-620c35bd6bfdf71e2cd7c9f4bd69664a4f39a91e.zip vendor_cmsdk-620c35bd6bfdf71e2cd7c9f4bd69664a4f39a91e.tar.gz vendor_cmsdk-620c35bd6bfdf71e2cd7c9f4bd69664a4f39a91e.tar.bz2 |
cmsdk: Refactor the PerformanceManager
* Remove all code and configuration into CMSDK.
* Deprecate the properties-based API
Change-Id: Ib14ce5b8623cb368e6b545d1f82bc9c58580e13b
Diffstat (limited to 'src/java/cyanogenmod/power')
-rw-r--r-- | src/java/cyanogenmod/power/IPerformanceManager.aidl | 29 | ||||
-rw-r--r-- | src/java/cyanogenmod/power/PerformanceManager.java | 181 | ||||
-rw-r--r-- | src/java/cyanogenmod/power/PerformanceManagerInternal.java | 29 |
3 files changed, 239 insertions, 0 deletions
diff --git a/src/java/cyanogenmod/power/IPerformanceManager.aidl b/src/java/cyanogenmod/power/IPerformanceManager.aidl new file mode 100644 index 0000000..106854f --- /dev/null +++ b/src/java/cyanogenmod/power/IPerformanceManager.aidl @@ -0,0 +1,29 @@ +/* + * Copyright 2015, The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cyanogenmod.power; + +/** @hide */ +interface IPerformanceManager { + + oneway void cpuBoost(int duration); + + boolean setPowerProfile(int profile); + + int getPowerProfile(); + + int getNumberOfProfiles(); +} diff --git a/src/java/cyanogenmod/power/PerformanceManager.java b/src/java/cyanogenmod/power/PerformanceManager.java new file mode 100644 index 0000000..f91bc98 --- /dev/null +++ b/src/java/cyanogenmod/power/PerformanceManager.java @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cyanogenmod.power; + +import android.content.Context; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +import cyanogenmod.app.CMContextConstants; + +/** + * + */ +public class PerformanceManager { + + public static final String TAG = "PerformanceManager"; + + /** + * Power save profile + * + * This mode sacrifices performance for maximum power saving. + */ + public static final int PROFILE_POWER_SAVE = 0; + + /** + * Balanced power profile + * + * The default mode for balanced power savings and performance + */ + public static final int PROFILE_BALANCED = 1; + + /** + * High-performance profile + * + * This mode sacrifices power for maximum performance + */ + public static final int PROFILE_HIGH_PERFORMANCE = 2; + + /** + * Power save bias profile + * + * This mode decreases performance slightly to improve + * power savings. + */ + public static final int PROFILE_BIAS_POWER_SAVE = 3; + + /** + * Performance bias profile + * + * This mode improves performance at the cost of some power. + */ + public static final int PROFILE_BIAS_PERFORMANCE = 4; + + private int mNumberOfProfiles = 0; + + /** + * Broadcast sent when profile is changed + */ + public static final String POWER_PROFILE_CHANGED = "cyanogenmod.power.PROFILE_CHANGED"; + + private static IPerformanceManager sService; + private static PerformanceManager sInstance; + + private PerformanceManager(Context context) { + sService = getService(); + + try { + if (sService != null) { + mNumberOfProfiles = sService.getNumberOfProfiles(); + } + } catch (RemoteException e) { + } + } + + public static PerformanceManager getInstance(Context context) { + if (sInstance == null) { + sInstance = new PerformanceManager(context); + } + return sInstance; + } + + private static IPerformanceManager getService() { + if (sService != null) { + return sService; + } + IBinder b = ServiceManager.getService(CMContextConstants.CM_PERFORMANCE_SERVICE); + if (b != null) { + sService = IPerformanceManager.Stub.asInterface(b); + return sService; + } + return null; + } + + private boolean checkService() { + if (sService == null) { + Log.w(TAG, "not connected to PerformanceManagerService"); + return false; + } + return true; + } + + /** + * Boost the CPU. Boosts the cpu for the given duration in microseconds. + * Requires the {@link android.Manifest.permission#CPU_BOOST} permission. + * + * @param duration in microseconds to boost the CPU + * @hide + */ + public void cpuBoost(int duration) + { + try { + if (checkService()) { + sService.cpuBoost(duration); + } + } catch (RemoteException e) { + } + } + + /** + * Returns the number of supported profiles, zero if unsupported + * This is queried via the PowerHAL. + */ + public int getNumberOfProfiles() { + return mNumberOfProfiles; + } + + /** + * Set the system power profile + * + * @throws IllegalArgumentException if invalid + */ + public boolean setPowerProfile(int profile) { + if (mNumberOfProfiles < 1) { + throw new IllegalArgumentException("Power profiles not enabled on this system!"); + } + + boolean changed = false; + try { + if (checkService()) { + changed = sService.setPowerProfile(profile); + } + } catch (RemoteException e) { + throw new IllegalArgumentException(e); + } + return changed; + } + + /** + * Gets the current power profile + * + * Returns null if power profiles are not enabled + */ + public int getPowerProfile() { + int ret = -1; + if (mNumberOfProfiles > 0) { + try { + if (checkService()) { + ret = sService.getPowerProfile(); + } + } catch (RemoteException e) { + // nothing + } + } + return ret; + } +} diff --git a/src/java/cyanogenmod/power/PerformanceManagerInternal.java b/src/java/cyanogenmod/power/PerformanceManagerInternal.java new file mode 100644 index 0000000..67f158a --- /dev/null +++ b/src/java/cyanogenmod/power/PerformanceManagerInternal.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cyanogenmod.power; + +import android.content.Intent; + +/** {@hide} */ +public interface PerformanceManagerInternal { + + void activityResumed(Intent intent); + + void cpuBoost(int duration); + + void launchBoost(); +} |