绘制相关systrace

2022-08-08  本文已影响0人  米豆同学

HwUI绘制

image.png

硬件加速绘制流程

每次硬件加速绘制都会调用Surface.unlockCanvasAndPost
Surface.unlockCanvasAndPost()
-> HwuiContext::unlockAndPost()
->HardwareRenderer::syncAndDraw()
->RenderProxy.cpp ::syncAndDrawFrame()
-> DrawFrameTask::drawFrame()
-> DrawFrameTask::run() \color{red}{(1)打印trace : DrawFrames } \color{red}{vsyncId} 渲染线程开始执行绘制操作
-> DrawFrameTask::syncFrameState \color{red}{(2)打印trace : syncFrameState }与主线程同步数据,这个阶段在用AutoMutex加锁,主线程等待
->CanvasContext::prepareTree \color{red}{(3)打印trace }
-> CanvasContext::draw 通过调用OpenGLPipeline方法开始绘制
->SkSurface::flushAndSubmit() \color{red}{(4)提交绘制请求到GPU}
->SkiaOpenGLPipeline::swapBuffers (CanvasContext::draw()中调用)交换buffer 到SurfaceFlinger\color{red}{(5)trace:eglSwapBuffersWithDamageKHR }
->eglSwapBuffersWithDamageKHR()该方法执行完成后,将回调ANativeWindow::queueBuffer进一步回调到Surface::hook_queueBuffer()\color{red}{(6)trace:queueBuffer} 到现在应用进程绘制完成

SurfaceFlinger 合成

image.png
上一篇 下一篇

猜你喜欢

热点阅读