SlideShare a Scribd company logo
A Duel of Two Libraries 
Cairo vs. Skia 
Bryce Harrington – Senior Open Source Developer 
Samsung Research America (Silicon Valley) 
bryce@osg.samsung.com 
1 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
2 
What is Vector Graphics? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
3 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
4 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Basic Tutorial 
From 
Inkscape 
inkscape.org
5 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Basic Tutorial 
From 
Inkscape 
inkscape.org
6 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
7 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
8 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Fibonacci 
Little Owl 
By ark4n 
deviantart.com
9 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
openclipart.org 
public domain vector 
graphics
10 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
11 
Vector Graphics 
Snooker 
By Maddrum 
deviantart.co 
m 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
12 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Iron Man 
by mrmanders 
deviantart.com
13 
Vector Graphics 
Audi TT 
by JumpOrDie 
deviantart.co 
m 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
14 
What is Cairo? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
15 
What is Cairo? 
2D pen-based drawing model 
For both display and print 
Includes backends for acceleration 
and for vector output formats 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
16 
Overview 
Cairoglyphics vers 2.0 
This diagram works from left to right. It shows the drawing of two shapes which each go to the 
page one after the other. All the commands to do this come from a toolbox called the Context. 
On the next page (Summary) I list many of the commands that you can use. 
Transforms 
Clip 
The star will be drawn 
on top of the rectangle. 1 2 
Create Path 
Create Path 
Source 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Source 
The Page 
Diagram (c) 2007 Donn Ingle ­donn. 
ingle@gmail.com. Kubuntu 7.10 & Inkscape 
Create Mask 
Create Mask 
This rectangle will be drawn 
first, shaped by the clip. 
The clip only lasts for this 
one operation. 
Before you start drawing, you 
can set up a rotation and scale 
just like in a vector program like 
Inkscape. 
The Source is like a picture you 
slip under the Path. It is revealed 
by the masking commands just like 
scratching away the surface to see 
what's underneath. 
See Sources, Surfaces & Patterns diagram for details. 
hhtttptp:/://w/wwwww.t.otortratalll.ln.neet/tm/muu/w/wikiki/iC/CaairioroTTuutotoriraial l
17 
Cairo Backends 
Format backends 
 ps 
 pdf 
 svg 
Platform backends 
 image 
 xlib 
 xcb 
 ccaaiirroo--ggll 
 quartz 
 win32 
 beos 
 skia (‽) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
18 
Cairo-gl on the Linux Desktop 
Cairo-gl is not enabled for some distros (e.g. Ubuntu): 
 --enable-gl links cairo to libgl 
 NVIDIA's libgl gets linked to every client app 
 Enormous RAM increase per app running (300%) 
 See Launchpad #725434 
Several GL backends supported 
 cairo-gl (OpenGL) - EGL, GLX, WGL 
 glesv2 (OpenGL ES 2.0) - EGL 
 gglleessvv33 ((OOppeennGGLL EESS 33..00)) -- EEGGLL 
 vg (OpenVG) - EGL, GLX 
 cogl - experimental 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
19 
Installing Cairo 
Distro-supplied Cairo usually doesn't include GL support 
Cairo Trees: 
Upstream: http://cgit.freedesk.top.org/cairo 
CairoGles fork: https://github.com/SRA-SiliconValley/cairogles 
PPAs 
Coming Soon! 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
20 
What is Skia? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
21 
What is Skia? 
Skia Graphics Engine 
Greek for “sshhaaddooww” 
Written in C++ 
Nov 1, 2005 - Google buys Skia Inc. 
Based in Chapel Hill, North Carolina 
5 people 
Releases Skia Graphics Engine as Open Source 
Originally used for Android's WebKit, later added to Chrome web 
browser, Chrome OS, Chromium OS, and Android OS 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
22 
Skia features 
Skia is a 2D graphic library for drawing Text, Geometries, and Images. 
3x3 matrices w/ perspective 
antialiasing, transparency, filters, subpixel text 
shaders, transfer modes, maskfilters, patheffects 
reads SVG, PS, PDF, Flash and translates into Skia API calls 
Device backends for Skia currently include: 
Raster, OpenGL, PDF, XPS 
Picture (for recording and then playing back into another Canvas) 
Performance optimizations 
Copy-on-write for images and other data types 
Extensive use of the stack to avoid memory fragmentation 
Thread-safety to enable parallelization 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
23 
Installing Skia 
Skia trees: 
https://skia.googlesource.com/skia 
https://github.com/Samsung/skia 
• Snapshot dev/m36_1985 
Ubuntu PPA: 
https://launchpad.net/~bryce/+archive/ubuntu/skia/ 
RPM build spec: 
Only tested on Tizen 
See packaging/skia.spec 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
24 
Cairo vs. Skia! 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
25 
Cairo and Skia Differences 
Cairo 
C 
Standard build system 
(autoconf/automake) 
Drawing context is in cairo_t 
Packages available for all 
major distributions 
API/ABI Stable 
Being considered as an 
ISO Standard 
Skia 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
C++ 
Custom build system 
(ninja) 
Context is split 
• SkCanvas - drawing 
• SkPaint - style 
Not packaged 
Not API/ABI Stable 
PPrroommiisseess bbeetttteerr 
ppeerrffoorrmmaannccee
26 
Cairo/Skia Benchmarking 
“CaskBench” 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
27 
What is caskbench? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
?
28 
What is Caskbench? 
(Yet another?) testsuite with collection of tests 
Provides equivalent Cairo and Skia test implementations 
Establishes comparable rendering environments 
Ensures consistent measurements 
Selectable rendering systems 
Image, EGL, and GLX ((ccoommiinngg ssoooonn)) 
Includes a Shapes and Styles Library 
Circles, Rectangles, Triangles, Stars, Rounded Rectangles 
Solid, Linear/Radial Gradients, Image Pattern 
Stroke Dash, Cap, and Join Styles 
Collaboration with OSG, ASWP/ABT and SRI-B. (Thanks!) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
29 
How to use Caskbench 
$ cmake . 
$ make 
$ ./src/caskbench 
cairo­bubbles 
64 PASS 64 0.005676 0.006731 
skia­bubbles 
64 PASS 64 0.000987 0.001234 81.66% 
cairo­fill 
64 PASS 64 0.000789 0.000851 
... 
$ ./src/caskbench -t egl 
$ ./src/caskbench -t egl --iterations 100 --size 42 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
30 
Demo 
$ src/caskbench ­w 
1024 ­h 
800 ­i 
8 ­s 
500 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
31 
Caskbench options 
Usage: caskbench [ARG...] 
­­enable­egl­sample­buffers 
Sets EGL_SAMPLES=4 and EGL_SAMPLE_BUFFERS=1 in EGL attribute list 
­n, 
­­dry­run 
Just list the selected test case names without executing 
­i, 
­­iterations= 
INT The number of times each test case should be run 
­l, 
­­list­surfaces 
List the available surfaces linked in this executable 
­o, 
­­output­file= 
STRING Filename to write JSON output to 
­t, 
­­surface­type= 
STRING Type of graphics surface to use (see ­­list­surfaces) 
­s, 
­­test­size= 
INT Controls complexity of the tests, such as number of drawn 
elements 
­V, 
­­version 
Display the program version 
­S, 
­­shape= 
STRING Controls which shape to be drawn 
­X, 
­­x­position= 
INT The X location to draw the object 
­Y, 
­­y­position= 
INT The Y location to draw the object 
­W, 
­­width= 
INT Width of the shape bject 
­H, 
­­height= 
INT Height of the shape object 
­f, 
­­fill­type= 
STRING Limit fill type of objects to solid, gradient, image pattern type 
­g, 
­­animation= 
INT Controls the kinematics of the objects drawn 
­I, 
­­image­path= 
STRING Path to a stock image for use in clipping, patterns, etc. 
­w, 
­­stroke­width= 
INT Limit stroke with to specified width 
­m, 
­­multi­shapes= 
INT Randomize shape types used in tests 
­C, 
­­cap­style= 
INT Limit cap style to specified cap style ID 
­J, 
­­join­style= 
INT Limit join style to specified cap style ID 
­D, 
­­dash­style= 
INT Limit dash style to specified cap style ID 
Help options: 
­?, 
­­help 
Show this help message 
­­usage 
Display brief usage message 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
32 
What do test cases look like? 
static int max_dim; 
Cairo Skia 
int 
ca_setup_bubbles(caskbench_context_t *ctx) 
{ 
max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; 
return 1; 
} 
void 
ca_teardown_bubbles(void) 
{ 
} 
int 
ca_test_bubbles(caskbench_context_t *ctx) 
{ 
int i, x, y, r; 
cairo_t *cr = ctx->cairo_cr; 
for (i=0; i<ctx->size; i++) { 
cairoRandomizeColor(ctx); 
r = ((double)max_dim*rand())/RAND_MAX + 1; 
x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; 
y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; 
cairo_arc (cr, x, y, r, 0, 2*M_PI); 
cairo_fill (cr); 
} 
return 1; 
} 
static int max_dim; 
int 
sk_setup_bubbles(caskbench_context_t *ctx) 
{ 
max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; 
return 1; 
} 
void 
sk_teardown_bubbles(void) 
{ 
} 
int 
sk_test_bubbles(caskbench_context_t *ctx) 
{ 
int i, x, y, r; 
for (i=0; i<ctx->size; i++) { 
skiaRandomizePaintColor(ctx); 
r = ((double)max_dim*rand())/RAND_MAX + 1; 
x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; 
y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; 
ctx->skia_canvas->drawCircle(x, y, r, *ctx->skia_paint); 
} 
return 1; 
} 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
33 
Cairo Bubbles Test 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
34 
Skia Bubbles Test 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
35 
Adding New Backends 
Backends other than egl, glx and image are welcome 
Tasks for adding another backend: 
cairo-[backend].cpp - surface creation/update/destruction 
skia-[backend].cpp - surface creation/update/destruction 
[backend].cpp - shared code for both of the above 
caskbench-context.cpp - register your backend 
caskbench.cpp - add command line options you need 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
36 
Add Another Drawing Library 
More drawing libraries beyond Cairo and Skia also welcome 
Bit more involved, though: 
[drawlib]-[backend].cpp - surface creation/update/deletion 
[drawlib]-shapes.* - implement shape drawing 
[drawlib]-utils.cpp - misc. routines 
[drawlib]-tests/*.cpp - reimplement all tests 
caskbench_context.cpp - register your drawing library 
caskbench.cpp - add command line options, etc. 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
37 
Results (So far...) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
38 
Performance results (PC) 
$ caskbench ­i 
100 ­s 
256 ­t 
egl 
cpu: Intel(R) Core(TM) i5-2405S CPU @ 2.50GHz 
platform: x86_64 GNU/Linux 
distribution: Ubuntu Trusty Tahr (development branch) 
linux kernel: 3.13 
xserver: 1.15 
mesa: OpenGL version string: 3.0 Mesa 10.1.0 
video: snb-gt2 (8086:0112) sandybridge xserver-xorg-video-intel 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
39 
EGL Performance results (EGL, PC) 
test case ca sk 
vline 485 508 4.48% 
hline 482 499 3.41% 
test case ca sk 
line 292 510 42.79% 
multi_line 430 646 33.46% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
40 
Performance results (EGL, PC) 
test ca sk 
cubic 107 402 73.37% 
quadratic 123 416 70.47% 
test ca sk 
curves 11 76 85.44% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
41 
Performance results (EGL, PC) 
test ca sk 
circle 107 169 36.98% 
rect 243 81 ­201.03% 
test ca sk 
roundrect 109 232 53.11% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
42 
Performance results (EGL, PC) 
test ca sk 
star(!) 201 169 ­19.06% 
mulshape 139 197 29.57% 
test ca sk 
animation 123 375 67.13% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
43 
Performance results (EGL, PC) 
test ca sk 
fill 166 240 30.54% 
bubbles 169 45 ­274.75% 
test ca sk 
lin_grad 441 63 ­601.84% 
rad_grad 455 62 ­631.12% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
44 
Performance results (EGL, PC) 
test ca sk 
mask 433 876 50.53% 
clip(!) 1689 23 ­7336.62% 
test ca sk 
paint 364 6 ­5811.96% 
transform 8 2 ­258.79% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
45 
Performance results (EGL, PC) 
test ca sk 
text ! 767 5 ­15009.39% 
text_glyphs ! 708 41 ­1614.53% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
46 
Findings 
Skia has better performance than Cairo for EGL+MSAA 
50% faster on average for basic drawing ops (both on PC and M0) 
Slower than Cairo in certain cases 
Skia can be trickier than Cairo to get right 
Rendering discrepancies 
More sensitive to settings 
• Polygons with anti-aliasing segfaults in debug builds (mesa 8 only) 
• Rounded rects and stroke width > radius 
• Stroke with dashes (fStencilbits<2) 
• fSampleCount!=4 causes incorrect output 
• … ? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
47 
Ongoing Work 
Skia 
MSAA Oval/Circle fill and stroke optimizations 
Batch and route GrContext::drawPath() for rects and ellipses 
Curved strokes – GrShapePathRenderer 
SkDeferredCanvas improvements? 
Cairo 
Gles3 support 
Gaussian blur 
GL MSAA compositor & optimizations 
Drop shadow, inset shadow; shadow caching 
Image downscaling 
Perspective transformation 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
48 
Thank you 
https://github.com/SRA-SiliconValley/cairogles 
Samsung's cairo branch with gles3, etc. 
https://github.com/Samsung 
Samsung's branches of skia 
Caskbench 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
49 
Thank you. 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.

More Related Content

What's hot

OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
Arvind Devaraj
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
Electronic Arts / DICE
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
torisoup
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
National Cheng Kung University
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
Narann29
 
どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?
たけおか しょうぞう
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGL
Suhan Lee
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
 
Masked Occlusion Culling
Masked Occlusion CullingMasked Occlusion Culling
Masked Occlusion Culling
Intel® Software
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 

What's hot (20)

OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
 
どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGL
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Masked Occlusion Culling
Masked Occlusion CullingMasked Occlusion Culling
Masked Occlusion Culling
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 

Similar to Duel of Two Libraries: Cairo & Skia

A Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor PerformanceA Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor Performance
Samsung Open Source Group
 
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
EnlightenmentProject
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008
Ryan Chou
 
How Servo Renders the Web
How Servo Renders the WebHow Servo Renders the Web
How Servo Renders the Web
Adenilson Cavalcanti
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the Desktop
Samsung Open Source Group
 
Star Ccm604 Features Final
Star Ccm604 Features FinalStar Ccm604 Features Final
Star Ccm604 Features FinalEd Erb
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
Kyungmin Lee
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVG
stsire
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical Rendering
Joel Isaacson
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Databricks
 
Optimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and VulkanOptimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and Vulkan
ax inc.
 
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Andrew Richards
 
ED CONNOR RESUME 2013
ED CONNOR RESUME 2013ED CONNOR RESUME 2013
ED CONNOR RESUME 2013Edward Connor
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
AMD Developer Central
 
Introduction to 2D/3D Graphics
Introduction to 2D/3D GraphicsIntroduction to 2D/3D Graphics
Introduction to 2D/3D Graphics
Prabindh Sundareson
 
GPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge GraphGPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge Graph
Neo4j
 
How to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native ActivityHow to Use OpenGL/ES on Native Activity
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
melbats
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's Stampede
Intel® Software
 

Similar to Duel of Two Libraries: Cairo & Skia (20)

A Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor PerformanceA Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor Performance
 
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008
 
How Servo Renders the Web
How Servo Renders the WebHow Servo Renders the Web
How Servo Renders the Web
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the Desktop
 
Star Ccm604 Features Final
Star Ccm604 Features FinalStar Ccm604 Features Final
Star Ccm604 Features Final
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVG
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical Rendering
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
 
Optimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and VulkanOptimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and Vulkan
 
Task 2
Task 2Task 2
Task 2
 
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
 
ED CONNOR RESUME 2013
ED CONNOR RESUME 2013ED CONNOR RESUME 2013
ED CONNOR RESUME 2013
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
 
Introduction to 2D/3D Graphics
Introduction to 2D/3D GraphicsIntroduction to 2D/3D Graphics
Introduction to 2D/3D Graphics
 
GPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge GraphGPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge Graph
 
How to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native ActivityHow to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native Activity
 
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's Stampede
 

More from Samsung Open Source Group

The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)
Samsung Open Source Group
 
Easy IoT with JavaScript
Easy IoT with JavaScriptEasy IoT with JavaScript
Easy IoT with JavaScript
Samsung Open Source Group
 
Spawny: A New Approach to Logins
Spawny: A New Approach to LoginsSpawny: A New Approach to Logins
Spawny: A New Approach to Logins
Samsung Open Source Group
 
Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
Samsung Open Source Group
 
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT DevicesTizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Samsung Open Source Group
 
IoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and BeyondIoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and Beyond
Samsung Open Source Group
 
IoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorialIoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorial
Samsung Open Source Group
 
GENIVI + OCF Cooperation
GENIVI + OCF CooperationGENIVI + OCF Cooperation
GENIVI + OCF Cooperation
Samsung Open Source Group
 
Framework for IoT Interoperability
Framework for IoT InteroperabilityFramework for IoT Interoperability
Framework for IoT Interoperability
Samsung Open Source Group
 
Open Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate StrategyOpen Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate Strategy
Samsung Open Source Group
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
Samsung Open Source Group
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
Samsung Open Source Group
 
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux DeviceAdding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Samsung Open Source Group
 
IoTivity: From Devices to the Cloud
IoTivity: From Devices to the CloudIoTivity: From Devices to the Cloud
IoTivity: From Devices to the Cloud
Samsung Open Source Group
 
SOSCON 2016 JerryScript
SOSCON 2016 JerryScriptSOSCON 2016 JerryScript
SOSCON 2016 JerryScript
Samsung Open Source Group
 
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivityIoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
Samsung Open Source Group
 
Run Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT NetworkRun Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT Network
Samsung Open Source Group
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Samsung Open Source Group
 
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/LinuxIoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
Samsung Open Source Group
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of ThingsJerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
Samsung Open Source Group
 

More from Samsung Open Source Group (20)

The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)
 
Easy IoT with JavaScript
Easy IoT with JavaScriptEasy IoT with JavaScript
Easy IoT with JavaScript
 
Spawny: A New Approach to Logins
Spawny: A New Approach to LoginsSpawny: A New Approach to Logins
Spawny: A New Approach to Logins
 
Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
 
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT DevicesTizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
 
IoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and BeyondIoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and Beyond
 
IoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorialIoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorial
 
GENIVI + OCF Cooperation
GENIVI + OCF CooperationGENIVI + OCF Cooperation
GENIVI + OCF Cooperation
 
Framework for IoT Interoperability
Framework for IoT InteroperabilityFramework for IoT Interoperability
Framework for IoT Interoperability
 
Open Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate StrategyOpen Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate Strategy
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
 
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux DeviceAdding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
 
IoTivity: From Devices to the Cloud
IoTivity: From Devices to the CloudIoTivity: From Devices to the Cloud
IoTivity: From Devices to the Cloud
 
SOSCON 2016 JerryScript
SOSCON 2016 JerryScriptSOSCON 2016 JerryScript
SOSCON 2016 JerryScript
 
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivityIoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
 
Run Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT NetworkRun Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT Network
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
 
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/LinuxIoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of ThingsJerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
 

Recently uploaded

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
ViralQR
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 

Recently uploaded (20)

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 

Duel of Two Libraries: Cairo & Skia

  • 1. A Duel of Two Libraries Cairo vs. Skia Bryce Harrington – Senior Open Source Developer Samsung Research America (Silicon Valley) bryce@osg.samsung.com 1 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 2. 2 What is Vector Graphics? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 3. 3 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 4. 4 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Basic Tutorial From Inkscape inkscape.org
  • 5. 5 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Basic Tutorial From Inkscape inkscape.org
  • 6. 6 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 7. 7 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 8. 8 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Fibonacci Little Owl By ark4n deviantart.com
  • 9. 9 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. openclipart.org public domain vector graphics
  • 10. 10 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 11. 11 Vector Graphics Snooker By Maddrum deviantart.co m © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 12. 12 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Iron Man by mrmanders deviantart.com
  • 13. 13 Vector Graphics Audi TT by JumpOrDie deviantart.co m © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 14. 14 What is Cairo? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 15. 15 What is Cairo? 2D pen-based drawing model For both display and print Includes backends for acceleration and for vector output formats © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 16. 16 Overview Cairoglyphics vers 2.0 This diagram works from left to right. It shows the drawing of two shapes which each go to the page one after the other. All the commands to do this come from a toolbox called the Context. On the next page (Summary) I list many of the commands that you can use. Transforms Clip The star will be drawn on top of the rectangle. 1 2 Create Path Create Path Source © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Source The Page Diagram (c) 2007 Donn Ingle ­donn. ingle@gmail.com. Kubuntu 7.10 & Inkscape Create Mask Create Mask This rectangle will be drawn first, shaped by the clip. The clip only lasts for this one operation. Before you start drawing, you can set up a rotation and scale just like in a vector program like Inkscape. The Source is like a picture you slip under the Path. It is revealed by the masking commands just like scratching away the surface to see what's underneath. See Sources, Surfaces & Patterns diagram for details. hhtttptp:/://w/wwwww.t.otortratalll.ln.neet/tm/muu/w/wikiki/iC/CaairioroTTuutotoriraial l
  • 17. 17 Cairo Backends Format backends  ps  pdf  svg Platform backends  image  xlib  xcb  ccaaiirroo--ggll  quartz  win32  beos  skia (‽) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 18. 18 Cairo-gl on the Linux Desktop Cairo-gl is not enabled for some distros (e.g. Ubuntu):  --enable-gl links cairo to libgl  NVIDIA's libgl gets linked to every client app  Enormous RAM increase per app running (300%)  See Launchpad #725434 Several GL backends supported  cairo-gl (OpenGL) - EGL, GLX, WGL  glesv2 (OpenGL ES 2.0) - EGL  gglleessvv33 ((OOppeennGGLL EESS 33..00)) -- EEGGLL  vg (OpenVG) - EGL, GLX  cogl - experimental © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 19. 19 Installing Cairo Distro-supplied Cairo usually doesn't include GL support Cairo Trees: Upstream: http://cgit.freedesk.top.org/cairo CairoGles fork: https://github.com/SRA-SiliconValley/cairogles PPAs Coming Soon! © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 20. 20 What is Skia? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 21. 21 What is Skia? Skia Graphics Engine Greek for “sshhaaddooww” Written in C++ Nov 1, 2005 - Google buys Skia Inc. Based in Chapel Hill, North Carolina 5 people Releases Skia Graphics Engine as Open Source Originally used for Android's WebKit, later added to Chrome web browser, Chrome OS, Chromium OS, and Android OS © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 22. 22 Skia features Skia is a 2D graphic library for drawing Text, Geometries, and Images. 3x3 matrices w/ perspective antialiasing, transparency, filters, subpixel text shaders, transfer modes, maskfilters, patheffects reads SVG, PS, PDF, Flash and translates into Skia API calls Device backends for Skia currently include: Raster, OpenGL, PDF, XPS Picture (for recording and then playing back into another Canvas) Performance optimizations Copy-on-write for images and other data types Extensive use of the stack to avoid memory fragmentation Thread-safety to enable parallelization © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 23. 23 Installing Skia Skia trees: https://skia.googlesource.com/skia https://github.com/Samsung/skia • Snapshot dev/m36_1985 Ubuntu PPA: https://launchpad.net/~bryce/+archive/ubuntu/skia/ RPM build spec: Only tested on Tizen See packaging/skia.spec © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 24. 24 Cairo vs. Skia! © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 25. 25 Cairo and Skia Differences Cairo C Standard build system (autoconf/automake) Drawing context is in cairo_t Packages available for all major distributions API/ABI Stable Being considered as an ISO Standard Skia © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. C++ Custom build system (ninja) Context is split • SkCanvas - drawing • SkPaint - style Not packaged Not API/ABI Stable PPrroommiisseess bbeetttteerr ppeerrffoorrmmaannccee
  • 26. 26 Cairo/Skia Benchmarking “CaskBench” © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 27. 27 What is caskbench? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. ?
  • 28. 28 What is Caskbench? (Yet another?) testsuite with collection of tests Provides equivalent Cairo and Skia test implementations Establishes comparable rendering environments Ensures consistent measurements Selectable rendering systems Image, EGL, and GLX ((ccoommiinngg ssoooonn)) Includes a Shapes and Styles Library Circles, Rectangles, Triangles, Stars, Rounded Rectangles Solid, Linear/Radial Gradients, Image Pattern Stroke Dash, Cap, and Join Styles Collaboration with OSG, ASWP/ABT and SRI-B. (Thanks!) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 29. 29 How to use Caskbench $ cmake . $ make $ ./src/caskbench cairo­bubbles 64 PASS 64 0.005676 0.006731 skia­bubbles 64 PASS 64 0.000987 0.001234 81.66% cairo­fill 64 PASS 64 0.000789 0.000851 ... $ ./src/caskbench -t egl $ ./src/caskbench -t egl --iterations 100 --size 42 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 30. 30 Demo $ src/caskbench ­w 1024 ­h 800 ­i 8 ­s 500 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 31. 31 Caskbench options Usage: caskbench [ARG...] ­­enable­egl­sample­buffers Sets EGL_SAMPLES=4 and EGL_SAMPLE_BUFFERS=1 in EGL attribute list ­n, ­­dry­run Just list the selected test case names without executing ­i, ­­iterations= INT The number of times each test case should be run ­l, ­­list­surfaces List the available surfaces linked in this executable ­o, ­­output­file= STRING Filename to write JSON output to ­t, ­­surface­type= STRING Type of graphics surface to use (see ­­list­surfaces) ­s, ­­test­size= INT Controls complexity of the tests, such as number of drawn elements ­V, ­­version Display the program version ­S, ­­shape= STRING Controls which shape to be drawn ­X, ­­x­position= INT The X location to draw the object ­Y, ­­y­position= INT The Y location to draw the object ­W, ­­width= INT Width of the shape bject ­H, ­­height= INT Height of the shape object ­f, ­­fill­type= STRING Limit fill type of objects to solid, gradient, image pattern type ­g, ­­animation= INT Controls the kinematics of the objects drawn ­I, ­­image­path= STRING Path to a stock image for use in clipping, patterns, etc. ­w, ­­stroke­width= INT Limit stroke with to specified width ­m, ­­multi­shapes= INT Randomize shape types used in tests ­C, ­­cap­style= INT Limit cap style to specified cap style ID ­J, ­­join­style= INT Limit join style to specified cap style ID ­D, ­­dash­style= INT Limit dash style to specified cap style ID Help options: ­?, ­­help Show this help message ­­usage Display brief usage message © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 32. 32 What do test cases look like? static int max_dim; Cairo Skia int ca_setup_bubbles(caskbench_context_t *ctx) { max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; return 1; } void ca_teardown_bubbles(void) { } int ca_test_bubbles(caskbench_context_t *ctx) { int i, x, y, r; cairo_t *cr = ctx->cairo_cr; for (i=0; i<ctx->size; i++) { cairoRandomizeColor(ctx); r = ((double)max_dim*rand())/RAND_MAX + 1; x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; cairo_arc (cr, x, y, r, 0, 2*M_PI); cairo_fill (cr); } return 1; } static int max_dim; int sk_setup_bubbles(caskbench_context_t *ctx) { max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; return 1; } void sk_teardown_bubbles(void) { } int sk_test_bubbles(caskbench_context_t *ctx) { int i, x, y, r; for (i=0; i<ctx->size; i++) { skiaRandomizePaintColor(ctx); r = ((double)max_dim*rand())/RAND_MAX + 1; x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; ctx->skia_canvas->drawCircle(x, y, r, *ctx->skia_paint); } return 1; } © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 33. 33 Cairo Bubbles Test © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 34. 34 Skia Bubbles Test © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 35. 35 Adding New Backends Backends other than egl, glx and image are welcome Tasks for adding another backend: cairo-[backend].cpp - surface creation/update/destruction skia-[backend].cpp - surface creation/update/destruction [backend].cpp - shared code for both of the above caskbench-context.cpp - register your backend caskbench.cpp - add command line options you need © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 36. 36 Add Another Drawing Library More drawing libraries beyond Cairo and Skia also welcome Bit more involved, though: [drawlib]-[backend].cpp - surface creation/update/deletion [drawlib]-shapes.* - implement shape drawing [drawlib]-utils.cpp - misc. routines [drawlib]-tests/*.cpp - reimplement all tests caskbench_context.cpp - register your drawing library caskbench.cpp - add command line options, etc. © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 37. 37 Results (So far...) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 38. 38 Performance results (PC) $ caskbench ­i 100 ­s 256 ­t egl cpu: Intel(R) Core(TM) i5-2405S CPU @ 2.50GHz platform: x86_64 GNU/Linux distribution: Ubuntu Trusty Tahr (development branch) linux kernel: 3.13 xserver: 1.15 mesa: OpenGL version string: 3.0 Mesa 10.1.0 video: snb-gt2 (8086:0112) sandybridge xserver-xorg-video-intel © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 39. 39 EGL Performance results (EGL, PC) test case ca sk vline 485 508 4.48% hline 482 499 3.41% test case ca sk line 292 510 42.79% multi_line 430 646 33.46% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 40. 40 Performance results (EGL, PC) test ca sk cubic 107 402 73.37% quadratic 123 416 70.47% test ca sk curves 11 76 85.44% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 41. 41 Performance results (EGL, PC) test ca sk circle 107 169 36.98% rect 243 81 ­201.03% test ca sk roundrect 109 232 53.11% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 42. 42 Performance results (EGL, PC) test ca sk star(!) 201 169 ­19.06% mulshape 139 197 29.57% test ca sk animation 123 375 67.13% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 43. 43 Performance results (EGL, PC) test ca sk fill 166 240 30.54% bubbles 169 45 ­274.75% test ca sk lin_grad 441 63 ­601.84% rad_grad 455 62 ­631.12% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 44. 44 Performance results (EGL, PC) test ca sk mask 433 876 50.53% clip(!) 1689 23 ­7336.62% test ca sk paint 364 6 ­5811.96% transform 8 2 ­258.79% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 45. 45 Performance results (EGL, PC) test ca sk text ! 767 5 ­15009.39% text_glyphs ! 708 41 ­1614.53% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 46. 46 Findings Skia has better performance than Cairo for EGL+MSAA 50% faster on average for basic drawing ops (both on PC and M0) Slower than Cairo in certain cases Skia can be trickier than Cairo to get right Rendering discrepancies More sensitive to settings • Polygons with anti-aliasing segfaults in debug builds (mesa 8 only) • Rounded rects and stroke width > radius • Stroke with dashes (fStencilbits<2) • fSampleCount!=4 causes incorrect output • … ? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 47. 47 Ongoing Work Skia MSAA Oval/Circle fill and stroke optimizations Batch and route GrContext::drawPath() for rects and ellipses Curved strokes – GrShapePathRenderer SkDeferredCanvas improvements? Cairo Gles3 support Gaussian blur GL MSAA compositor & optimizations Drop shadow, inset shadow; shadow caching Image downscaling Perspective transformation © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 48. 48 Thank you https://github.com/SRA-SiliconValley/cairogles Samsung's cairo branch with gles3, etc. https://github.com/Samsung Samsung's branches of skia Caskbench © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 49. 49 Thank you. © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.