博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jellybean的suspend策略变动
阅读量:4213 次
发布时间:2019-05-26

本文共 1436 字,大约阅读时间需要 4 分钟。

android的suspend策略有变动了

在ICS上,当暗屏/亮屏时,会调用powerManagerService的setPowerState,最终会调到 hardware/libhardware_legacy/power/power.c下的set_screen_state,在这个函数中,通过向/sys/power/state中写入 “mem”或"on",让系统进入early suspend。进入early suspend后,若没人持有wakelock,则系统即进入suspend状态了。

再看下Jellybean的代码,之前的power.c这个hal,已经不存在了。搜索源码,发现相关功能的实现,已经挪到 system/core/libsuspend下,而且实现方式也有所改变(PowerManagerService的调用方式还是一样):

将功能模块命名的更合理了:以前叫screen_state, 现在叫auto suspend

方法调用过程也更易读易懂了:以前是通过 set_screen_state(1)和set_screen_state(0)来进入和退出suspend状态,现在改成了autosuspend_enable()和autosuspend_disable()

suspend策略更多了,发现共有三种策略:autosuspend_earlysuspend; autosuspend_autosleep和 autosuspend_wakeup_count。

现在每次调用autosuspend功能时,都尝试着选择三种策略的一种来使用:

 
static int autosuspend_init(void){    if (autosuspend_inited) {        return 0;    }    autosuspend_inited = true;    autosuspend_ops = autosuspend_earlysuspend_init();    if (autosuspend_ops) {        goto out;    }    autosuspend_ops = autosuspend_autosleep_init();    if (autosuspend_ops) {        goto out;    }    autosuspend_ops = autosuspend_wakeup_count_init();    if (autosuspend_ops) {        goto out;    }    if (!autosuspend_ops) {        ALOGE("failed to initialize autosuspend\n");        return -1;    }out:    ALOGV("autosuspend initialized\n");    return 0;}
这里的autosuspend_earlysuspend,和ICS上的suspend,也就是power HAL上的实现是一致的,即early suspend。

从这个初始化代码,也可以看到,三种策略的选择是 earlysuspend > autosleep > wakeup_count, 目前我们还没用到后两种。后两种的机制的原理和工作方法,还要抽空了解下~

转载地址:http://redmi.baihongyu.com/

你可能感兴趣的文章
Android Alarm驱动源代码分析(Alarm.c)
查看>>
S3C2440上LCD驱动 (FrameBuffer)实例开发讲解
查看>>
Linux音频编程指南
查看>>
usb-otg-调试心得
查看>>
USB规范浏览--设备和主机规范
查看>>
男人的品位--我们自己的最求
查看>>
Android (Linux) Suspend流程
查看>>
LINUX时间管理
查看>>
定时器的使用
查看>>
为Android加入busybox工具
查看>>
使用技巧busybox
查看>>
如何查看与/dev/input目录下的event对应的设备
查看>>
bootloader-bootable解析
查看>>
bootloader (LK)&&android lk bootloader中相关修改指南
查看>>
SD卡驱动分析--基于高通平台
查看>>
SD Card 驱动流程分析
查看>>
Linux之debugfs介绍
查看>>
关于sd卡中一些概念的理解
查看>>
sd卡驱动分析之相关硬件操作和总结
查看>>
好的播文
查看>>