Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23474
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-27 11:43
文章分类
文章存档

2014年(6)

我的朋友

分类: Android平台

2014-03-13 19:44:14

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()








阅读(5103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~