Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android hw accelerated_2d_rendering

4,530 views

Published on

  • Be the first to comment

Android hw accelerated_2d_rendering

  1. 1. Android 硬件加速的2D绘图研究 硬件加速的2D 2D绘图研究Android HW Accelerated 2D Rendering Roger yixx@ucweb.com roger2yi@gmail.com www.twitter.com/roger2yi https://plus.google.com/
  2. 2. Introduction2012-5-15 Roger, UC
  3. 3. HW Accelerated 2D Rendering• 硬件加速的2D绘图主要包括两个方面 – 基本图元绘制(Primitive Drawing - Shape, Text,Image) – 图层混合(Layer/Surface/Window Composite)2012-5-15 Roger, UC
  4. 4. Some Android Graphics True Facts...• 从Android 1.0开始,窗口混合就开 始使用硬件加速 – 右图包含了4个窗口,分别是 - 状 态栏,壁纸,lanucher和菜单 – 像通知栏的拖拉,Activities的切换 动画,菜单,对话框的弹出/消失 动画都使用了硬件加速进行窗口混 合• 在Android 3.0之后,窗口内部的内 容绘制(Canvas)才开始支持硬件 加速2012-5-15 4
  5. 5. Controlling Hardware Acceleration• Application• Activity• Window• View2012-5-15 Roger, UC
  6. 6. Application Level• Android 3.x 默认为false• Android 4.x 默认为true(可以通过系统设 置关闭)2012-5-15 Roger, UC
  7. 7. Activity/Window Level• Window Level 只能开不能关• 可以在清单文件中设置Activity关闭,然后根据运 行时Intent传入的参数再打开窗口的硬件加速2012-5-15 Roger, UC
  8. 8. View Level• 将View的Layer Type设置为SW Layer,可以使View创建 一个内部的位图缓存,View的内容先绘制到位图,然后再 把位图拷贝到Window Surface上• 相当于关闭该View的硬件加速绘图2012-5-15 Roger, UC
  9. 9. View Layer Type• 在Android 3.0+后,View一共有3种Layer Type – None,默认类型,View的内容直接绘制到Window Surface上面 – SW Layer,创建一个内部的位图缓存,View的内容先 绘制到位图,然后再把位图拷贝到Window Surface上 – HW Layer,创建一个内部的硬件加速的帧缓存,View 的内容先绘制到帧缓存,然后再拷贝到Window Surface上,只有在Window是硬件加速时才支持,否 则自动变为SW Layer2012-5-15 Roger, UC
  10. 10. 2D Rendering Mode• 在Android 3.0后,一共有5种主要的2D渲 染模式,1主要用于游戏,2,3,4都可以 用于一般的View Hierachy渲染,5主要用 于动画和实时交互场景 1. 通过SurfaceHolder获得Window或者SurfaceView的 Surface Canvas(SurfaceHolder.lockCanvas),在单 独的Render Thread中绘图 2. Window Surface硬件加速,View的Layer Type为 None,在主线程(UI线程)中绘图(View.onDraw)2012-5-15 Roger, UC
  11. 11. Cont. 3. Window Surface非硬件加速,View的Layer Type为 None,在主线程(UI线程)中绘图(View.onDraw) 4. Window Surface硬件加速,View的Layer Type为SW, 在主线程(UI线程)中绘图(View.onDraw) 5. Window Surface硬件加速,View的Layer Type为HW, 在主线程(UI线程)中绘图(View.onDraw)2012-5-15 Roger, UC
  12. 12. Canvas• Android3.0+后有3种不同的Canvas类型: – android.graphics.Canvas • 通过Bitmap生成的Canvas • 当View的设置为SW Layer时,View在onDraw中获得的 Canvas – android.view.Surface$CompatibleCanvas • 通过SurfaceHolder.lockCanvas获得的Canvas • 当Window非硬件加速时,Window中的View在onDraw中获得的 Canvas – android.view.GLES20RecordingCanvas (HW Accelerated!!! HW Accelerated!!!) • 当Window硬件加速时,Window中的View在onDraw中获得的 Canvas(View的 Layer Type为None或者HW) – isHardwareAccelerated用于判断Canvas是否使用硬件加速2012-5-15 Roger, UC
  13. 13. Benchmark2012-5-15 Roger, UC
  14. 14. 0xbench_2d_hwhttps://github.com/rogeryi/0xbench_2d_hw2012-5-15 Roger, UC
  15. 15. Test• 对应渲染模式1~4 • 测试项包括: – 2D (SV) – Draw Canvas 填充整个 Canvas – 2D (HW) – Draw Circle2 圆形填充 – 2D (SW1) – Draw Rect 矩形填充 – 2D (SW2) – Draw Arc 弧形填充 – Draw Image 位图绘制 – Draw Text 文本绘制2012-5-15 Roger, UC
  16. 16. Samsung Draw Canvas Draw Circle2 Draw Rect Draw Arc Draw Image Draw TextGalaxy Tab (texture/gra (texture/gradi (texture/gradi (texture/gradi (w/o filter)10.1 (3.2) dient/color) ent/color) ent/color) ent/color)2D (SV) 59.4/24/60 51.7/38/46.8 19/10.5/13.8 13.4/21/25.8 11/25 13.12D (HW) 43.3/46/56 25/24.6/24.5 27.1/24/28 22.3/24/27 34/34 52D (SW1) 58.5/21/60 52.3/31/38 19.5/7/10.2 15/15.6/18.2 10.6/22 122D (SW2) 27.6/17/28 26.9/21/22 15.1/7/8.5 12/13.6/15.4 9.6/16.6 112012-5-15 Roger, UC
  17. 17. Nexus S Draw Canvas Draw Circle2 Draw Rect Draw Arc Draw Image Draw(4.0.3) (texture/gradient (texture/gradie (texture/gradie (texture/gradi (w/o filter) Text /color) nt/color) nt/color) ent/color)2D (SV) 55.5/55.6/54.5 50.5/51.6/50 33.3/23.4/32 46/35.5/47.8 35.5/55.6 92D (HW) 42/42/53.8 30/30.0/31.2 45/16/45.7 40.5/13/44 28/28 3.22D (SW1) 55.7/55.9/55.4 52.6/49.4/50 37/17.7/28.6 47.5/29.7/43 28.5/49.2 8.52D (SW2) 48.2/42.8/41.4 43.7/36.4/39 27.4/16.6/22 35.6/24/32.4 21.4/32.2 82012-5-15 Roger, UC
  18. 18. Basic Conclutions• 模式1总是比模式3要快,因为没有异步请求(invalidate/onDraw) 的延迟• 模式3总是比模式4要快,模式4多了一次位图拷贝• 模式2(硬件加速)跟模式3(非硬件加速)相比,有些快,有些慢• 在硬件加速时,drawXXX方法实际只是将绘图指令存储到一个内部的 绘图指令序列中(DisplayList),实际的绘制发生在onDraw调用之 后• 硬件加速的位图拉伸/旋转/扭曲绘制更平滑,filter bitmap flag总是打 开的2012-5-15 Roger, UC
  19. 19. Cont.• 硬件加速绘图主要的优势在于 – 位图绘制,特别是带拉伸,旋转,扭曲 – 渐变填充 – 图层混合• 硬件加速绘图主要的劣势在于文本绘制• 充分利用硬件加速的图层混合(开启View的HW Layer)是实现60fps 的实时交互和动画的关键• 对高分辨率和具备更快的GPU的新的旗舰手机和平板,硬件加速的优 势越来越明显,没有支持硬件加速的应用卡顿会十分明显2012-5-15 Roger, UC
  20. 20. Some Tips• 硬件加速绘图不是Silver Bullet,always profile your bottleneck• 避免在UI线程或者渲染线程中进行IO和网络操作(使用 Strict Mode进行检测)• 避免频繁修改位图(Bitmap),图形(Shape),避免在 绘图方法中创建画笔(Paint)和路径(Path),特别是 处于硬件加速时• 对于硬件加速,尽可能batch drawing code,比如调用 drawLines比多次调用drawLine要高效的多2012-5-15 Roger, UC
  21. 21. Renference• Android 3.0 Hardware Acceleration• New Gingerbread API: StrictMode• How about some Android graphics true facts?• How about some Android graphics true facts? [More]• Understanding Hardware Acceleration on Mobile Browsers• Android 圖形系統 -- 設計與實做分析2012-5-15 Roger, UC
  22. 22. The EndThank you for your listening Yours Sincerely, Roger

×