Skia GPU加速能从Android系统的Webkit渲染中获得多少好处?

GPU加速Webkit渲染的意义是什么?

从Honeycomb[3.x]版本开始,Andorid已经支持GPU加速,但是目前Android并没有使用Skia GPU进行Webkit渲染。Skia GPU使用OpenGL进行后台加速渲染,未来可能会取代Skia。

很多人认为,即使Android成功使用GPU加速Webkit渲染,用户在访问和浏览雅虎等一般网站时也不会感觉到太大的区别。因为Webkit的大部分资源都花在了Javascript脚本和布局定位上。

我们认为Webkit使用GPU加速渲染的最大意义无非是HTML 5 canvas【HTML 5的动态绘制效果】。Android渲染Canvas动画太慢,导致网页开发者无法在Android上用Canvas开发网页游戏。【需要注意的是,目前很多手机和平板应用都是以HTML5为界面,使用Webkit工作,这也是很多应用在Android系统上感觉“不流畅”的重要因素。译者注】。

Android Webkit开发平台【NDK】使用Skia GPU加速测试。

我们在Android系统中测试了Skia GPU加速的Webkit。我们已经有了WAC2.0版本的Android Webkit NDK。我使用了Skia源代码的提交版本,并启动Skia GPU来加速编译成NDK。

我没有使用画布加速,因为这样会增加修改GraphicsContextSkia API的工作量,所以没有测试画布渲染的性能。

为了使用Skia GPU加速,我做了以下两件事:

1,使用GLSurfaceView添加了eglContext内容。

2.用SkGpuCanvas代替WebView中的sk canvas . CPP我在系统版本为2.3.2的Nexus S上进行了测试,禁用了屏幕合成加速和Webkit备份缓存。没想到Skia GPU降低了绘制性能,比Skia用CPU渲染时慢了一倍多。

当用户滚动雅虎网站的页面时,每一帧都会让Webkit重绘页面元素。页面元素包括70%文本、15%矩形和15%图像,但Skia GPU“加速”渲染速度慢了5倍。

看到图表后,你可能会觉得Skia GPU在渲染SVG动画时比CPU快一点。但是Webkit在渲染SVG动画时存在一些问题。它将大部分时间用于定位和布局SVG元素,而不是呈现SVG元素。所以我不确定Skia在使用GPU加速时是否真的变快了。

Skia在栅格化文本时使用CPU而不是GPU,它将文本缓存为材质贴图。所以Skia GPU加速并没有提高文字滚动的速度。

一开始我以为Skia GPU加速画飞行浏览器图标应该会更快。毕竟是位图动画,这是GPU的强项。因此,Skia GPU的渲染速度慢了10倍...由于尚未获得详细的结果,我们需要做进一步的研究,以找出问题的原因。

当你构建Skia时,你会得到一个正在运行的程序。运行后,你会看到CPU和GPU渲染的性能差异。以下是考试成绩中的一些关键项目。

如你所见,除了位图渲染,Skia GPU渲染大约慢了一倍。

为什么Skia GPU渲染比较慢?

我用gDEBugger【调试工具】和callgrind录音后,发现了一些问题:

1,glDrawSomething调用过于频繁;

2.gl[图形链接库]状态调整过多;

3、切换到FBO[帧缓冲]

对象]过于频繁。

这一切的祸根是glDrawSomething用得太多了。Webkit调用SkCanvas::drawSomething时,Skia每次都会调用glDraw,改变GL状态,转换成FBO。而且就算Skia解决了这三个问题,我也不确定Skia。

在绘制文本动画和小几何图形时,GPU可以比CPU更快。因为实际上在渲染1000以上的小几何图形【小于10像素】时,GPU很难变得更快。在此之前,Android开发者已经对线性渲染器进行了大幅优化。Skia的运行程序也显示path_stroke_small_triangle大约慢了15倍。

Skia GPU加速展望

你可能觉得用GPU画2D矢量图形是不可能提速的,但是请不要过早下结论。我写了一个小程序,测试GPU画贝塞尔曲线能比CPU快多少。幸运的是,在Nexus,

在S上测试的时候,安卓的GPU画图确实比CPU快一点。

相关资料收集此图相关图片。

贝塞尔曲线绘制100圆测试-

使用CPU渲染

相关资料收集此图相关图片。

贝塞尔曲线绘制100圆测试-

使用GPU渲染

绘制100大圆的动画,GPU渲染快1.5倍。

相关资料收集此图相关图片。

贝塞尔曲线绘制1000圆测试-

使用CPU渲染

相关资料收集此图相关图片。

贝塞尔曲线绘制1000圆测试-

使用GPU渲染

画1000小圆的动画,GPU渲染速度接近CPU。

斯基亚

GPU很慢,但谷歌只用了一年就实现了。我觉得谷歌可以像线性渲染器一样优化它。如果是这样的话,我觉得Android用户可能一两年后就能享受HTML5了。

画布游戏【当然结果是现在ARM的处理器性能越来越好,Skia GPU可能就这样被遗忘了】。