SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Android 硬件加速的2D绘图研究
        硬件加速的2D
             2D绘图研究
Android HW Accelerated 2D Rendering

  Roger
  yixx@ucweb.com
  roger2yi@gmail.com
  www.twitter.com/roger2yi
  https://plus.google.com/
Introduction




2012-5-15       Roger, UC
HW Accelerated 2D Rendering

• 硬件加速的2D绘图主要包括两个方面
    – 基本图元绘制(Primitive Drawing - Shape,
      Text,Image)

    – 图层混合(Layer/Surface/Window Composite)




2012-5-15          Roger, UC
Some Android Graphics True Facts...
•   从Android 1.0开始,窗口混合就开
    始使用硬件加速

    – 右图包含了4个窗口,分别是 - 状
      态栏,壁纸,lanucher和菜单

    – 像通知栏的拖拉,Activities的切换
      动画,菜单,对话框的弹出/消失
      动画都使用了硬件加速进行窗口混
      合

•   在Android 3.0之后,窗口内部的内
    容绘制(Canvas)才开始支持硬件
    加速



2012-5-15                                 4
Controlling Hardware Acceleration

• Application

• Activity

• Window

• View



2012-5-15       Roger, UC
Application Level




• Android 3.x 默认为false

• Android 4.x 默认为true(可以通过系统设
  置关闭)
2012-5-15         Roger, UC
Activity/Window Level




• Window Level 只能开不能关

• 可以在清单文件中设置Activity关闭,然后根据运
  行时Intent传入的参数再打开窗口的硬件加速

2012-5-15           Roger, UC
View Level




• 将View的Layer Type设置为SW Layer,可以使View创建
  一个内部的位图缓存,View的内容先绘制到位图,然后再
  把位图拷贝到Window Surface上

• 相当于关闭该View的硬件加速绘图
2012-5-15        Roger, UC
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 Layer


2012-5-15        Roger, UC
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
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
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
Benchmark




2012-5-15      Roger, UC
0xbench_2d_hw




https://github.com/rogeryi/0xbench_2d_hw




2012-5-15         Roger, UC
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
Samsung      Draw Canvas    Draw Circle2     Draw Rect        Draw Arc         Draw Image     Draw Text
Galaxy 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.1




2D (HW)      43.3/46/56     25/24.6/24.5 27.1/24/28           22.3/24/27       34/34          5




2D (SW1)     58.5/21/60     52.3/31/38       19.5/7/10.2      15/15.6/18.2 10.6/22            12




2D (SW2)     27.6/17/28     26.9/21/22       15.1/7/8.5       12/13.6/15.4 9.6/16.6           11




2012-5-15                                    Roger, UC
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      9




2D (HW)     42/42/53.8          30/30.0/31.2       45/16/45.7        40.5/13/44       28/28          3.2




2D (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.5




2D (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      8




2012-5-15                                         Roger, UC
Basic Conclutions
• 模式1总是比模式3要快,因为没有异步请求(invalidate/onDraw)
  的延迟

• 模式3总是比模式4要快,模式4多了一次位图拷贝

• 模式2(硬件加速)跟模式3(非硬件加速)相比,有些快,有些慢

• 在硬件加速时,drawXXX方法实际只是将绘图指令存储到一个内部的
  绘图指令序列中(DisplayList),实际的绘制发生在onDraw调用之
  后

• 硬件加速的位图拉伸/旋转/扭曲绘制更平滑,filter bitmap flag总是打
  开的



2012-5-15          Roger, UC
Cont.
• 硬件加速绘图主要的优势在于
    – 位图绘制,特别是带拉伸,旋转,扭曲
    – 渐变填充
    – 图层混合

• 硬件加速绘图主要的劣势在于文本绘制

• 充分利用硬件加速的图层混合(开启View的HW Layer)是实现60fps
  的实时交互和动画的关键

• 对高分辨率和具备更快的GPU的新的旗舰手机和平板,硬件加速的优
  势越来越明显,没有支持硬件加速的应用卡顿会十分明显




2012-5-15         Roger, UC
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
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
The End
Thank you for your listening
  Yours Sincerely, Roger

Mais conteúdo relacionado

Semelhante a Android hw accelerated_2d_rendering

基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Benny Chak
 
快速打包工具Quick build
快速打包工具Quick build快速打包工具Quick build
快速打包工具Quick buildtb-vertical-guide
 
Android 程式設計(1)
Android 程式設計(1)Android 程式設計(1)
Android 程式設計(1)Roy Wang
 
Introducing RepRap 3D printer
Introducing RepRap 3D printerIntroducing RepRap 3D printer
Introducing RepRap 3D printerNoa Izumi
 
HoloLens 2的 MR(Mixed Reality)開發入門
HoloLens 2的 MR(Mixed Reality)開發入門HoloLens 2的 MR(Mixed Reality)開發入門
HoloLens 2的 MR(Mixed Reality)開發入門Chen Yu Pao
 
Monster Processing Workshop (dayOne)
Monster Processing Workshop (dayOne)Monster Processing Workshop (dayOne)
Monster Processing Workshop (dayOne)Akinori Kinoshita
 
目录结构规范
目录结构规范目录结构规范
目录结构规范Zheng Biao
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDDClark
 
Android开发概览
Android开发概览Android开发概览
Android开发概览heyfluke
 
Android开发基础
Android开发基础Android开发基础
Android开发基础ykdsg
 
Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装redhat9
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outlineturtleknight
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-applydiafly
 
Cerebro for Animation / VFX (Chinese)
Cerebro for Animation / VFX (Chinese)Cerebro for Animation / VFX (Chinese)
Cerebro for Animation / VFX (Chinese)CineSoft
 
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架Will Huang
 
Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊liangxiao0315
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享世欽 陳
 

Semelhante a Android hw accelerated_2d_rendering (20)

基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]
 
快速打包工具Quick build
快速打包工具Quick build快速打包工具Quick build
快速打包工具Quick build
 
Android 程式設計(1)
Android 程式設計(1)Android 程式設計(1)
Android 程式設計(1)
 
Introducing RepRap 3D printer
Introducing RepRap 3D printerIntroducing RepRap 3D printer
Introducing RepRap 3D printer
 
HoloLens 2的 MR(Mixed Reality)開發入門
HoloLens 2的 MR(Mixed Reality)開發入門HoloLens 2的 MR(Mixed Reality)開發入門
HoloLens 2的 MR(Mixed Reality)開發入門
 
Monster Processing Workshop (dayOne)
Monster Processing Workshop (dayOne)Monster Processing Workshop (dayOne)
Monster Processing Workshop (dayOne)
 
目录结构规范
目录结构规范目录结构规范
目录结构规范
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
 
Android开发概览
Android开发概览Android开发概览
Android开发概览
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outline
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-app
 
Cerebro for Animation / VFX (Chinese)
Cerebro for Animation / VFX (Chinese)Cerebro for Animation / VFX (Chinese)
Cerebro for Animation / VFX (Chinese)
 
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享
 

Mais de Gump Law

Rails hello
Rails helloRails hello
Rails helloGump Law
 
Location baseda rengine
Location baseda rengineLocation baseda rengine
Location baseda rengineGump Law
 
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyiOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyGump Law
 
翻译与写作技术图书那点事
翻译与写作技术图书那点事翻译与写作技术图书那点事
翻译与写作技术图书那点事Gump Law
 
走马观花— Haskell Web 开发
走马观花— Haskell Web 开发走马观花— Haskell Web 开发
走马观花— Haskell Web 开发Gump Law
 
深入PHP内核之路
深入PHP内核之路深入PHP内核之路
深入PHP内核之路Gump Law
 
Guangzhou Techparty Pre show 20110917
Guangzhou Techparty Pre show 20110917Guangzhou Techparty Pre show 20110917
Guangzhou Techparty Pre show 20110917Gump Law
 
Java桌面应用开发
Java桌面应用开发Java桌面应用开发
Java桌面应用开发Gump Law
 
BI 商业智能简述
BI 商业智能简述BI 商业智能简述
BI 商业智能简述Gump Law
 

Mais de Gump Law (9)

Rails hello
Rails helloRails hello
Rails hello
 
Location baseda rengine
Location baseda rengineLocation baseda rengine
Location baseda rengine
 
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyiOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techparty
 
翻译与写作技术图书那点事
翻译与写作技术图书那点事翻译与写作技术图书那点事
翻译与写作技术图书那点事
 
走马观花— Haskell Web 开发
走马观花— Haskell Web 开发走马观花— Haskell Web 开发
走马观花— Haskell Web 开发
 
深入PHP内核之路
深入PHP内核之路深入PHP内核之路
深入PHP内核之路
 
Guangzhou Techparty Pre show 20110917
Guangzhou Techparty Pre show 20110917Guangzhou Techparty Pre show 20110917
Guangzhou Techparty Pre show 20110917
 
Java桌面应用开发
Java桌面应用开发Java桌面应用开发
Java桌面应用开发
 
BI 商业智能简述
BI 商业智能简述BI 商业智能简述
BI 商业智能简述
 

Android hw accelerated_2d_rendering

  • 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/
  • 3. HW Accelerated 2D Rendering • 硬件加速的2D绘图主要包括两个方面 – 基本图元绘制(Primitive Drawing - Shape, Text,Image) – 图层混合(Layer/Surface/Window Composite) 2012-5-15 Roger, UC
  • 4. Some Android Graphics True Facts... • 从Android 1.0开始,窗口混合就开 始使用硬件加速 – 右图包含了4个窗口,分别是 - 状 态栏,壁纸,lanucher和菜单 – 像通知栏的拖拉,Activities的切换 动画,菜单,对话框的弹出/消失 动画都使用了硬件加速进行窗口混 合 • 在Android 3.0之后,窗口内部的内 容绘制(Canvas)才开始支持硬件 加速 2012-5-15 4
  • 5. Controlling Hardware Acceleration • Application • Activity • Window • View 2012-5-15 Roger, UC
  • 6. Application Level • Android 3.x 默认为false • Android 4.x 默认为true(可以通过系统设 置关闭) 2012-5-15 Roger, UC
  • 7. Activity/Window Level • Window Level 只能开不能关 • 可以在清单文件中设置Activity关闭,然后根据运 行时Intent传入的参数再打开窗口的硬件加速 2012-5-15 Roger, UC
  • 8. View Level • 将View的Layer Type设置为SW Layer,可以使View创建 一个内部的位图缓存,View的内容先绘制到位图,然后再 把位图拷贝到Window Surface上 • 相当于关闭该View的硬件加速绘图 2012-5-15 Roger, UC
  • 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 Layer 2012-5-15 Roger, UC
  • 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. 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. 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. Benchmark 2012-5-15 Roger, UC
  • 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. Samsung Draw Canvas Draw Circle2 Draw Rect Draw Arc Draw Image Draw Text Galaxy 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.1 2D (HW) 43.3/46/56 25/24.6/24.5 27.1/24/28 22.3/24/27 34/34 5 2D (SW1) 58.5/21/60 52.3/31/38 19.5/7/10.2 15/15.6/18.2 10.6/22 12 2D (SW2) 27.6/17/28 26.9/21/22 15.1/7/8.5 12/13.6/15.4 9.6/16.6 11 2012-5-15 Roger, UC
  • 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 9 2D (HW) 42/42/53.8 30/30.0/31.2 45/16/45.7 40.5/13/44 28/28 3.2 2D (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.5 2D (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 8 2012-5-15 Roger, UC
  • 18. Basic Conclutions • 模式1总是比模式3要快,因为没有异步请求(invalidate/onDraw) 的延迟 • 模式3总是比模式4要快,模式4多了一次位图拷贝 • 模式2(硬件加速)跟模式3(非硬件加速)相比,有些快,有些慢 • 在硬件加速时,drawXXX方法实际只是将绘图指令存储到一个内部的 绘图指令序列中(DisplayList),实际的绘制发生在onDraw调用之 后 • 硬件加速的位图拉伸/旋转/扭曲绘制更平滑,filter bitmap flag总是打 开的 2012-5-15 Roger, UC
  • 19. Cont. • 硬件加速绘图主要的优势在于 – 位图绘制,特别是带拉伸,旋转,扭曲 – 渐变填充 – 图层混合 • 硬件加速绘图主要的劣势在于文本绘制 • 充分利用硬件加速的图层混合(开启View的HW Layer)是实现60fps 的实时交互和动画的关键 • 对高分辨率和具备更快的GPU的新的旗舰手机和平板,硬件加速的优 势越来越明显,没有支持硬件加速的应用卡顿会十分明显 2012-5-15 Roger, UC
  • 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. 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. The End Thank you for your listening Yours Sincerely, Roger