RenderThread of HWUI on Android
Rouyun Pan
RenderThread Draw first frame
Java - Choreographer
• Choreographer: drawFrame() -> ViewRootImpl: performTraversals () -> performDraw() ->draw(boolean fullRedrawNeeded)
HW Renderer
*Path:frameworks/base/core/java/android/view/ViewRootImpl.java
ThreadedRenderer
*Path:frameworks/base/core/java/android/view/ThreadedRenderer.java
Native:nSyncAndDrawFrame()
*Path: frameworks/base/core/jni/android_view_ThreadedRenderer.cpp
*Path: frameworks/base/libs/hwui/renderthread/RenderProxy.cpp
Native: DrawFrameTask
*Path: frameworks/base/libs/hwui/renderthread/DrawFrameTask.cpp
Queue a RenderTask
*Path: frameworks/base/libs/hwui/renderthread/RenderThread.cpp
syncFrameState(1)• Sync frame state from MainThread to RenderThread
for parallel.
syncFrameState(2)
Draw(2)
*Path: frameworks/base/libs/hwui/renderthread/CanvasContext.cpp
Compare between android 4&5*UI Mainthread on Andoid 4.0
*UI MainThread and RenderThread on Andoid 5.0
RenderThread can wake the MainThread up in advance