一、Sensor功耗问题分类

目前所遇到的sensor功耗问题主要包括以下几类:
待机功耗:

  • SSC子系统异常,导致系统无法进入AOSD
  • SSC子系统异常,导致频繁唤醒AP
  • SSC子系统的GPIO/PMIC配置错误,导致系统存在漏电

运行功耗:

  • SSC子系统的sensor工作模式异常,导致系统功耗增大
  • Android上层服务未正常关闭sensorservice,导致系统功耗增大

在sensor功耗问题的分析中,sensor自身工作行为所产生的耗电是非常小的,大多数功耗问题都是由SSC(Snapdragon Sensor Core)子系统异常或是Android上层服务异常调用sensorservice引起。

二、Sensor功耗问题分析方法

不同类型的sensor功耗问题有不同的分析方法,以下是一些通用的针对各类型sensor功耗问题的分析.

SSC子系统引起系统无法进入AOSD问题分析:

1.首先要确认系统待机时的是否是SSC子系统无法进入sleep而导致系统无法进入AOSD,可通过以下命令查看各个子系统的sleep count:
命令:

adb shell cat /sys/power/rpmh_stats/master_stats

输出如下:

APSS
Version:0x1
Sleep Count:0x2bf90
Sleep Last Entered At:0x48e7ec7af00
Sleep Last Exited At:0x48e7ecfe85e
Sleep Accumulated Duration:0x42b29deb96a
ADSP
Version:0x1
Sleep Count:0xf17
Sleep Last Entered At:0x48a16986465
Sleep Last Exited At:0x48a16980931
Sleep Accumulated Duration:0x487a6e075f7
CDSP
Version:0x1
Sleep Count:0x55
Sleep Last Entered At:0x1f39e3aadeb
Sleep Last Exited At:0x1f39e3a6d3b
Sleep Accumulated Duration:0x48e5fed220c
SLPI
Version:0x1
Sleep Count:0x1e341a
Sleep Last Entered At:0x48e7ed80b48
Sleep Last Exited At:0x48e7ed76c90
Sleep Accumulated Duration:0x473b8551197

其中子系统每进入sleep一次,相应的sleep count就会+1,如果某个subsystem的sleep count长时间没有增加,基本可断定该子系统无法进入sleep

2.接下来确认是否为sensor的使用导致SSC子系统异常,可用以下方法disable AP子系统与SSC子系统的通信来确认:
命令:

adb shell mv /vendor/lib64/libssc.so /vendor/lib64/libssc.so.bk
adb shell mv /vendor/lib/libssc.so /vendor/lib/libssc.so.bk
adb shell sync
adb reboot

3.若确认SSC异常与sensor使用无关,则请sensor team帮忙分析SSC无法进入LPM的原因
4.若确认SSC异常与sensor使用有关,则用如下命令确认系统灭屏时有哪些sensor正在被使用
命令:

adb shell dumpsys sensorservice

5.逐一关闭灭屏时正在使用的sensor,来找出引起SSC异常的sensor
6.关闭引起SSC异常的sensor,并使用如下命令验证该异常是SSC子系统自身引起,还是上层的sensor服务引起:

adb shell
自研校准 -d <simple_time_ms> <SensorName> & //校准的工具的使用

7.将结果反馈给sensor team进行进一步分析

SSC子系统频繁唤醒AP问题分析方法

1.分析待机时的bugreport日志,通过以下log确认SSC子系统存在多次唤醒AP:

All wakeup reasons:
Wakeup reason Abort:Last active Wakeup Source: SensorService_wakelock, handle processSensorService: 16m 50s 349ms (1025 times)
realtime
Wakeup reason Abort:Wakeup IRQ detected during suspend: 103qcom,glink-smem-native-xprt-dsps: 2m 7s 108ms (126 times) realtime

2.确认是否为sensor的使用导致SSC子系统异常,可用以下方法disable AP子系统与SSC子系统的通信来确认:
命令:

adb shell mv /vendor/lib64/libssc.so/vendor/lib64/libssc.so.bk
adb shell mv /vendor/lib/libssc.so/vendor/lib/libssc.so.bk
adb shell sync
adb reboot

3.若AP频繁唤醒是由sensor使用引起的,则通过以下命令找出系统灭屏时正在使用的sensor,并通过排除法来确定引起AP唤醒的sensor
命令:

adb shell dumpsys sensorservice

4.检查是否为上层服务将sensor错误配置成了Wakeup模式,导致AP不断被唤醒,如:

Connection Number: 4
Operating Mode: NORMAL
com.qualcomm.qti.internal.telephony.DynamicSarController | WakeLockRefCount 0 | uid 1001 | cache size 0 | max cache size 0
sar_detector Non-wakeup 0x0000001e | status: active | pending flush events 0
SAR ADUX1050 Wakeup0x00000025 | status: active | pending flush events 0
Hall Effect Sensor 0x00000034 | status: active | pending flush events 0

在以上log中,由于modem服务将SAR sensor异常设置成了Wakeup模式,导致SAR sensor每隔1s就会频繁唤醒AP

5.若上层服务的sensor配置没有问题,但系统还是存在频繁的AP唤醒,就需要sensor team检查是否为SSC子系统在使用sensor时出现异常,导致AP频繁唤醒。

如:之前遇到的安装微信及QQ后,系统会频繁上报SSC中断,导致AP无法睡眠,经分析是由于微信及QQ同时使用了Non-wakeup pedometer,导致大量sensor中断产生。
但其本质原因是由于SensorHub问题导致Non-wakeup sensor会异常唤醒AP。

SSC子系统的GPIO/PMIC配置错误导致系统漏电问题分析方法

1.分析GPIO/PMIC的漏电问题是在系统已经成功进入AOSD以后,此时各个子系统都已成功进入sleep,故很难从各subsystem看出问题

2.这时最简单的办法就是通过Trace32来dump系统进入AOSD之前的GPIO/PMIC状态,检查各GPIO/PMIC是否存在漏电

3.但有时由于条件所限在无法使用Trace32工具的情况下,就需要对比出问题前后的两个版本,从regression的角度来找出漏电

SSC子系统的sensor工作模式异常,导致系统功耗增大问题分析方法

1.sensor的工作模式异常导致的功耗问题主要出现在系统运行时,指可以使用interrupt mode的sensor被SSC子系统异常配置成了polling mode,导致功耗增大

2.分析方法主要是先通过dumpsys sensorservice找出系统使用了哪些sensor?再检查哪些sensor可以被配置成interrupt mode

3.若确认相应sensor可以工作在interrupt mode,却异常配成了polling mode,则找sensor team帮忙修正

功耗优化之Sensor功耗分析的更多相关文章

  1. iOS--App功耗优化

    良好的用户体验需要如下要素: 电池寿命长.随着能效降低,电池寿命也会降低.但用户想让自己的移动设备全天候待命. 速度快.iOS系统处理复杂操作时仍能提供很好的性能. 响应快.同一时刻消耗太多资源会使U ...

  2. 移动智能设备功耗优化系列--前言(NVIDIA资深project师分享)

    本文是嵌入式企鹅圈原创团队成员.NVIDIA资深开发project师Terry发表的第一篇文章,其将对"移动智能设备功耗优化"这个专题展开一个系列的总结分享. Terry毫无保留地 ...

  3. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  4. MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...

  5. 【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况

    前言 本文翻译自“为电池寿命做优化”系列文档中的其中一篇,用于介绍如何使用Battery Historian分析电源使用情况. 中国版官网原文地址为:https://developer.android ...

  6. mysql优化:慢查询分析、索引配置优化

    一.优化概述二.查询与索引优化分析a.性能瓶颈定位show命令慢查询日志explain分析查询profiling分析查询b.索引及查询优化三.配置优化 max_connections back_log ...

  7. golang gc 优化思路以及实例分析

    一个即将上线的go 写的高频服务,压测的时候发现 gc 特别高,高到10%-15% 左右了,本文记录下优化 gc 的过程和和思路.线上环境1.10. 首先,查看gc 是否有异常,我们可以使用 gctr ...

  8. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)

    http://www.taidous.com/article-667-1.html 前言 首先,这个系列文章做个大致的介绍,题目"浅谈Unity",因为公司和国内大部分3D手游开发 ...

  9. mysql优化----explain的列分析

    sql语句优化: : sql语句的时间花在哪儿? 答: 等待时间 , 执行时间. 等待时间:看是不是被锁住了,那就不是语句层面了是服务端层面了,看连接数内存. 执行时间:到底取出多少行,一次性取出1万 ...

随机推荐

  1. 一个动态波浪纹Android界面

    IndexActivity.java package com.example.rubikrobot; import androidx.appcompat.app.AppCompatActivity; ...

  2. vue中引入jq

    1.cnpm install jquery2.在webpack.base.conf.js中加入一行代码 const webpack=require("webpack") ----- ...

  3. BootstrapBlazor实战-Tree树形控件使用(1)

    实战BootstrapBlazor树型控件Tree的使用, 以及整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/Sql ...

  4. JWT&RSA实现单点登录(详细介绍)

    今天给大家讲一下基于JWT&RSA的单点登录(Single Sign On,简称SSO)解决方案 概念 首先要了解几个概念 单点登录(Single Sign On) JWT RSA 背景 为什 ...

  5. WePY开发环境的安装和小程序生成WePY项目

    相对于微信开发者工具而言,WePY的安装和生成项目稍显复杂.特记录下安装顺序: 1.安装Node.js 在Node官网(https://nodejs.org/)下载Node.js的安装包,此处我下载的 ...

  6. Java基础之浅谈集合

    Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...

  7. Blazor 发布WebAssembly使用Brotli 压缩提升初次加载速度

    使用Brotli提高网站访问速度 在优化网站打开速度上,我们有很多的方法,而其中一个就是减少诸如Javascript和CSS等资源文件的大小,而减少文件大小的方法除了在代码上下功夫外,最常用的方法就是 ...

  8. MassTransit 入门(一)

    本文地址源码 MassTransit是一个面向.net的免费开源分布式应用程序框架. MassTransit使得创建应用程序和服务变得很容易,这些应用程序和服务利用基于消息的.松散耦合的异步通信来获得 ...

  9. SwitchHosts管理编辑hosts工具

    管理Hosts工具 SwitchHosts 地址: SwitchHosts 开发工程中,针对不同项目设置不同的域名. 办法很多,例如直接编辑hosts文件,通过环境工具提供的功能设置等. 现在要安利一 ...

  10. Java学习day18

    学习了三种简单的布局结构 做了一个简单的多按键窗口 Panel无法单独存在而显示出来,需要借助一个容器,例如Frame 明天学习输入框监听和画笔