三星I9000手机浏览器的GPU加速技术

本来今天应该想想moto被Google收购对我们将来的影响,但确实一时没有太多好的见解,Google自己说是为了专利,有人说是为了和苹果已经微软+Nokia竞争(都是软硬件协同设计),有人说这是为了在后期强调Android平台统一性、示范性与高性能。我个人怕的是Google将来想通过Moto将核心的Android体验通过硬件封闭起来。软件的开放或者封闭永远只是表象,硬件标准的设定,从而达到软硬件协同设计才是别人偷不走,学不到的精髓。Moto将来不会自己做芯片?呵呵,拭目以待吧。

还是说说今天工程上分析的重点之一:三星I9000手机浏览器中用到GPU加速技术吧。据我所知,这是截止目前唯一一款利用GPU加速网页渲染的Android设备。苹果的i系列手持设备早就用上了该技术,但那是苹果,与我们太远。从基本分析来看,三星通过对Android自带浏览器的GPU优化(目前尚未找到源码)以及对webkit的更新(有源码)共同实现了较为流畅的互联网网页浏览体验。下面具体说说这个问题。

首先,凭什么说三星的i9000的确通过GPU硬件加速了浏览器?我主要有三个根据:

  1. 做i9000固件的人这么说,网上也存在这样的议论与谣言,这也是我去分析的动力;
  2. 从traceview的情况来看,大量原本应该由WebViewCoreThread做的渲染的确转交给GL线程了,这在其他Android平台设备(甚至i9000上运行的第三方浏览器)上没有出现;
  3. 用户体验上出现了类似苹果i系列采用的safari浏览器类似的效果,即当快速滑动复杂网页时,出现矩形空白网格区域,然后快速填充这些网格(也以矩形的方式填充),这在其他Android设备的原生和第三方浏览器中都不曾出现。

海豚浏览器下没有出现GL线程

上图:海豚浏览器中没有出现GL线程

原生自带浏览器中出现大量GL线程

上图:原生自带浏览器中出现大量GL线程

其次,利用GPU加速网页渲染的效果究竟如何?这个问题我觉得可以从如下几个角度分析:

  1. 直观的用户体验:从用户体验来说,在同一台i9000手机上分别采用原生浏览器(含硬件加速)与海豚浏览器(不含硬件加速,同样基于Webkit,但也做了一些我们目前未知的优化)从绝对的滑动感受、缩放的响应、页面加载的速度来看区别并不明显。主要的区别还是来自前者在填充过程中会出现的空白网格上。后者和其他所有Android手机都只会表现为滑动流畅度下降,但页面一旦被装载则不会出现空白区域。
  2. 实际跑分测试:尚未测试,准备通过几个专门的测试网站得出结论。
  3. 通过TraceView实际分析渲染时间:由于操作本身的区别(我没法精确控制自己每次滚动页面的操作),所以只能有相对分析,无法做到非常客观。从数据上看:
    • 仅出现在含GPU的原生浏览器TraceView中:
      1. WebViewCore.nativeSplitContent,占4.5%。
      2. WebGLZoomRenderer$1.run,占1.6%。
      3. GLES2.0.glBindTexture,占0.1%。
      4. WebGLZoomRenderer.updateWebViewTextureGL,占1.6%。
      5. GLUtils.native_texSubImage2D,占1.4%。
      6. WebGLZoomRenderer.onDrawFrame,占19.9%。
      7. WebGLZoomRenderer.drawCheckerBoard,占2.0%。
      8. EGLImpl.eglSwapBuffers,占0.6%。
      9. GLES20.glClear,占0.1%。
      10. GLES20.glDrawArrays,占1.4%。
      11. WebGLZoomRenderer.drawRect,占17.1%。
    • 仅出现在不含GPU的海豚浏览器TraceView中:
      1. JWebCoreJavaBridge.shareFired,占25.8%。
      2. LoadListener.nativeFinished,占4.5%。
      3. WebViewCore.nativeSetSize,占3.6%。
      4. WebViewCore.nativeUpdateFrameCachelfLoading,占2.5%。
      5. LoadListener.nativeAddData,占1.7%。
    • 同时出现在两个浏览器中:
      1. WebViewCore.nativeRecordContent同时出现在GPU和普通版本中,分别占4.2%和1.3%的执行时间。

再次,三星怎么做到用GPU加速网页渲染,我们产品能否使用?这个问题其实是两个层次的,一个一个回答:

  1. 从TraceView可以看出,大量原本由WebViewCoreThread完成的图片渲染和zooming操作都被GL线程取代。具体来说。

最后,是否还有其他的途径实现类似的效果?

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s