Chinaunix首页 | 论坛 | 博客
  • 博客访问: 969929
  • 博文数量: 109
  • 博客积分: 1751
  • 博客等级: 上尉
  • 技术积分: 1817
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 22:37
文章分类

全部博文(109)

文章存档

2014年(9)

2013年(21)

2012年(48)

2011年(31)

分类: Android平台

2013-09-27 17:56:02

DisplayPowerController->updatePowerState()
-->DisplayPowerState->setScreenOn()
-->-->DisplayPowerState->Runnable()::run()
-->-->-->mDisplayBlanker.blankAllDisplays()
-->-->-->-->PowerManagerService->blankAllDisplays()
-->-->-->-->-->com_android_server_power_PowerManagerService.cpp->nativeSetInteractive(false)
-->-->-->-->-->com_android_server_power_PowerManagerService.cpp->nativeSetAutoSuspend(true)
-->-->-->-->-->-->power.c->setInteractive


PowerManagerService->updateDisplayPowerStateLocked()
-->com_android_server_power_PowerManagerService.cpp->nativeSetPowerState()


4.2.2 android通过HWComposer来实现屏幕的开关
关闭屏幕
SurfaceFlinger.cpp->SurfaceFlinger::onScreenReleased()
HWComposer.cpp->HWComposer::release()
-->mHwc->blank() //HAL
-->driver ops


4.2.1 android compose流程
SurfaceFlinger::handleMessageRefresh()
-->preComposition()
-->rebuildLayerStacks()
-->setUpHWComposer()
-->doDebugFlashRegions()
-->doComposition()
-->postComposition()




SurfaceFlinger::setUpHWComposer()
-->HWComposer::prepare()
-->-->mHwc->prepare() //HAL
//will set each hwlayers.compositionType (set to HWC_OVERLAY if hw can handle)
-->disp.hasOvComp
//set disp.hasOvComp if hwc_layer_1_t.compositionType == HWC_VOERLAY, which was set by mHwc(hwc hal)






SurfaceFlinger::doComposition()
-->doDisplayComposition()
//DisplayDevicce::PARTIAL_UPDATES 注意
-->-->doComposeSurface()
-->HWComposer::hasGlesComposition()
//by check disp.hasFbComp
-->-->LayerBase::draw()
-->-->-->Layer::onDraw()
-->-->-->-->drawWithOpenGL()
-->HWComposer::hasHwcComposition()
//by check disp.hasOvComp
-->DisplayDevice::flip()
-->-->eglSetSwapRectangleANDROID()
-->-->-->xxx
in DisplayDevice::init, SurfaceTextureClient will be registered as egl's window surface.SurfaceTextureClient includes FramebufferSurface's bufferqueue and inherits from ANativeWindow. in SurfaceTextureClient, queuebuffer's hook function should be called by egl!!!! Thus queuebuffer's queuebuffer will be called and onframeavailable will be called. Thus FramebufferSurface's onframeavailable will be called.
-->-->-->-->HWComposer::fbPost()
-->-->-->-->-->mFbDev->post()
-->postFramebuffer()
-->-->HWComposer::commit()
-->-->-->mHwc->set()
-->-->DisplayDevice::onSwapBuffersCompleted()








阅读(11609) | 评论(1) | 转发(1) |
0

上一篇:制作initlog.rle

下一篇:android addr2line debug

给主人留下些什么吧!~~

Trigger_Huang2014-07-24 12:00:59

Hi 博主,
这么看起来,我们的的SurfaFlinger的合成动作(除video/camera playback/preview之外)一般都是由OpenGLES通过texuture来将各layer的相关区域贴到FB上的。最后根据是否有hwc 模块,如果有的话,就调用hwc hal实现的set函数来show;如果没有hwc模块或者加载失败的话,应该就是走DisplayDevice::swapBuffers--> eglSwapBuffers-->gralloc hal中的post实现来进行show。请问逻辑是这样吗?或者您有什么补充和纠正吗? 谢谢