和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

和你一起终身学习,这里是程序员 Android

利用在高通平台中的Performance机制,可以提高性能,比如应用的启动速度,滑动流畅性等。接下来就看下高通给我们提供的Performance机制
1.该机制的JNI层实现部分位于

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

上层实现位于
Java代码

./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 v2if (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[].class};

之前调用的方法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;  }

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

相关文章友情推荐 

1. Android开发干货分享

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点个在看,方便您使用时快速查看!

高通平台Performance机制学习总结相关推荐

  1. 高通平台sensor学习

    刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...

  2. 高通平台android开发总结

    http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...

  3. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  4. 高通平台android开发总结 .

    http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...

  5. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  6. 高通平台USB 2.0和USB 3.0接口充电器识别原理

    1 BC 1.2 1.1 充电器类型探测 1)DCD:DP上有150mV(= 10uA x 15K欧姆下拉电阻)的电压,DM上电压为0 2)Primary Det(DP发起检测DM): - DP上加载 ...

  7. 高通平台android开发总结 MSM平台上的AMSS

    http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...

  8. 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

  9. 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

最新文章

  1. Java + Vue 实现的在线考试系统
  2. ABAP常用字符串操作
  3. SAP系统里的胖接口Fat interface
  4. 地表最简单安装MySQL及配置的方法,没有之一
  5. mootools框架【十】-mootools深层探讨
  6. 大数据基础技术和应用
  7. Selenium2+python自动化8-SeleniumBuilder辅助定位元素
  8. LeetCode 322. 零钱兑换(动态规划)
  9. 使用Jmeter性能测试注意点
  10. MFC的定时器OnTimer
  11. Mujoco-二阶单摆建模与控制
  12. 红黑树模拟软件_红黑树,超强动静图详解,简单易懂
  13. aspcms标签大全
  14. strut1和strut2的区别
  15. 将工业ISM和消费者ISM频段设备迁移到LoRaWAN,LoRa设备开发参考指南(二十)
  16. python 基础代谢率计算_基于python实现计算且附带进度条代码实例
  17. golang使用技巧与易错点总结
  18. UGUI源码分析:GridLayoutGroup网格布局组件与ContentSizeFitter尺寸调节组件
  19. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
  20. 使用循环语句判断月份是31天还是30天?

热门文章

  1. 2016ATF阿里巴巴技术论坛
  2. php 4大基础排序算法
  3. 【微语】第十周(01.18~01.24)
  4. (微信小程序毕业设计)小学生语文学习打卡项目开发实例(附源码+论文)
  5. 如何使用Python脚本合并多个Excel文件
  6. 解决使用IIS时连接数据库失败的问题
  7. 【读书笔记】《复杂》——自然简单而自足
  8. 【数据结构与算法】如何高效学习数据结构与算法
  9. 中奖名单:八月算法书籍免费送
  10. html将表格中的单元格合并单元格,包含合并单元格的HTML表格中的单元格宽度