cmsdk: Refactor the PerformanceManager

* Remove all code and configuration into CMSDK.
 * Deprecate the properties-based API

Change-Id: Ib14ce5b8623cb368e6b545d1f82bc9c58580e13b
This commit is contained in:
Steve Kondik
2015-11-02 17:43:44 -08:00
parent 5e522e6805
commit 620c35bd6b
11 changed files with 639 additions and 3 deletions

View File

@@ -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";
}

View 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();
}

View 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;
}
}

View 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();
}

View File

@@ -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
}