ios手游测试时间表耗电量,一般测试多少时间的耗电量

查看: 354|回复: 5
终结者, 积分 10338, 距离下一级还需 1662 积分
精华0帖子威望0 点积分10338 点注册时间最后登录
我光玩塞尔达了,连续玩的话,2.5-3小时左右吧,电量确实不够,期待官方或是hori一类的外接电池吧。其他的游戏耗电量怎么样,有人做过极限测试吗
平民, 积分 58, 距离下一级还需 42 积分
精华0帖子威望0 点积分58 点注册时间最后登录
玩了一上午大概三个小时左右的合金弹头,满电到72%
佣兵, 积分 506, 距离下一级还需 244 积分
精华0帖子威望0 点积分506 点注册时间最后登录
铲子骑士,两个小时耗电25%左右
极限估计得连玩八个小时....
塞尔达确实3小时左右就会弹出电量低了...看来ns上下限还是很高的
战士, 积分 1035, 距离下一级还需 465 积分
精华0帖子威望0 点积分1035 点注册时间最后登录
昨天塞尔达马术,疯狂的save and load,一个半小时多,剩下31%。最后10分钟还是跑去电视上换个环境玩的,马术好难啊
佣兵, 积分 460, 距离下一级还需 290 积分
精华0帖子威望0 点积分460 点注册时间最后登录
玩Dq英雄。。。感觉比塞尔达还费电。。。3小时左右的感觉
游民, 积分 9, 距离下一级还需 1 积分
精华0帖子威望0 点积分9 点注册时间最后登录
表示不玩普通游戏
Powered by
扫描二维码
下载 A9VG 客户端(iOS, Android)内容字号:
段落设置:
字体设置:
精准搜索请尝试:
实验来揭秘:旧SIM卡耗电量真的大10倍吗?
来源:奥卡姆剃刀的博客作者:奥卡姆剃刀责编:小兽
近日,一则“手机电池不耐用或SIM卡作怪”的报道在论坛和微博上疯传,称使用两年以上的旧SIM的耗电量是新卡的10倍,10倍的意思是指原本一天一充的手机只能待机2小时了,如此荒谬的说法却鲜有人辟谣,反而不少网友表示要去花钱换卡。
报道称某人使用手机电量监控软件测得了旧SIM卡的待机功率高达0.2~0.3瓦,这显然是不可能的。GSM手机峰值功率最高可达2瓦,约以1/8的时间间隔发射,最大平均功率不过0.25瓦,而且这种最大平均功率会在开机与基站沟通后迅速降低,待机功率更低得多,约为0.02瓦左右。手机电量监控软件监控的是电压值,它对功率的解算是非常不准确的,而且随着电池的老化会越来越不准确。
为破解这个流言,今天我指导学生对新旧SIM的待机功率进行了测试,测试原理图如下:
必须把电池与手机分离开,以便于串联电流表测量供电电流,并联示波器测量供电电压,测电压用万用表就可以,使用示波器是为了可同时观察下供电电流的波形。根据电压和电流值,就可算出实际耗损的功率。
把电池从手机中取出来,在正负极的触点上焊上接线柱,以便于连接,电池电压4.18V,可供手机正常工作。
找到新旧两个SIM卡,旧卡我是使用了10年的全球通,新卡是学生的神洲行,测试用手机使用的是我现用的HTC G7。
按上面的测试原理图连接起来,分别置入新旧SIM进行对比测试,发现开机时电流会有1-2秒的峰值,然后迅速下降,供电电压保持不变,两种卡的待机电流均为几毫安到10几毫安,打电话时约几十到100多毫安,没有明显区别。
原文称新老SIM卡的电压不同,姑且不说电压与功率并不是一回事,稍懂一点电子学的都知道,这种用于识别的芯片是微功率的,对于整个手机的耗电量来说,其权重好比是烧饼上的芝麻那样微不足道。其实,智能手机最耗电的部分就是屏幕了。
像我这样动不动就打开屏幕刷微博的微博控,手机电池是一天一换的,甚至一天两换。锂电池用久了性能就会下降,这是手机待机时间越来越短的主要原因,没办法,只能多买几块电池了,我就有五块电池、两个座充和一个充电宝。
原文中的什么SIM上塑料影响磁化等说法都是毫无根据的,SIM卡老化导致接触电阻加大而大量耗电,甚至导致频繁向基站注册的说法更无道理,如果你执意担心这个问题,那也不必去花钱换卡,找块橡皮把SIM卡擦一擦就好了。
大家都在买
软媒旗下软件:
IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。
Copyright (C) , All Rights Reserved.
版权所有 鲁ICP备号Android性能专项测试之耗电量统计API
中很早就有耗电量的API,只不过一直都是隐藏的,Android系统的设置-电池功能就是调用的这个API,该API的核心部分是调用了com.android.internal.os.BatteryStatsHelper类,利用PowerProfile类,读取power_profile.xml文件,我们一起来看看具体如何计算耗电量,首先从最新版本6.0开始看
BatteryStatsHelper
其中计算耗电量的方法为490行的processAppUsage,下来一步一步来解释该方法。
耗电量的计算探究
private void processAppUsage(SparseArray asUsers) {
方法的参数是一个SparseArray数组,存储的对象是UserHandle,官方文档给出的解释是,代表一个用户,可以理解为这个类里面存储了用户的相关信息.
final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null);
然后判断该次计算是否针对所有用户,通过UserHandle的USER_ALL值来判断,该值为-1,源码的地址在/DoctorQ/platform_frameworks_base/blob/android-6.0.0_r1/core/java/android/os/UserHandle.java.
mStatsPeriod = mTypeBatteryR
然后给公共变量int类型的mStatsPeriod赋值,这个值mTypeBatteryRealtime的计算过程又在320行的refreshStats方法中:
mTypeBatteryRealtime = puteBatteryRealtime(rawRealtimeUs, mStatsType);
这里面用到了BatteryStats(mStats)类中的computeBatteryRealtime方法,该方法计算出此次统计电量的时间间隔。好,歪楼了,回到BatteryStatsHelper中。
BatterySipper osSipper =
final SparseArray uidStats = mStats.getUidStats();
final int NU = uidStats.size();
首先创建一个BatterySipper对象osSipper,该对象里面可以存储一些后续我们要计算的值,然后通过BatteryStats类对象mStats来得到一个包含Uid的对象的SparseArray组数,然后计算了一下这个数组的大小,保存在变量NU中。
for (int iu = 0; iu & NU; iu++) {
final Uid u = uidStats.valueAt(iu);
final BatterySipper app = new BatterySipper(BatterySipper.DrainType.APP, u, 0);
然后for循环计算每个Uid代表的App的耗电量,因为BatterySipper可计算的类型有三种:应用, 系统服务, 硬件类型,所以这个地方传入的是DrainType.APP,还有其他可选类型如下:
public enum DrainType {
BLUETOOTH,
FLASHLIGHT,
UNACCOUNTED,
OVERCOUNTED,
列举了目前可计算耗电量的模块。
mCpuPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mWakelockPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mMobileRadioPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mWifiPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mBluetoothPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mSensorPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mCameraPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mFlashlightPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
其中mStatsType的值为BatteryStats.STATS_SINCE_CHARGED,代表了我们的计算规则是从上次充满电后数据,还有一种规则是STATS_SINCE_UNPLUGGED是拔掉USB线后的数据。而mRawRealtime是当前时间,mRawUptime是运行时间。6.0的对各个模块的消耗都交给了单独的类去计算,这些类都继承于PowerCalculator抽象类:
蓝牙耗电:BluetoothPowerCalculator.java
摄像头耗电:CameraPowerCalculator.java
Cpu耗电:CpuPowerCalculator.java
手电筒耗电:FlashlightPowerCalculator.java
无线电耗电:MobileRadioPowerCalculator.java
传感器耗电:SensorPowerCalculator.java
Wakelock耗电:WakelockPowerCalculator.java
Wifi耗电:WifiPowerCalculator.java
这一部分我一会单独拿出来挨个解释,现在我们还是回到BatteryStatsHelper继续往下走
final double totalPower = app.sumPower();
BatterySipper#sumPower方法是统计总耗电量,方法详情如下,其中usagePowerMah这个值有点特殊,其他的上面都讲过.
* Sum all the powers and store the value into `value`.
* @return the sum of all the power in this BatterySipper.
public double sumPower() {
return totalPowerMah = usagePowerMah + wifiPowerMah + gpsPowerMah + cpuPowerMah +
sensorPowerMah + mobileRadioPowerMah + wakeLockPowerMah + cameraPowerMah +
flashlightPowerM
然后根据是否是DEBUG版本打印信息,这个没啥可说的,然后会把刚才计算的电量值添加到列表中:
// Add the app to the list if it is consuming power.
if (totalPower != 0 || u.getUid() == 0) {
// Add the app to the app list, WiFi, Bluetooth, etc, or into Other Users list.
final int uid = app.getUid();
final int userId = UserHandle.getUserId(uid);
if (uid == Process.WIFI_UID) {
mWifiSippers.add(app);
} else if (uid == Process.BLUETOOTH_UID) {
mBluetoothSippers.add(app);
} else if (!forAllUsers && asUsers.get(userId) == null
&& UserHandle.getAppId(uid) &= Process.FIRST_APPLICATION_UID) {
// We are told to just report this user's apps as one large entry.
List list = mUserSippers.get(userId);
if (list == null) {
list = new ArrayList&&();
mUserSippers.put(userId, list);
list.add(app);
mUsageList.add(app);
if (uid == 0) {
osSipper =
首先判断totalPower的值和当前uid号是否符合规则,规则为总耗电量不为0或者用户id为0.当uid表明为WIFI或者蓝牙时,添加到下面对应的列表中,一般情况下正常的应用我们直接保存到下面的mUsageList中就行就行,但是也有一些例外:
* List of apps using power.
private final List mUsageList = new ArrayList&&();
* List of apps using wifi power.
private final List mWifiSippers = new ArrayList&&();
* List of apps using bluetooth power.
private final List mBluetoothSippers = new ArrayList&&();
如果我们的系统是单用户系统,且当前的userId号不在我们的统计范围内,且其进程id号是大于Process.FIRST_APPLICATION_UID(10000,系统分配给普通应用的其实id号),我们就要将其存放到mUserSippers数组中,定义如下:
private final SparseArray<list& mUserSippers = new SparseArray&&();</list
最后判断uid为0的话,代表是Android操作系统的耗电量,赋值给osSipper(494行定义)就可以了,这样一个app的计算就完成了,遍历部分就不说了,保存这个osSipper是为了最后一步计算:
if (osSipper != null) {
// The device has probably been awake for longer than the screen on
// time and application wake lock time would account for.
// this remainder to the OS, if possible.
mWakelockPowerCalculator.calculateRemaining(osSipper, mStats, mRawRealtime,
mRawUptime, mStatsType);
osSipper.sumPower();
主流程我们已经介绍完了,下面来看各个子模块耗电量的计算
CpuPowerCalculator.java
Cpu的计算要用到PowerProfile类,该类主要是解析power_profile.xml:
这个里面存储了Cpu(cpu.speeds)的主频等级,以及每个主频每秒消耗的毫安(cpu.active),好,现在回到CpuPowerCalculator中,先来看构造方法
public CpuPowerCalculator(PowerProfile profile) {
final int speedSteps = profile.getNumSpeedSteps();
mPowerCpuNormal = new double[speedSteps];
mSpeedStepTimes = new long[speedSteps];
for (int p = 0; p & speedS p++) {
mPowerCpuNormal[p] = profile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE, p);
第一步获得Cpu有几个主频等级,因为不同等级消耗的电量不一样,所以要区别对待,根据主频的个数,然后初始化mPowerCpuNormal和mSpeedStepTimes,前者用来保存不同等级的耗电速度,后者用来保存在不同等级上耗时,然后给mPowerCpuNormal的每个元素附上值。构造方法就完成了其所有的工作,现在来计算方法calculateApp,
final int speedSteps = mSpeedStepTimes.
long totalTimeAtSpeeds = 0;
for (int step = 0; step & speedS step++) {
mSpeedStepTimes[step] = u.getTimeAtCpuSpeed(step, statsType);
totalTimeAtSpeeds += mSpeedStepTimes[step];
totalTimeAtSpeeds = Math.max(totalTimeAtSpeeds, 1);
首先得到Cpu主频等级个数,然后BatteryStats.Uid得到不同主频上执行时间,计算Cpu总耗时保存在totalTimeAtSpeeds中,
app.cpuTimeMs = (u.getUserCpuTimeUs(statsType) + u.getSystemCpuTimeUs(statsType)) / 1000;
Cpu的执行时间分很多部分,但是我们关注User和Kernal部分,也就是上面的SystemCpuTime,
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'图文结合,教您如何使用Trepn Profiler测试手机应用的耗电量
发表于 17:33|
摘要:Trepn Profiler 可以帮助准确分析手机应用耗电情况的Android应用,可以测量很多与电池有关的数据,本文将结合图文,详细讲解如何操作。
是一款帮助准确分析手机应用耗电情况的Android应用,可以测量很多与电池有关的数据,包括:
两款类似应用哪一个耗电量更低?
带广告的免费应用比无广告付费应用多消耗多少电量?
这款移动设备比另一款耗电更多吗?
开启省电模式后真的节约了很多电量吗?
设置对耗电的影响(如:关闭蓝牙、Wi-Fi、4G后节电效果明显吗?)
一款应用更新后消耗的电量比之前是多了还是少了?
移动设备不同部件消耗了多少电量(比如CPU与GPU等等)?[仅适用于骁龙MDP开发者设备]
不过在分析之前,有几样事件需要处理,以尽可能获得准确的功率测量值。
获得更准确功率测量值建议:
尽可能减少后台运行的进程 - 关掉&最近使用的应用&列表中的应用还远远不够。确保停止任何你不想包含在功率数据中的东西。重启移动设备,至设置查看当前运行的应用。等待一分钟,让安卓准备就绪,等待应用完成更新,然后继续下一步。再点击&停止&关掉非关键应用(如:脸书、谷歌搜索等)有些应用会运行多个进程,你需要一一停止,否则的话,获得的数据可能虚高。比如,在关掉不使用的应用前,我的平板在待机状态测到1043mW的值。重启后停止不使用的应用,待机状态功率数据降到726mW。功耗下降了30%。
确保移动处理器处于唤醒状态 - 如果分析超过1分钟,要确保移动处理器处于唤醒状态,以获得准确的平均功率数据。至Trepn应用的通用设置页面,勾选&分析时唤醒&。如果不这么做,平均功率数据会偏高,因为Trepn会计算短期尖峰的平均值。
Trepn Profiler 图表(未启用唤醒)
这里举例说明为什么唤醒很重要。上图与下图均为分析处于空闲状态的相同设备。在不强制唤醒处理器时,平均功率数据为1223mW。设置了唤醒后,数据为301mW。有超过900mW的差别,说明这个设置是相当重要的。&
Trepn Profiler 图表(启用唤醒)
将屏幕影响降多到最低 - 屏幕通常是移动设备耗电最大的部件。如果你要测量设备消耗的平均功率,且不需要查看屏幕的话,应该设置较短的屏幕延时(如1分钟左右)。
重点放在你要测量的数据 & 如果你想测量某个因素的功率消耗比如Wi-Fi功率,至设置页面,关闭所有与Wi-Fi无关(如GPS、蓝牙及移动网络等)的东西。降低屏幕亮度也可以帮助获得更准确的计数,因为屏幕对电池的影响实在太大了。
完成上述步骤后,就可以开始分析了。
首先打开Trepn Profiler。
然后至设置页面,选择你想测量的数据点。如果要测试功耗,选择&电池供电&,取消选择其余各项。开始工作前,确保设备属于下文所示的支持设备。如果获得很低的功率数据如0或1.80mW,说明不支持你的设备,因而不能显示准确的数据。同时还要确保设备未连接充电器,否则会导致Trepn Profiler显示不准确的功率数据。
点击&分析系统&或&分析应用&按键,开始分析。如果选择了&分析应用&,会要求你选择一个应用。
然后,进行测试或测量空闲设备功率。
完成测试后,点击&停止分析&按键,将结果保存为.db文件。然后点击&保存&。等待一分多钟,保存所有收集到的数据。
点击&运行分析&按键,检查所需数据。
使用Trepn分析游戏过程中CPU与GPU各消耗多少电量
之后点击&分析&,查看图表数据与统计。你可以使用+、-按键来放大与缩小图表视图。在统计视图中,Trepn显示平均消耗的功率,以及预计一小时将要消耗的功率(如:mWh)
完成后,点击&停止会话&按键。
祝分析愉快!
支持的移动设备,以下设备经过测试,支持电池功率测量:
Google/ASUS Nexus 7
LG Nexus 4
LG Nexus 5
HTC One (2013)
Sony Xperia ZL
HTC Droid DNA
LG Optimus G Pro
骁龙 805 (8084) MDP 平板
骁龙 800 (8974) MDP 平板
骁龙 801 (8974 AB) MDP 智能手机
骁龙 800 800 (8974) MDP 智能手机
骁龙 600 (8064) MDP 平板
骁龙 S4 Pro (8960) MDP 平板
已知不能准确获取电池功率的设备:
三星Galaxy S III (SCH-I535)
三星Galaxy S4 (SCH-I545)
三星 Galaxy S5
三星 Galaxy Note II
三星 Galaxy Note 3 (SM-N900V)
DragonBoard (所有版本)
Inforce IFC6410 SBC
内容来源:
更多内容,请详见Qualcomm开发者专区:
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 ios手游测试时间表 的文章

 

随机推荐