***
4284 ワード
詳細
***
ハイパスプラットフォームにおけるPerformanceメカニズムを利用することで、アプリケーションの起動速度、スライドのスムーズ性など、性能を向上させることができます.次に、高通が提供してくれたPerformanceメカニズムを見てみましょう.
1.この機構のJNI層実現部分は
上位実装位置
2.framework層の使用は、反射機構によりcomを呼び出す必要がある.qualcomm.qti.Performance
具体的な実装:
BoostFrameworkのコンストラクション関数で反射によってPerformanceオブジェクトが呼び出されますが、BoostFrameworkの多くの方法はhideによって落とされています.安全のためか、アプリケーション層では使用できず、システム層でしか使用できません.次に、アプリケーションが起動したときにプロセスを作成するときに、私たちに提供されたPerformanceメカニズムを使用することができます.
ActivityManagerServiceでは、このメカニズムが起動されたかどうかを構造で判断します.
startProcessLockedで判断:
次にコア部分BoostFrameworkの実装を見てみましょう
コンストラクション関数で反射によるPerformanceオブジェクトの取得
以前に呼び出されたメソッドperfLockAcquireの正体
構造中のmAcquireFunc=perfClass.getDeclaredMethod("perfLockAcquire", argClasses);PerformanceのperfLockAcquireメソッドが呼び出されているかどうかを見てみましょう.
Performance.JAvaではJNI層に深く入り込みます.
***
ハイパスプラットフォームにおける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;
}