高通平台Performance机制学习总结
利用在高通平台中的Performance机制,可以提高性能,比如应用的启动速度,滑动流畅性等。接下来就看下高通给我们提供的Performance机制
1.该机制的JNI层实现部分位于
./vendor/qcom/proprietary/android-perf/QPerformance/jni/com_qualcomm_qti_Performance.cpp
上层实现位于
./vendor/qcom/proprietary/android-perf/QPerformance/src/com/qualcomm/qti/Performance.java
2.framework层的使用需要通过反射机制调用com.qualcomm.qti.Performance
具体实现在:
./frameworks/base/core/java/android/util/BoostFramework.java
在BoostFramework的构造函数中通过反射调用Performance对象,而BoostFramework中的好多方法是被hide掉的,可能是为了安全考虑吧,在应用层无法使用,只能在系统层使用。现在举一个例子当应用启动时创建进程的时候可以使用高通给我们提供的Performance机制。
在ActivityManagerService中,构造中会判断是否启动该机制
mIsLaunchBoostv2_enabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_enableLaunchBoostv2);
if(mIsLaunchBoostv2_enabled) {
lBoost_v2_TimeOut = mContext.getResources().getInteger(
com.android.internal.R.integer.lboostv2_timeout_param);
lBoost_v2_ParamVal = mContext.getResources().getIntArray(
com.android.internal.R.array.lboostv2_param_value);
}
在startProcessLocked中进行判断:
// Start launch boost v2
if (mIsLaunchBoostv2_enabled == true && sPerfBoost_v2 == null) {
sPerfBoost_v2 = new BoostFramework();
}
if (sPerfBoost_v2 != null) {
sPerfBoost_v2.perfLockAcquire(lBoost_v2_TimeOut, lBoost_v2_ParamVal);
sIsLaunchBoostv2_set = true;
}
接下来看一下核心部分BoostFramework的实现
构造函数中通过反射获得Performance对象
public BoostFramework() {
if (mIsLoaded == false) {
try {
Class perfClass;
PathClassLoader perfClassLoader;
perfClassLoader = new PathClassLoader(PERFORMANCE_JAR,
ClassLoader.getSystemClassLoader());
perfClass = perfClassLoader.loadClass(PERFORMANCE_CLASS);
mConstructor = perfClass.getConstructor();
Class[] argClasses = new Class[] {int.class, int[].class};
mAcquireFunc = perfClass.getDeclaredMethod("perfLockAcquire", argClasses);
Log.v(TAG,"mAcquireFunc method = " + mAcquireFunc);
argClasses = new Class[] {};
mReleaseFunc = perfClass.getDeclaredMethod("perfLockRelease", argClasses);
Log.v(TAG,"mReleaseFunc method = " + mReleaseFunc);
argClasses = new Class[] {MotionEvent.class, DisplayMetrics.class, int.class, int[].cla
之前调用的方法perfLockAcquire的真是面目
/** @hide */
public int perfLockAcquire(int duration, int... list) {
int ret = -1;
try {
Object retVal = mAcquireFunc.invoke(mPerf, duration, list);
ret = (int)retVal;
} catch(Exception e) {
Log.e(TAG,"Exception " + e);
}
return ret;
}
通过构造中的mAcquireFunc = perfClass.getDeclaredMethod("perfLockAcquire", argClasses);看其调用的还是Performance中的perfLockAcquire方法。
在Performance.java中会深入到JNI层:
static {
try {
System.loadLibrary("qti_performance");
} catch (UnsatisfiedLinkError e) {
}
}
/** &hide */
public int perfLockAcquire(int duration, int... list) {
int rc = REQUEST_SUCCEEDED;
handle = native_perf_lock_acq(handle, duration, list);
if (handle == 0)
rc = REQUEST_FAILED;
return rc;
}
分享到:
相关推荐
总结了msm8916等高通平台的RF Driver调试,包含PA,ASM,RFC
shell脚本,打开高通机器的performance模式,包括cpu和gpu
绝对超值的文档,详细讲解高通平台开发相关经验(boot, kernel, android)等。
高通平台android-modem 架构总结,希望大家都能好好学习,希望下载的给好评。
本章介绍Security相关的术语以及基本知识,因为对于初次接触Security的同 事来说,一些基本概念和术语的理解很有必要。 首先,要理解Security研究需要解决的问题,要达到的目的是什么?无非是 要保证数据在传播过程...
高通平台android开发总结 相关内容介绍 相当详细
高通平台MDM9628最新的学习PDF资料
高通平台方案充电方案过程总结, 1.锂离子电池充放电特性 1.1. 锂离子电池充电电压的上限必须受控制,一般不超过4.2V。(视具体情况,一般控制在4.10V- 4.35V不等) 1.2.单体电池充电电流通常限制在1C以下。 1.3....
从设计到高通平台工具使用到调试
高通平台充电方案高通平台充电方案高通平台充电方案
高通平台camera框架分析,详细的camera hal和驱动之间的关系。
高通平台学习 转 Device Tree常用方法解析 帮助初学者入门高通驱动开发学习 资料少 入门不易
高通平台SPI显示 高通平台SPI显示 高通平台SPI显示 高通平台SPI显示 recovery
1.1 搭建高通平台环境开发环境 2 1.2 搭建高通平台环境开发环境 3 1.3 高通平台,android和 modem 编译流程分析 25 1.4 高通平台 7630 启动流程分析 75
描述高通平台通过DTS初始化硬件的基本思路,很有启发意义:转别人的,因为发现网上高通资料好少,入门不易!
高通平台重力传感器调试。
在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析
手机检测温度工具 高通平台专用 手机检测温度工具 高通平台专用手机检测温度工具 高通平台专用
高通平台充电介绍,7225平台或者7625平台都能用