Android CPU耗电量测试

在测试Android app时,不仅仅要关注app的功能,也好关注app的性能指标,cpu、内存、流量、电量等。简单介绍下电量测试中的cpu耗电。

影响耗电的因素

  • CPU
  • Screen
  • Network (3G/wifi)
  • sensor & gps
  • WakeLock

电量测试方法

  1. 安装电池管理的软件,管家、卫士一类的软件。
  2. 自己读取Android的内核日志,电量变化广播等。
  3. 物理设备,安培轮等

这里主要介绍读取内核文件,计算出cpu的电量消耗。

步骤主要如下:

  1. 抓取指定app占用的cpu时间
  2. 获取cpu在各个频率下的运行时间
  3. 根据不同频率下的不同耗电功率,计算出总的耗电消耗。

POWER_PROFILE.XML

每个Android设备都存在这样的一个文件,这个文件定义了各个硬件的功率。不同的手机,内容不同。我的如下(单位mAh,意思是一个小时,能耗电多少mAh):

    <?xml version="1.0" encoding="utf-8"?>     <device name="Android">         <item name="none">0</item>         <item name="screen.on">71</item>         <item name="bluetooth.active">17</item>         <item name="bluetooth.on">0.3</item>         <item name="screen.full">380</item>         <item name="wifi.on">0.3</item>         <item name="wifi.active">96</item>         <item name="wifi.scan">70</item>         <item name="dsp.audio">44</item>         <item name="dsp.video">280</item>         <item name="radio.active">250</item>         <item name="radio.scanning">82</item>         <item name="gps.on">1</item>         <array name="radio.on">             <value>3.4</value>             <value>3.4</value>         </array>         <array name="cpu.speeds">             <value>12000000</value>             <value>10000000</value>             <value>800000</value>             <value>500000</value>             <value>200000</value>         </array>         <item name="cpu.idle">4</item>             <array name="cpu.active">             <value>577</value>             <value>408</value>             <value>249</value>             <value>148</value>             <value>55</value>         </array>         <item name="battery.capacity">2100</item>     </device> 

如何得到power_profile.xml文件

该文件存在手机的/system/framework/framework-res.apk包里,需要使用apk-tool对apk进行反编译,反编译后,在$output/res/xml文件夹中。

获取APP执行时间

  1. 获取pid, adb shell ps | grep {appName}或者adb shell top -n 1 | grep ${appName}
  2. 获取pid执行时间,cat /proc/${pid}/stat, 这个文件中的第14列到17列相加得到的就是从开机到此刻,app一共占用多少cpu时间(设这里值为T1),这里的单位是jiffies, 这个单位的意思是cpu的运算次数,如果cpu的频率为1G,那么1 jiffies = 1/1G 秒。
  3. 不断去cat /proc/${pid}/stat,获取cpu占用时间,减去第二步的T1,就是这段时间app的cpu占用时间。
  4. 获取cpu在不同频率下的工作几率。android的cpu会在不同主频下工作,/sys/devices/system/cpu/cpu0/cpufreq/stats/time_instate
    放了cpu在各个频段的占用时间,注意是整个系统占用时间,根据这个几率,计算出cpu的每个频率下的工作时间,然后再乘以power_profile.xml中定义的单位耗电,累加得到cpu消耗。
  5. http://www.yeetrack.com/?p=1045

Android CPU耗电量测试的更多相关文章

  1. APP耗电量测试

    现象 APP耗电,导致电池续航能力不佳,如下图,在小米MIX2和iPhone X机型上后台静默一小时各应用的耗电排行: 基本概念 相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为 ...

  2. 深入浅出Android App耗电量统计

    前言 在Android统计App耗电量比较麻烦,直至Android 4.4,它仍没公开“电量统计”API或文档……额,是的,仅没有公开,并不是没有.平时在手机“设置- 电量”看到的数据 就是系统调用内 ...

  3. [Android] 深入浅出Android App耗电量统计

    reference to : http://www.cnblogs.com/hyddd/p/4402621.html 前言 在Android统计App耗电量比较麻烦,直至Android 4.4,它仍没 ...

  4. Android流畅度测试

    Android流畅度测试 测试方法一:系统自带-开发者模式 测试方法二:FPS Meter测试安卓帧数 H5页面加载速度:window.performance.timing 测试方法一:系统自带-开发 ...

  5. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用

    作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  6. Android Monkey压力测试使用

    一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换.横竖屏.应用关闭)实现对 ...

  7. Android Monkey压力测试环境搭建及使用

    Android Monkey压力测试学习笔记 步骤:下载SDK -> 解压进入SDK Manager下载系统 -> 配置环境变量 -> 创建虚拟设备或连接真机 -> 进入命令模 ...

  8. Android应用耗电量统计,无需USB连接

    Android应用耗电量统计一直是一个很头疼的问题,手工统计耗时太长,自动化统计又不是非常精准(执行自动化代码需要通过USB连接,而USB又会充电,这就造成统计数据不准).后来从前辈那里得知可以通过a ...

  9. 转 Android Monkey压力测试使用

    转自:https://www.jianshu.com/p/c8844327f5e9 一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送 ...

随机推荐

  1. Linux环境 vi/vim ESC无法退出原因

    原因是输入模式是中文的,需要切换成英文半角符号输入命令!

  2. Integer诡异特性

    package 代码测试; public class ceshi { public static void main(String[] args) { Integer i1=100; Integer ...

  3. jquery 页面分页的实现

      <!DOCTYPE html> <html> <head> <title>分页</title> <link rel="s ...

  4. jpg、gif、png-8、png-24的区别

    一.gif格式的特点 1.透明性.gif是一种布尔透明类型,即它可以是全透明,也可以是全不透明,但是没有半透明 2.动画.gif支持动画 3.无损耗性.gif是一种无损耗的图像格式,这意味着你可以对g ...

  5. javaweb笔记—04(预编译和泛型)

    预编译:ps对象1.ps可进行预编译,占位符传值,性能高于sta的(数据库驱动层有优化)2.比较灵活,数据库将预编译的SQL缓存了,第二次访问,就不用预编译,直接执行.3.较为安全,不会发生SQL注入 ...

  6. 如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码

    https://blog.csdn.net/jmd88888888/article/details/70919378

  7. centos 内存清理

    在清理前内存使用情况 free -m 用以下命令清理内存 echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况再用以下命令看看. free –m 多出很多内存了 ...

  8. android 颜色值参考,(有颜色图

    ) 2011-10-13 19:55:30| 分类: android | 标签:android颜色值|字号大中小 订阅 Android 常用RGB值以及中英文名称   颜 色 RGB值 英文名 中文名 ...

  9. ORA-00600: internal error code, arguments: [13030], [20]一例解决

    两年没有接触oracle了,中午,一环境update from的时候出现ORA-00600: internal error code, arguments: [13030], [20]异常,经查,官网 ...

  10. 让bat批处理后台运行,不显示cmd窗口(完全静化)

    背景:由于我有某云的服务器(win server), 上面挂有好几个程序, 为了更好的监控他们, 我使用了一个最笨的方法, 就是下面的方法. 实现:我要监控的程序有三个, 成为ABC吧, 下面先把三个 ...