1. 高通平臺Performance機(jī)制學(xué)習(xí)總結(jié)

        共 3721字,需瀏覽 8分鐘

         ·

        2020-09-15 04:52

        和你一起終身學(xué)習(xí),這里是程序員Android

        經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點(diǎn):

        和你一起終身學(xué)習(xí),這里是程序員 Android

        利用在高通平臺中的Performance機(jī)制,可以提高性能,比如應(yīng)用的啟動速度,滑動流暢性等。接下來就看下高通給我們提供的Performance機(jī)制
        1.該機(jī)制的JNI層實(shí)現(xiàn)部分位于

        ./vendor/qcom/proprietary/android-perf/QPerformance/jni/com_qualcomm_qti_Performance.cpp

        上層實(shí)現(xiàn)位于
        Java代碼

        ./vendor/qcom/proprietary/android-perf/QPerformance/src/com/qualcomm/qti/Performance.java

        2.framework層的使用需要通過反射機(jī)制調(diào)用com.qualcomm.qti.Performance
        具體實(shí)現(xiàn)在:

        ./frameworks/base/core/java/android/util/BoostFramework.java

        在BoostFramework的構(gòu)造函數(shù)中通過反射調(diào)用Performance對象,而BoostFramework中的好多方法是被hide掉的,可能是為了安全考慮吧,在應(yīng)用層無法使用,只能在系統(tǒng)層使用。現(xiàn)在舉一個例子當(dāng)應(yīng)用啟動時創(chuàng)建進(jìn)程的時候可以使用高通給我們提供的Performance機(jī)制。
        在ActivityManagerService中,構(gòu)造中會判斷是否啟動該機(jī)制

        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中進(jìn)行判斷:

        // 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的實(shí)現(xiàn)
        構(gòu)造函數(shù)中通過反射獲得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[].class};

        之前調(diào)用的方法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;
        }

        通過構(gòu)造中的mAcquireFunc = perfClass.getDeclaredMethod("perfLockAcquire", argClasses);看其調(diào)用的還是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;
        }

        原文鏈接:https://www.iteye.com/blog/429564140-2410445

        相關(guān)文章友情推薦?

        1. Android開發(fā)干貨分享

        至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

        點(diǎn)個在看,方便您使用時快速查看!

        瀏覽 70
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 无码国产精品一区二区三 | 美女污污网站 | 免费女人18**a级毛片视频 | 樱桃视频污 | 国产精品色婷婷AV挤奶 |