Android flinger - simmer_ken的专栏 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/04/23 15:52:40
Android flinger收藏
在android中,屏幕(framebuffer)被看成为一个device,文件/sys/power/wait_for_fb_sleep和/sys/power/wait_for_fb_wakeup被kernel用来通知framework屏幕挂起或恢复了。在framework中有两个线程,一个是画图的主线程,在循环中它会首先检查kernel的事件通知信号并设置framebuffer是否可画,下面是示意性的framework代码:
- 1 . surface flinger thread:
- while ( true ) {
- checkEventAndSendSignal();
- doSomeThing();
- if (canDraw) {
- swapBuffer();
- }
- }
- 2 .check event function
- checkEventAndSendSignal() {
- if (wait_for_sleep returned) {
- canDraw = false ;
- mBarrier.open();
- }
- if (wait_for_wakeup returned) {
- canDraw = true ;
- }
- }
- 3 .drawing function
- swapBuffer() {
- .....
- ioctl(egl_native_window_t::fd, FBIOPUT_VSCREENINFO, &mInfo)
- ....
- }
- 4 .getEvent thread
- while ( true ) {
- wait_for_sleep();
- sendSleepReturnEvent();
- mBarrier.wait();
- wait_for_wakeup();
- sendWakeupReturnEvent();
- }
当屏幕可用时,kernel会block getEvent线程在wait_for_sleep(read(wait_for_fb_sleepfile))调用上,直到屏幕不可用(用户关闭屏幕,变黑);当屏幕不可用(挂起),kernel会blockgetEvent线程在wait_for_wakeup(read(wait_for_fb_wakeup file))调用上,直到屏幕可用。
在挂起屏幕前(wait_for_wakeup)mBarrier用来同步surfaceflinger线程画完上次循环未完成的framebuffer
Android flinger - simmer_ken的专栏 - CSDN博客
Android的源代码结构 - 常青的专栏 - CSDN博客
Android PVPlayer介绍 - 常青的专栏 - CSDN博客
搭建Android环境 - shenbin1430的专栏 - CSDN博客
Android编译环境配置 - vrix的专栏 - CSDN博客
搭建Android环境 - shenbin1430的专栏 - CSDN博客
MPlayer往Android上的移植(1) - houdiney的专栏 - CSDN博客
Android:Google的阳谋和Apache Harmony - Kasmile的专栏 - CSDN博客
Android图形架构实现分析总结 - shenbin1430的专栏 - CSDN博客
Linux-Android系统启动之INIT进程和system v init - guopeixin的专栏 - CSDN博客
Linux-Android启动之Init进程前传 - guopeixin的专栏 - CSDN博客
Android提高第一篇之MediaPlayer - hellogv的专栏 - CSDN博客
Android的PVPlayer介绍 CSDN博客
baozhengw的专栏 - CSDN博客
AGPS简介 - kv110的专栏 - CSDN博客
OpenMAX简介 - shenbin1430的专栏 - CSDN博客
windows 命令 - orangeman1982112的专栏 - CSDN博客
JNDI概述 - tanghongru1983的专栏 - CSDN博客
指针 - syhhl007的专栏 - CSDN博客
变量命名 - yszwn的专栏 - CSDN博客
什么是PLL - JasonCao的专栏 - CSDN博客
VC积累 - cherryt的专栏 - CSDN博客
fms技术 - wanglilin2000的专栏 - CSDN博客
关于numeric_limits - qianlong88的专栏 - CSDN博客