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