hardware acceleration on mobile, ariya hidayat & jarred nicholls

64
Wednesday, November 2, 11

Upload: sencha

Post on 11-Nov-2014

3.428 views

Category:

Technology


5 download

DESCRIPTION

GPU acceleration on mobile browsers, if it is leveraged correctly, can lead to a smooth and fluid applications, thus improving the user experience. There has been a lot of mentions and best practices of hardware acceleration these days, although so far it has been pretty general and hasn’t provided much technical direction apart from simple magical advice such as “use translate3d”. This talk sheds some more light on browser interactions with the GPU and explain what happens behind the scenes, covering the topic of acceleration of primitive drawing, the use of tiled backing store, and composited layer. Knowing the actual machinery behind hardware acceleration, you will be in the position to plan your strategy to improve the performance of your web application.

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