cmsdk: Refactor the PerformanceManager
* Remove all code and configuration into CMSDK. * Deprecate the properties-based API Change-Id: Ib14ce5b8623cb368e6b545d1f82bc9c58580e13b
This commit is contained in:
@@ -90,4 +90,11 @@ public final class CMContextConstants {
|
||||
* @hide
|
||||
*/
|
||||
public static final String CM_APP_SUGGEST_SERVICE = "cmappsuggest";
|
||||
|
||||
/**
|
||||
* Control device power profile and characteristics.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final String CM_PERFORMANCE_SERVICE = "cmperformance";
|
||||
}
|
||||
|
||||
29
src/java/cyanogenmod/power/IPerformanceManager.aidl
Normal file
29
src/java/cyanogenmod/power/IPerformanceManager.aidl
Normal file
@@ -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();
|
||||
}
|
||||
181
src/java/cyanogenmod/power/PerformanceManager.java
Normal file
181
src/java/cyanogenmod/power/PerformanceManager.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
29
src/java/cyanogenmod/power/PerformanceManagerInternal.java
Normal file
29
src/java/cyanogenmod/power/PerformanceManagerInternal.java
Normal file
@@ -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();
|
||||
}
|
||||
@@ -1178,6 +1178,18 @@ public final class CMSettings {
|
||||
@Deprecated
|
||||
public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
|
||||
|
||||
/**
|
||||
* Performance profile
|
||||
* @hide
|
||||
*/
|
||||
public static final String PERFORMANCE_PROFILE = "performance_profile";
|
||||
|
||||
/**
|
||||
* App-based performance profile selection
|
||||
* @hide
|
||||
*/
|
||||
public static final String APP_PERFORMANCE_PROFILES_ENABLED = "app_perf_profiles_enabled";
|
||||
|
||||
// endregion
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user