Transcript
Page 1: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Wednesday, November 2, 11

Page 2: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Wednesday, November 2, 11

Page 3: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Ariya Hidayat & Jarred NichollsSencha

Twitter: @ariyahidayat @jarrednicholls

Hardware Accelerationon Mobile

Wednesday, November 2, 11

Page 4: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Challenges

Wednesday, November 2, 11

Page 5: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Game vs Web

Wednesday, November 2, 11

Page 6: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Game

Animation

Physics

Textured objects

Text

Transformation

Wednesday, November 2, 11

Page 7: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Web Pages

Images

Text

Wednesday, November 2, 11

Page 8: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

How Browser Works

Layout engine

Network stack

GraphicsJavaScript engine

User interface

Wednesday, November 2, 11

Page 9: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

WebKit Components

WebKit Library

JavaScriptCore

WebCore

HTMLrendering

SVG

DOM CSS

Wednesday, November 2, 11

Page 10: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Platform Abstraction

Network Unicode Clipboard

Graphics Theme Events

Thread Geolocation Timer

Wednesday, November 2, 11

Page 11: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Graphics Abstraction

Mac Chromium Qt Gtk

CoreGraphicsSkia

QPainter

graphics stack

GraphicsContext

Wednesday, November 2, 11

Page 12: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Components of Mobile

Touch interface

GPU

CPU

Radio

Power

Wednesday, November 2, 11

Page 13: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Graphics Processor

Divide and conquer

Very specific purpose

Wednesday, November 2, 11

Page 14: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Optimized for Games

Transformation

Textured triangles

Fixed geometry

Parallelism

Wednesday, November 2, 11

Page 15: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Challenges

Predictable contents (assets) ✔Mostly text ✔Mostly images ✔Expected run-time response immediate

Wednesday, November 2, 11

Page 16: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Primitive Drawing

Wednesday, November 2, 11

Page 17: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Path is Everything

Path

Triangle Rectangle

PolygonEllipse

Wednesday, November 2, 11

Page 18: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Stroke = Outline

Solid Dashed Dotted Textured

Wednesday, November 2, 11

Page 19: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Brush = Fill

SolidNone Gradient Textured

Wednesday, November 2, 11

Page 20: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Smooth via Antialiasing

Multiple levels of transparency

Perfect for parallelism

Wednesday, November 2, 11

Page 21: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Path Approximation

Curves

Polygon

Wednesday, November 2, 11

Page 22: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Gradient: ExpensiveCPU: sequential, tedious

GPU: parallel, still a lot of work

Wednesday, November 2, 11

Page 23: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Blur Shadow: Really Posh

Involved pixel “blending”

GPU: parallel, still tedious

Wednesday, November 2, 11

Page 24: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Transformation

Scaling

RotationPerspective

Wednesday, November 2, 11

Page 25: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Text Rasterization

Wednesday, November 2, 11

Page 26: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Font Atlas

Bye

Buffer

Wednesday, November 2, 11

Page 27: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Simple to Complex

Hello!

Simple shapeSolid color

CurvesGradient brushTextured stroke

Blur shadowSerif textRotated

Make it as an image

Wednesday, November 2, 11

Page 28: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

HOW FAST?

Wednesday, November 2, 11

Page 29: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Android Drawing

GraphicsContext

WebCore graphics

Skia

Log file

Wednesday, November 2, 11

Page 30: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Example: BingplatformInitsavePlatformStatetranslate 0,0translate 0,0clip 1,0 0x6.95322e-310fillRect 0,0 800x556 color ff ff ff ffrestorePlatformStateplatformDestroyplatformInitsavePlatformStatetranslate 0,0translate 0,0clip 1,0 0x6.95322e-310fillRect 0,0 800x556 color ff ff ff ffrestorePlatformStateplatformDestroyplatformInitsavePlatformStatetranslate 0,0translate 0,0clip 1,0 0x6.95322e-310fillRect 0,0 800x556 color ff ff ff fffillRect 0,0 800x556 color ff ff ff ff

Wednesday, November 2, 11

Page 31: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

How Fast?

#include "TimeCounter.h"

bool WebViewCore::drawContent(SkCanvas* canvas, SkColor){ uint32_t timestamp = getThreadMsec();

.... painting code .... DBG_SET_LOGD("% ms", getThreadMsec() - timestamp);}

external/webkit/WebKit/android/jni/WebViewCore.cpp

Wednesday, November 2, 11

Page 32: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Example: Google News

16:24:04.070 D/webcoreglue(  273): drawContent 11 ms16:24:04.110 D/webcoreglue(  273): drawContent 13 ms16:24:04.150 D/webcoreglue(  273): drawContent 13 ms16:24:04.190 D/webcoreglue(  273): drawContent 10 ms16:24:04.240 D/webcoreglue(  273): drawContent 10 ms16:24:04.280 D/webcoreglue(  273): drawContent 13 ms16:24:04.320 D/webcoreglue(  273): drawContent 13 ms16:24:04.360 D/webcoreglue(  273): drawContent 13 ms16:24:06.080 D/webcoreglue(  273): drawContent 12 ms16:24:06.140 D/webcoreglue(  273): drawContent 10 ms16:24:06.180 D/webcoreglue(  273): drawContent 13 ms16:24:06.230 D/webcoreglue(  273): drawContent 14 ms16:24:06.600 D/webcoreglue(  273): drawContent 26 ms16:24:06.640 D/webcoreglue(  273): drawContent 13 ms16:24:06.860 D/webcoreglue(  273): drawContent 33 ms16:24:06.890 D/webcoreglue(  273): drawContent 12 ms16:24:06.930 D/webcoreglue(  273): drawContent 13 ms16:24:06.960 D/webcoreglue(  273): drawContent 13 ms16:24:07.000 D/webcoreglue(  273): drawContent 13 ms

adb logcat -v time | grep drawContent

Wednesday, November 2, 11

Page 33: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Backing Store

Wednesday, November 2, 11

Page 34: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Maps

Tile

Wednesday, November 2, 11

Page 35: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Pinch to Zoom

when you pinch...

Wednesday, November 2, 11

Page 36: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Responsive UI

Processor

Rendering

User interaction

decoupled

Wednesday, November 2, 11

Page 37: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Rendering vs Interaction

Web Page

Backing StoreScreen

Rendering

User interaction

Wednesday, November 2, 11

Page 38: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Checkerboard Pattern

Wednesday, November 2, 11

Page 39: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Progressive Rendering

Crisp but slow

Fast but blurry

Wednesday, November 2, 11

Page 40: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Tiling System

CPU GPU

........

Texture upload

Wednesday, November 2, 11

Page 41: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Tile Transformation

Panning = Translation Zooming = Scaling

Wednesday, November 2, 11

Page 42: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Backing Store Support

Texture-based

Vector-based

Honeycomb and later

Wednesday, November 2, 11

Page 43: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Y U NOposition:fixed

Wednesday, November 2, 11

Page 44: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Demo

Wednesday, November 2, 11

Page 45: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Layer & Compositing

Wednesday, November 2, 11

Page 46: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Elements = Layers

Wednesday, November 2, 11

Page 47: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Typical Animation

opacity, movement, scaling, rotation, ...

Wednesday, November 2, 11

Page 48: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Immediate Mode

every animation tick

setInterval(function() {    box.draw(x, y);    x += 10;}, 20);

Wednesday, November 2, 11

Page 49: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Scene Graph

box.drawInto(layer);setInterval(function() {    layer.translate(10, 0);}, 20);

Change transformation matrix

Wednesday, November 2, 11

Page 50: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Logical 3-D

Wednesday, November 2, 11

Page 51: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Keep the Textures

Wednesday, November 2, 11

Page 52: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Demo

Wednesday, November 2, 11

Page 53: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Compositing Support

Honeycomb and later

Wednesday, November 2, 11

Page 54: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Well-known Trick

-webkit-transform: translateZ(0)

forcing 3-D transform

Not needed for CSS animation!

Wednesday, November 2, 11

Page 55: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Debugging in Safari

defaults write com.apple.Safari IncludeInternalDebugMenu

Wednesday, November 2, 11

Page 56: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Compositing Indicators

Composited layer

Container layer

No texture

Overflow

Texture (number = upload)

Wednesday, November 2, 11

Page 57: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Debugging in Chrome

about:flags

Wednesday, November 2, 11

Page 58: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Avoid Texture Reupload

No reupload Upload

OpacityPosition

SizeAnimation

Everything else!

“Hardware accelerated CSS”

Wednesday, November 2, 11

Page 59: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Avoid Overcapacity

GPU = Limited silicon spaceLarge layer ➔ broken into “tiles”

Wednesday, November 2, 11

Page 60: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Prepare & Reuse

Viewport

Hide the layer offscreen

Wednesday, November 2, 11

Page 61: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Wrap Up

Wednesday, November 2, 11

Page 62: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

Hardware Acceleration

Drawing primitives

Backing stores

Layer & compositing

Wednesday, November 2, 11

Page 63: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

THANK YOU!

Wednesday, November 2, 11

Page 64: Hardware Acceleration on Mobile, Ariya Hidayat & Jarred Nicholls

QUESTIONS?

ariya @ sencha.com

ariyahidayat

ariya.ofilabs.com

jarred @ sencha.com

jarrednicholls

Wednesday, November 2, 11