一 综述
自从Android系统WebView内核使用chromium以来,其渲染机制一直在持续不断演进,本文将以M42内核分析WebView的渲染架构以及相关代码分析。
先从代码流程进行分析,当WebView需要重新绘制时会调用:
WebView.OnDraw(Canvas canvas)
--->WebViewChromium.onDraw(Canvas canvas)
-->AwContents.onDraw(Canvas canvas)
在AwContents中,通过native方法(nativewOnDraw)继续进入C++层,AwContents::OnDraw(),在这里会决定是软件渲染,还是硬件渲染。当硬件渲染时,调用
BrowserViewRenderer::OnDrawHardware()。
在代码中,我们看到BrowserViewRenderer的解释是Interface for all the WebView-specific content rendering operations.,可知它是专门为Android WebView渲染机制而生的。
这里继续分析发现最新的Chromium WebView渲染机制采用了两级合成器,分别是SynchronousCompositor和ParentCompositor,它们分别运行在UI线程和Renderer线程,
通过SharedRendererState进行跨线程数据同步和共享。