<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          高通平臺Performance機制學習總結(jié)

          共 3721字,需瀏覽 8分鐘

           ·

          2020-09-15 04:52

          和你一起終身學習,這里是程序員Android

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

          和你一起終身學習,這里是程序員 Android

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

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

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

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

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

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

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

          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的實現(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)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

          點個在看,方便您使用時快速查看!

          瀏覽 70
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  云南省医疗服务质量评估中心官网 | 亚洲日韩免费一级无码毛片 | 成人性爱视频网址导航 | 中文字幕在线观看网站 | 国产亲子乱婬一级A片借种 |